move langage-code-to-country-code mapping into ssr filename
This commit is contained in:
parent
3895bf292a
commit
d8042552d8
|
@ -6,6 +6,8 @@ Translation files can be created out of the templates [template.pot](https://git
|
|||
|
||||
All translated languages get an own chat channel that just people who use this language can access.
|
||||
|
||||
If a language code differs from the country code of a wanted flag, it can be defined in the ssr filename, like `ssr-en-gb.po` would be the english language, with the flag of Great Britain.
|
||||
|
||||
## With poedit
|
||||
|
||||
### Create new translation
|
||||
|
|
|
@ -98,19 +98,19 @@ msgstr ""
|
|||
msgid "Loading..."
|
||||
msgstr ""
|
||||
|
||||
#: src/ssr/PopUp.jsx:62
|
||||
#: src/ssr/PopUp.jsx:55
|
||||
msgid "ppfun"
|
||||
msgstr ""
|
||||
|
||||
#: src/ssr/PopUp.jsx:63
|
||||
#: src/ssr/PopUp.jsx:56
|
||||
msgid "PixelPlanet.Fun PopUp"
|
||||
msgstr ""
|
||||
|
||||
#: src/ssr/Main.jsx:71
|
||||
#: src/ssr/Main.jsx:64
|
||||
msgid "PixelPlanet.Fun"
|
||||
msgstr ""
|
||||
|
||||
#: src/ssr/Main.jsx:72
|
||||
#: src/ssr/Main.jsx:65
|
||||
msgid "Place color pixels on an map styled canvas with other players online"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
import { TTag } from 'ttag';
|
||||
import cookie from 'cookie';
|
||||
|
||||
import { languageFromLocalisation } from '../utils/location';
|
||||
import { getLangsOfJsAsset } from './assets';
|
||||
|
||||
// eslint-disable-next-line max-len
|
||||
|
@ -12,23 +11,37 @@ const localeImports = require.context('../../i18n', false, /^\.[/\\]ssr-.+\.po$/
|
|||
|
||||
const ttags = {};
|
||||
|
||||
export const availableLangs = [];
|
||||
|
||||
(() => {
|
||||
const langs = localeImports.keys();
|
||||
const jsLangs = getLangsOfJsAsset('client');
|
||||
|
||||
if (jsLangs.includes('en')) {
|
||||
ttags.en = new TTag();
|
||||
availableLangs.push(['en', 'gb']);
|
||||
}
|
||||
|
||||
for (let i = 0; i < langs.length; i += 1) {
|
||||
const file = langs[i];
|
||||
// ./ssr-de.po
|
||||
const lang = file.replace('./ssr-', '').replace('.po', '').toLowerCase();
|
||||
let lang = file.replace('./ssr-', '').replace('.po', '').toLowerCase();
|
||||
let flag = lang;
|
||||
/*
|
||||
* in cases where the language code and country code differ,
|
||||
* the country code can be given seperately in the file name
|
||||
* i.e.: ./ssr-en-gb.po
|
||||
*/
|
||||
const seperator = lang.indexOf('-');
|
||||
if (seperator !== -1) {
|
||||
[lang, flag] = lang.split('-');
|
||||
}
|
||||
if (jsLangs.includes(lang)) {
|
||||
const ttag = new TTag();
|
||||
ttag.addLocale(lang, localeImports(file).default);
|
||||
ttag.useLocale(lang);
|
||||
ttags[lang] = ttag;
|
||||
availableLangs.push([lang, flag]);
|
||||
}
|
||||
}
|
||||
})();
|
||||
|
@ -37,6 +50,31 @@ export function getTTag(lang) {
|
|||
return ttags[lang] || ttags.en || Object.values(ttags)[0];
|
||||
}
|
||||
|
||||
/*
|
||||
* gets preferred language out of localisation string
|
||||
* @param location string (like from accept-language header)
|
||||
* @return language code
|
||||
*/
|
||||
function languageFromLocalisation(localisation) {
|
||||
if (!localisation) {
|
||||
return 'en';
|
||||
}
|
||||
let lang = localisation;
|
||||
let i = lang.indexOf('-');
|
||||
if (i !== -1) {
|
||||
lang = lang.slice(0, i);
|
||||
}
|
||||
i = lang.indexOf(',');
|
||||
if (i !== -1) {
|
||||
lang = lang.slice(0, i);
|
||||
}
|
||||
i = lang.indexOf(';');
|
||||
if (i !== -1) {
|
||||
lang = lang.slice(0, i);
|
||||
}
|
||||
return lang.toLowerCase();
|
||||
}
|
||||
|
||||
/*
|
||||
* express middleware for getting language
|
||||
* It checks the lang cookie, and if not present,
|
||||
|
|
|
@ -6,19 +6,12 @@
|
|||
import { createHash } from 'crypto';
|
||||
import etag from 'etag';
|
||||
|
||||
import { langCodeToCC } from '../utils/location';
|
||||
import ttags, { getTTag } from '../core/ttag';
|
||||
import { getTTag, availableLangs as langs } from '../core/ttag';
|
||||
import { getJsAssets, getCssAssets } from '../core/assets';
|
||||
import socketEvents from '../socket/socketEvents';
|
||||
import { BACKUP_URL } from '../core/config';
|
||||
import { getHostFromRequest } from '../utils/ip';
|
||||
|
||||
/*
|
||||
* generate language list
|
||||
*/
|
||||
const langs = Object.keys(ttags)
|
||||
.map((l) => [l, langCodeToCC(l)]);
|
||||
|
||||
/*
|
||||
* values that we pass to client scripts
|
||||
*/
|
||||
|
|
|
@ -6,19 +6,12 @@
|
|||
/* eslint-disable max-len */
|
||||
import etag from 'etag';
|
||||
|
||||
import { langCodeToCC } from '../utils/location';
|
||||
import ttags, { getTTag } from '../core/ttag';
|
||||
import { getTTag, availableLangs as langs } from '../core/ttag';
|
||||
import socketEvents from '../socket/socketEvents';
|
||||
import { getJsAssets, getCssAssets } from '../core/assets';
|
||||
import { BACKUP_URL } from '../core/config';
|
||||
import { getHostFromRequest } from '../utils/ip';
|
||||
|
||||
/*
|
||||
* generate language list
|
||||
*/
|
||||
const langs = Object.keys(ttags)
|
||||
.map((l) => [l, langCodeToCC(l)]);
|
||||
|
||||
/*
|
||||
* values that we pass to client scripts
|
||||
*/
|
||||
|
|
|
@ -1,50 +0,0 @@
|
|||
/*
|
||||
* provide location and lang specific features
|
||||
*/
|
||||
|
||||
/*
|
||||
* gets preferred language out of localisation string
|
||||
* @param location string (like from accept-language header)
|
||||
* @return language code
|
||||
*/
|
||||
export function languageFromLocalisation(localisation) {
|
||||
if (!localisation) {
|
||||
return 'en';
|
||||
}
|
||||
let lang = localisation;
|
||||
let i = lang.indexOf('-');
|
||||
if (i !== -1) {
|
||||
lang = lang.slice(0, i);
|
||||
}
|
||||
i = lang.indexOf(',');
|
||||
if (i !== -1) {
|
||||
lang = lang.slice(0, i);
|
||||
}
|
||||
i = lang.indexOf(';');
|
||||
if (i !== -1) {
|
||||
lang = lang.slice(0, i);
|
||||
}
|
||||
return lang.toLowerCase();
|
||||
}
|
||||
|
||||
/*
|
||||
* get country code to language code for displaying flags
|
||||
* to languages
|
||||
* @param lang 2-char lang code
|
||||
* @return 2-char country code
|
||||
*/
|
||||
const lang2CC = {
|
||||
en: 'gb',
|
||||
dz: 'bt',
|
||||
hy: 'am',
|
||||
uk: 'ua',
|
||||
ca: 'ct',
|
||||
sr: 'rs',
|
||||
be: 'by',
|
||||
kk: 'kz',
|
||||
da: 'dk',
|
||||
fa: 'ir',
|
||||
};
|
||||
export function langCodeToCC(lang) {
|
||||
return lang2CC[lang] || lang;
|
||||
}
|
Loading…
Reference in New Issue
Block a user