move langage-code-to-country-code mapping into ssr filename

This commit is contained in:
HF 2023-12-13 02:04:55 +01:00
parent 3895bf292a
commit d8042552d8
13 changed files with 48 additions and 72 deletions

View File

@ -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

View File

@ -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 ""

View File

@ -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,

View File

@ -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
*/

View File

@ -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
*/

View File

@ -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;
}