android version
This commit is contained in:
79
scripts/generate-android-i18n.mjs
Normal file
79
scripts/generate-android-i18n.mjs
Normal file
@@ -0,0 +1,79 @@
|
||||
import { readFile, writeFile, mkdir } from "node:fs/promises";
|
||||
import path from "node:path";
|
||||
|
||||
const root = process.cwd();
|
||||
const localesDir = path.join(root, "client", "src", "i18n", "locales");
|
||||
const androidResDir = path.join(root, "android", "app", "src", "main", "res");
|
||||
|
||||
const localeMap = {
|
||||
en: "values",
|
||||
de: "values-de",
|
||||
es: "values-es",
|
||||
fr: "values-fr",
|
||||
it: "values-it",
|
||||
ja: "values-ja",
|
||||
th: "values-th",
|
||||
tl: "values-tl",
|
||||
zh: "values-zh-rCN"
|
||||
};
|
||||
|
||||
const keyMap = {
|
||||
label_nick: "label_nick",
|
||||
label_gender: "label_gender",
|
||||
label_age: "label_age",
|
||||
label_country: "label_country",
|
||||
button_start_chat: "button_start_chat",
|
||||
gender_female: "gender_female",
|
||||
gender_male: "gender_male",
|
||||
gender_pair: "gender_pair",
|
||||
gender_trans_mf: "gender_trans_mf",
|
||||
gender_trans_fm: "gender_trans_fm",
|
||||
menu_search: "tab_search",
|
||||
menu_inbox: "tab_inbox",
|
||||
menu_history: "tab_history",
|
||||
button_send: "button_send",
|
||||
search_username_includes: "search_username_includes",
|
||||
search_from_age: "search_from_age",
|
||||
search_to_age: "search_to_age",
|
||||
search_country: "search_country",
|
||||
search_genders: "search_genders",
|
||||
search_all: "search_all",
|
||||
search_button: "search_button",
|
||||
search_no_results: "search_no_results",
|
||||
search_min_age_error: "search_min_age_error",
|
||||
history_empty: "history_empty",
|
||||
button_block_user: "block",
|
||||
button_unblock_user: "unblock",
|
||||
tooltip_send_image: "button_image"
|
||||
};
|
||||
|
||||
function xmlEscape(value) {
|
||||
return String(value)
|
||||
.replace(/&/g, "&")
|
||||
.replace(/</g, "<")
|
||||
.replace(/>/g, ">")
|
||||
.replace(/"/g, '\\"')
|
||||
.replace(/'/g, "\\'");
|
||||
}
|
||||
|
||||
for (const [locale, folder] of Object.entries(localeMap)) {
|
||||
const sourcePath = path.join(localesDir, `${locale}.json`);
|
||||
const targetDir = path.join(androidResDir, folder);
|
||||
const targetPath = path.join(targetDir, "strings.generated.xml");
|
||||
|
||||
const raw = await readFile(sourcePath, "utf8");
|
||||
const json = JSON.parse(raw);
|
||||
const lines = ["<resources>"];
|
||||
|
||||
for (const [webKey, androidKey] of Object.entries(keyMap)) {
|
||||
const value = json[webKey];
|
||||
if (!value || typeof value !== "string") continue;
|
||||
lines.push(` <string name="${androidKey}">${xmlEscape(value.replace(/<[^>]+>/g, "").trim())}</string>`);
|
||||
}
|
||||
|
||||
lines.push("</resources>", "");
|
||||
await mkdir(targetDir, { recursive: true });
|
||||
await writeFile(targetPath, lines.join("\n"), "utf8");
|
||||
}
|
||||
|
||||
console.log("Android i18n files generated from web locales.");
|
||||
Reference in New Issue
Block a user