~repos /only-bible-app

#kotlin#android#ios

GIT_CONFIG_PARAMETERS="'http.version=HTTP/1.1'" git clone https://git.pyrossh.dev/only-bible-app.git
Discussions: https://groups.google.com/g/rust-embed-devs

The only bible app you will ever need. No ads. No in-app purchases. No distractions.



scripts/translateHeadings.js



import fs from "fs";
import { v2 } from "@google-cloud/translate";
const translate = new v2.Translate({
key: import.meta.env.CLOUD_TRANSLATE_API_KEY,
});
const headingsPath = new URL("./headings.json", import.meta.url);
const headings = JSON.parse(fs.readFileSync(headingsPath, "utf8"));
// const languages = ["bn", "gu", "hi", "ja", "kn", "ml", "ne", "or", "pa", "ta", "te"];
const languages = ["ja"];
const delay = (ms) => new Promise((r) => setTimeout(r, ms));
function save() {
fs.writeFileSync(headingsPath, JSON.stringify(headings, null, 2) + "\n");
}
let translated = 0;
let skipped = 0;
for (const lang of languages) {
console.log(`Translating to ${lang}...`);
for (const book of headings) {
for (const [, chapterHeadings] of Object.entries(book.chapters)) {
for (const h of chapterHeadings) {
if (!h.heading?.en) continue;
if (h.heading[lang]) {
skipped++;
continue;
}
try {
const [translation] = await translate.translate(h.heading.en, lang);
h.heading[lang] = translation;
} catch (err) {
console.error(` Error translating "${h.heading.en}" to ${lang}:`, err.message);
await delay(500);
try {
const [translation] = await translate.translate(h.heading.en, lang);
h.heading[lang] = translation;
} catch (err2) {
console.error(` Failed retry for "${h.heading.en}" to ${lang}:`, err2.message);
continue;
}
}
translated++;
save();
if (translated % 50 === 0) {
console.log(` ${lang}: ${translated} translated, ${skipped} skipped`);
}
await delay(100);
}
}
}
console.log(` ${lang} done. ${translated} translated, ${skipped} skipped`);
}
save();
console.log(`Done! ${translated} translated, ${skipped} skipped`);