forked from MapComplete/MapComplete
Merge master
This commit is contained in:
commit
be95ad58f8
101 changed files with 6900 additions and 8378 deletions
|
@ -47,17 +47,33 @@ class TranslationPart {
|
|||
return;
|
||||
}
|
||||
|
||||
for (const key in object) {
|
||||
for (let key in object) {
|
||||
if (!object.hasOwnProperty(key)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const v = object[key]
|
||||
|
||||
if (v == null) {
|
||||
console.warn("Got a null value for key ", key)
|
||||
continue
|
||||
}
|
||||
|
||||
if (v["id"] !== undefined && context.endsWith("tagRenderings")) {
|
||||
// We use the embedded id as key instead of the index as this is more stable
|
||||
// Note: indonesian is shortened as 'id' as well!
|
||||
if (v["en"] !== undefined || v["nl"] !== undefined) {
|
||||
// This is probably a translation already!
|
||||
// pass
|
||||
} else {
|
||||
|
||||
key = v["id"]
|
||||
if (typeof key !== "string") {
|
||||
throw "Panic: found a non-string ID at" + context
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (typeof v !== "object") {
|
||||
continue;
|
||||
}
|
||||
|
@ -118,7 +134,10 @@ class TranslationPart {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Checks that the given object only contains string-values
|
||||
* @param tr
|
||||
*/
|
||||
function isTranslation(tr: any): boolean {
|
||||
for (const key in tr) {
|
||||
if (typeof tr[key] !== "string") {
|
||||
|
@ -128,6 +147,11 @@ function isTranslation(tr: any): boolean {
|
|||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts a translation object into something that can be added to the 'generated translations'
|
||||
* @param obj
|
||||
* @param depth
|
||||
*/
|
||||
function transformTranslation(obj: any, depth = 1) {
|
||||
|
||||
if (isTranslation(obj)) {
|
||||
|
@ -148,6 +172,9 @@ function transformTranslation(obj: any, depth = 1) {
|
|||
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates the big compiledTranslations file
|
||||
*/
|
||||
function genTranslations() {
|
||||
const translations = JSON.parse(fs.readFileSync("./assets/generated/translations.json", "utf-8"))
|
||||
const transformed = transformTranslation(translations);
|
||||
|
@ -161,7 +188,10 @@ function genTranslations() {
|
|||
|
||||
}
|
||||
|
||||
// Read 'lang/*.json', writes to 'assets/generated/translations.json'
|
||||
/**
|
||||
* Reads 'lang/*.json', writes them into to 'assets/generated/translations.json'.
|
||||
* This is only for the core translations
|
||||
*/
|
||||
function compileTranslationsFromWeblate() {
|
||||
const translations = ScriptUtils.readDirRecSync("./langs", 1)
|
||||
.filter(path => path.indexOf(".json") > 0)
|
||||
|
@ -179,7 +209,11 @@ function compileTranslationsFromWeblate() {
|
|||
|
||||
}
|
||||
|
||||
// Get all the strings out of the layers; writes them onto the weblate paths
|
||||
/**
|
||||
* Get all the strings out of the layers; writes them onto the weblate paths
|
||||
* @param objects
|
||||
* @param target
|
||||
*/
|
||||
function generateTranslationsObjectFrom(objects: { path: string, parsed: { id: string } }[], target: string) {
|
||||
const tr = new TranslationPart();
|
||||
|
||||
|
@ -201,6 +235,7 @@ function generateTranslationsObjectFrom(objects: { path: string, parsed: { id: s
|
|||
}
|
||||
let json = tr.toJson(lang)
|
||||
try {
|
||||
|
||||
json = JSON.stringify(JSON.parse(json), null, " ");
|
||||
} catch (e) {
|
||||
console.error(e)
|
||||
|
@ -210,15 +245,34 @@ function generateTranslationsObjectFrom(objects: { path: string, parsed: { id: s
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Merge two objects together
|
||||
* @param source: where the tranlations come from
|
||||
* @param target: the object in which the translations should be merged
|
||||
* @param language: the language code
|
||||
* @param context: context for error handling
|
||||
* @constructor
|
||||
*/
|
||||
function MergeTranslation(source: any, target: any, language: string, context: string = "") {
|
||||
|
||||
let keyRemapping: Map<string, string> = undefined
|
||||
if (context.endsWith(".tagRenderings")) {
|
||||
keyRemapping = new Map<string, string>()
|
||||
for (const key in target) {
|
||||
keyRemapping.set(target[key].id, key)
|
||||
}
|
||||
}
|
||||
|
||||
for (const key in source) {
|
||||
if (!source.hasOwnProperty(key)) {
|
||||
continue
|
||||
}
|
||||
|
||||
const sourceV = source[key];
|
||||
const targetV = target[key]
|
||||
const targetV = target[keyRemapping?.get(key) ?? key]
|
||||
|
||||
if (typeof sourceV === "string") {
|
||||
// Add the translation
|
||||
if (targetV === undefined) {
|
||||
if (typeof target === "string") {
|
||||
throw "Trying to merge a translation into a fixed string at " + context + " for key " + key;
|
||||
|
@ -279,9 +333,9 @@ function loadTranslationFilesFrom(target: string): Map<string, any> {
|
|||
for (const translationFilePath of translationFilePaths) {
|
||||
let language = translationFilePath.substr(translationFilePath.lastIndexOf("/") + 1)
|
||||
language = language.substr(0, language.length - 5)
|
||||
try{
|
||||
try {
|
||||
translationFiles.set(language, JSON.parse(readFileSync(translationFilePath, "utf8")))
|
||||
}catch(e){
|
||||
} catch (e) {
|
||||
console.error("Invalid JSON file or file does not exist", translationFilePath)
|
||||
throw e;
|
||||
}
|
||||
|
@ -301,6 +355,9 @@ function mergeLayerTranslations() {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Load the translations into the theme files
|
||||
*/
|
||||
function mergeThemeTranslations() {
|
||||
const themeFiles = ScriptUtils.getThemeFiles();
|
||||
for (const themeFile of themeFiles) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue