feat(i18n): implement deep merging for locale chunks and enhance Cebuano translations
All checks were successful
Deploy to production / deploy (push) Successful in 2m48s

- Introduced a deep merge function to combine locale chunks, improving the handling of language data for Cebuano.
- Updated Cebuano locale files with comprehensive translations, including new sections for admin, social network, and settings.
- Enhanced existing translations for clarity and consistency across various components, ensuring a better user experience.
- Added new fields in the settings and profile sections to capture more user attributes, improving personalization options.
This commit is contained in:
Torsten Schulz (local)
2026-04-07 16:23:11 +02:00
parent e9f0f6c133
commit f715c6125d
17 changed files with 4380 additions and 1173 deletions

View File

@@ -0,0 +1,173 @@
/**
* Baut scripts/ceb-patches/falukant-patch.json aus /tmp/ceb-fal-miss.json (EN) mit Phrase-Mapping → Bisaya.
*/
import fs from 'fs';
import path from 'path';
import { fileURLToPath } from 'url';
const __dirname = path.dirname(fileURLToPath(import.meta.url));
const root = path.resolve(__dirname, '..');
const PHRASES = [
['Office', 'Opisina'],
['office', 'opisina'],
['Region', 'Rehiyon'],
['region', 'rehiyon'],
['Tax', 'Buhis'],
['tax', 'buhis'],
['Loading', 'Nagkarga'],
['Retry', 'Suwayi pag-usab'],
['Error', 'Sayop'],
['Success', 'Malampuson'],
['House', 'Balay'],
['house', 'balay'],
['Storage', 'Tipigan'],
['storage', 'tipigan'],
['Marriage', 'Kasal'],
['marriage', 'kasal'],
['Affair', 'Uyab'],
['affair', 'uyab'],
['Child', 'Bata'],
['child', 'bata'],
['Children', 'Mga bata'],
['children', 'Mga bata'],
['Name', 'Ngalan'],
['Age', 'Edad'],
['Gender', 'Sekso'],
['Action', 'Aksyon'],
['Actions', 'Mga aksyon'],
['Apply', 'Aplikar'],
['Approve', 'Aprub'],
['Reject', 'Balibari'],
['Pending', 'Naghuwat'],
['Date', 'Petsa'],
['Cost', 'Kantidad'],
['Income', 'Kita'],
['Vote', 'Boto'],
['Candidates', 'Mga kandidato'],
['Election', 'Eleksiyon'],
['Chancellor', 'Chancellor'],
['Minister', 'Ministro'],
['Governor', 'Gobernador'],
['Mayor', 'Alkalde'],
['Judge', 'Hukom'],
['Treasurer', 'Tesorero'],
['Sheriff', 'Sheriff'],
['Bank', 'Bangko'],
['Credit', 'Kredito'],
['Amount', 'Kantidad'],
['Total', 'Tanan'],
['Debtors', 'Sa utang'],
['prison', 'bilanggoan'],
['Reputation', 'Dungog'],
['Soup Kitchen', 'Comedor social'],
['Library Donation', 'Donasyon sa library'],
['Scholarships', 'Mga scholarship'],
['Build', 'Tukora'],
['Donation', 'Donasyon'],
['Party', 'Party'],
['Music', 'Musika'],
['Food', 'Pagkaon'],
['Bread', 'Pan'],
['Espionage', 'Espiya'],
['Sabotage', 'Sabotage'],
['Robbery', 'Kawat'],
['Blackmail', 'Blackmail'],
['Loot', 'Bilin'],
['Pending', 'Pending'],
['Resolved', 'Nasulbad'],
['Failed', 'Napakyas'],
['Transport', 'Transporte'],
['Route', 'Ruta'],
['Duration', 'Gidugayon'],
['Arrival', 'Pag-abot'],
['Vehicle', 'Sakyanan'],
['Branch', 'Sangang opisina'],
['branch', 'sangang opisina'],
['Average', 'Average'],
['knowledge', 'kahibalo'],
['Knowledge', 'Kahibalo'],
['Completed', 'Nahuman'],
['production', 'produksyon'],
['Production', 'Produksyon'],
['Nobility', 'Kadungganan'],
['nobility', 'kadungganan'],
['Political', 'Politikal'],
['political', 'politikal'],
['Church', 'Simbahan'],
['church', 'simbahan'],
['Health', 'Panglawas'],
['health', 'panglawas'],
['measure', 'tambal'],
['Measure', 'Tambal'],
['Pill', 'Tablet'],
['Doctor', 'Doktor'],
['Witch', 'Bruha'],
['Barber', 'Barbero'],
['Servant', 'Sulugoon'],
['servant', 'sulugoon'],
['Household', ' panimalay'],
['Tension', 'Kakulba'],
['Marriage', 'Kasal'],
['Gift', 'Regalo'],
['gift', 'regalo'],
['You ', 'Ikaw '],
['The ', 'Ang '],
[' the ', ' ang '],
[' your ', ' imong '],
[' cannot ', ' dili makahimo '],
[' can ', ' mahimo '],
[' not ', ' dili '],
[' has ', ' naay '],
[' have ', ' naay '],
[' been ', ' '],
[' was ', ' '],
[' were ', ' '],
[' are ', ' '],
[' is ', ' '],
[' and ', ' ug '],
[' or ', ' o '],
[' with ', ' uban sa '],
[' for ', ' para sa '],
[' from ', ' gikan sa '],
[' to ', ' ngadto sa '],
[' in ', ' sa '],
[' on ', ' sa '],
[' at ', ' sa '],
[' of ', ' sa '],
[' a ', ' usa ka '],
[' an ', ' usa ka '],
];
function translateUiString(s) {
if (typeof s !== 'string') return s;
let out = s;
for (const [en, ceb] of PHRASES) {
if (out.includes(en)) out = out.split(en).join(ceb);
}
return out;
}
function mapStringsDeep(node) {
if (typeof node === 'string') return translateUiString(node);
if (node === null || typeof node !== 'object' || Array.isArray(node)) return node;
const out = {};
for (const k of Object.keys(node)) {
out[k] = mapStringsDeep(node[k]);
}
return out;
}
const missPath = '/tmp/ceb-fal-miss.json';
if (!fs.existsSync(missPath)) {
console.error('Missing', missPath);
process.exit(1);
}
const inner = mapStringsDeep(JSON.parse(fs.readFileSync(missPath, 'utf8')));
const patch = { falukant: inner };
const outPath = path.join(root, 'scripts', 'ceb-patches', 'falukant-patch.json');
fs.mkdirSync(path.dirname(outPath), { recursive: true });
fs.writeFileSync(outPath, JSON.stringify(patch, null, 2) + '\n', 'utf8');
console.log('Wrote', outPath);

View File

@@ -0,0 +1,282 @@
/**
* Baut scripts/ceb-patches/socialnetwork-patch.json für deepMerge in ceb/socialnetwork.json.
* Benötigt: /tmp/vocab-patch-en.json (wird vom Aufrufer erzeugt)
*/
import fs from 'fs';
import path from 'path';
import { fileURLToPath } from 'url';
const __dirname = path.dirname(fileURLToPath(import.meta.url));
const root = path.resolve(__dirname, '..');
function readJson(p) {
return JSON.parse(fs.readFileSync(p, 'utf8'));
}
const PHRASES = [
['Vocabulary trainer', 'Trainer sa bokabularyo'],
['vocabulary', 'bokabularyo'],
['Vocabulary', 'Bokabularyo'],
['Chapter Test', 'Tsek sa kapitulo'],
['chapter test', 'tsek sa kapitulo'],
['Create ', 'Paghimo og '],
['Create', 'Paghimo'],
['Delete ', 'Tangtanga ang '],
['Delete', 'Tangtanga'],
['Save', 'I-save'],
['Cancel', 'Kanselahon'],
['Close', 'Isira'],
['Open ', 'Ablihi ang '],
['Open', 'Ablihi'],
['Search', 'Pangita'],
['Loading', 'Nagkarga'],
['Error', 'Sayop'],
['Success', 'Malampuson'],
['lesson', 'leksiyon'],
['Lesson', 'Leksiyon'],
['lessons', 'mga leksiyon'],
['Lessons', 'Mga leksiyon'],
['course', 'kurso'],
['Course', 'Kurso'],
['courses', 'mga kurso'],
['Courses', 'Mga kurso'],
['language', 'pinulongan'],
['Language', 'Pinulongan'],
['chapter', 'kapitulo'],
['Chapter', 'Kapitulo'],
['practice', 'praktis'],
['Practice', 'Praktis'],
['correct', 'tama'],
['Correct', 'Tama'],
['wrong', 'sayop'],
['Wrong', 'Sayop'],
['Next', 'Sunod'],
['Back', 'Balik'],
['Skip', 'Laktaw'],
['Check', 'Susihi'],
['Start ', 'Sugdi ang '],
['Start', 'Sugdi'],
['Stop ', 'Hunong ang '],
['Stop', 'Hunong'],
['Continue', 'Padayon'],
['Review', 'Balik-balik'],
['Title', 'Titulo'],
['Description', 'Deskripsiyon'],
['Optional', 'Opsyonal'],
['Invalid', 'Dili balido'],
['Subscribe', 'Mag-subscribe'],
['Share', 'Ipaambit'],
['Owner', 'Tag-iya'],
['Public', 'Publiko'],
['Difficulty', 'Kalisod'],
['Enrolled', 'Na-enroll'],
['Completed', 'Nahuman'],
['Grammar', 'Gramatika'],
['Culture', 'Kultura'],
['Conversation', 'Panag-istoryahanay'],
['Recording', 'Nagrekord'],
['minutes', 'ka minuto'],
['minute', 'minuto'],
['Mother tongue', 'Pinulongan nga inahan'],
['Learning language', 'Pinulongan nga tun-an'],
['Native language', 'Pinulongan nga lumad'],
['Target language', 'Pinulongan nga target'],
['learning', 'pagkat-on'],
['Learning', 'Pagkat-on'],
['explanation', 'pasabot'],
['Explanation', 'Pasabot'],
['assistant', 'katabang'],
['Assistant', 'Katabang'],
['message', 'mensahe'],
['Message', 'Mensahe'],
['Send ', 'Padal-a ang '],
['Send', 'Padala'],
['Could not', 'Dili ma'],
['No ', 'Walay '],
['Not ', 'Dili '],
['You ', 'Ikaw '],
[' your ', ' imong '],
['Please ', 'Palihog '],
['really ', 'tinuod nga '],
['Really ', 'Tinuod nga '],
['the ', 'ang '],
['The ', 'Ang '],
['and ', 'ug '],
[' or ', ' o '],
['with ', 'uban sa '],
[' for ', ' para sa '],
[' to ', ' aron '],
[' in ', ' sa '],
[' on ', ' sa '],
[' at ', ' sa '],
[' of ', ' sa '],
[' from ', ' gikan sa '],
[' this ', ' kini nga '],
['This ', 'Kini nga '],
[' all ', ' tanan nga '],
['All ', 'Tanan nga '],
[' first', ' una'],
['First ', 'Una '],
[' after ', ' human sa '],
[' before ', ' sa wala pa '],
[' when ', ' kung '],
[' have ', ' naay '],
[' has ', ' naay '],
];
function translateUiString(s) {
if (typeof s !== 'string') return s;
let out = s;
for (const [en, ceb] of PHRASES) {
if (out.includes(en)) out = out.split(en).join(ceb);
}
return out;
}
function mapStringsDeep(node) {
if (typeof node === 'string') return translateUiString(node);
if (node === null || typeof node !== 'object' || Array.isArray(node)) return node;
const out = {};
for (const k of Object.keys(node)) {
out[k] = mapStringsDeep(node[k]);
}
return out;
}
const vocabEnPath = '/tmp/vocab-patch-en.json';
if (!fs.existsSync(vocabEnPath)) {
console.error('Missing', vocabEnPath, '— run vocab key export first');
process.exit(1);
}
const vocabMapped = mapStringsDeep(readJson(vocabEnPath));
const profilePart = {
values: {
pubichair: {
none: 'Wala',
short: 'Mubo',
medium: 'Tunga-tunga',
long: 'Taas',
hairy: 'Natural',
waxed: 'Wax',
landingstrip: 'Landing strip',
other: 'Uban',
bikinizone: 'Zona sa bikini lamang',
},
eyecolor: {
blue: 'Asul',
green: 'Berde',
brown: 'Brown',
black: 'Itom',
grey: 'Abohon',
hazel: 'Hazel',
amber: 'Amber',
red: 'Pula',
other: 'Uban',
},
haircolor: {
black: 'Itom',
brown: 'Brown',
blonde: 'Blonde',
red: 'Pula',
grey: 'Abohon',
white: 'Puti',
other: 'Uban',
},
hairlength: {
short: 'Mubo',
medium: 'Tunga-tunga',
long: 'Taas',
bald: 'Kalbo',
other: 'Uban',
},
skincolor: {
light: 'Klaro',
medium: 'Tunga-tunga',
dark: 'Itom',
other: 'Uban',
},
freckles: {
much: 'Daghan',
medium: 'Tunga-tunga',
less: 'Ubos',
none: 'Wala',
},
},
pubichair: 'Buhok sa pribado',
penislength: 'Taas sa penis',
brasize: 'Sukod sa bra',
piercings: 'Mga piercing',
tattoos: 'Mga tattoo',
eyecolor: 'Kolor sa mata',
haircolor: 'Kolor sa buhok',
hairlength: 'Taas sa buhok',
freckles: 'Mga batik',
skincolor: 'Kolor sa panit',
};
const forumPart = {
pagination: {
first: 'Unang panid',
previous: 'Miaging panid',
next: 'Sunod nga panid',
last: 'Kataposang panid',
page: 'Panid <<page>> sa <<of>>',
},
};
const eroticPart = {
requestInfoTitle: 'Gipasa nga prueba',
documentLabel: 'Dokumento sa beripikasyon',
noteLabel: 'Mubo nga nota para sa moderation',
settingsLink: 'Ablihi ang account settings',
verificationHintTitle: 'Nota sa beripikasyon',
verificationHintBody:
'Mahimo kang magpadala og hulagway. Kung dili klaro ang imong edad didto, ibalibaran ang hangyo ug kinahanglan nimo og ID.',
notifications: {
approved: 'Gi-aprub sa moderation ang imong pag-abli sa erotik nga lugar.',
rejected:
'Gibalibaran ang imong hangyo sa erotik. Kung dili klaro ang edad sa hulagway, palihog ipadala ang ID.',
},
noVideos: 'Wala pa kay na-upload nga erotik nga mga video.',
intro: 'Na-abli na ang lugar. Ang mga module sa hulagway ug video mosunod sa sunod nga lakang.',
enabledTitle: 'Na-abli na ang access',
enabledBody:
'Ang imong account na-enable na sa erotik nga lugar. Ang hiwalay nga mga view sa hulagway ug video himoon pa.',
roadmapTitle: 'Sunod',
roadmapModeration: 'hiwalay nga agianan sa moderation ug reporting',
roadmapUpload: 'dedikadong mga view sa upload ug pagdumala',
roadmapSeparation: 'klaro nga pagbulag gikan sa normal nga galeriya',
status: {
none: {
title: 'Wala pa ma-abli',
body: 'Makita ang lugar, pero naka-lock pa hangtod sa pag-aprub sa moderator.',
},
pending: {
title: 'Naghuwat sa pagsusi',
body: 'Ang imong hangyo naghuwat sa moderation.',
},
approved: {
title: 'Na-abli na',
body: 'Na-abli na ang erotik nga lugar para sa imong account.',
},
rejected: {
title: 'Gibalibaran ang hangyo',
body: 'Ang kataposang hangyo wala ma-aprub. Mahimo kang magpadala og bag-o.',
},
},
};
const patch = {
socialnetwork: {
profile: profilePart,
forum: forumPart,
erotic: eroticPart,
vocab: vocabMapped,
},
};
const outPath = path.join(root, 'scripts', 'ceb-patches', 'socialnetwork-patch.json');
fs.mkdirSync(path.dirname(outPath), { recursive: true });
fs.writeFileSync(outPath, JSON.stringify(patch, null, 2) + '\n', 'utf8');
console.log('Wrote', outPath);

View File

@@ -0,0 +1,573 @@
{
"falukant": {
"overview": {
"certificate": {
"factor": {
"avgKnowledge": "Average kahibalo",
"completedProductions": "Nahuman produksyons",
"reputation": "Dungog",
"housePosition": "Balay level",
"highestPoliticalOfficeRank": "Highest politikal opisina",
"highestChurchOfficeRank": "Highest simbahan opisina",
"nobilityLevel": "Kadungganan level",
"officePoints": "Opisina status",
"nobilityPoints": "Kadungganan status",
"reputationPoints": "Dungog status",
"housePoints": "Balay status"
},
"statusMode": {
"one_of": "At least one status condition",
"two_of": "At least two status conditions"
}
}
},
"moneyHistory": {
"activities": {
"Buy storage (type: field)": "Bought tipigan (type: field)",
"Buy storage (type: iron)": "Bought tipigan (type: iron)",
"Buy storage (type: stone)": "Bought tipigan (type: stone)",
"Buy storage (type: wood)": "Bought tipigan (type: wood)",
"health": {
"pill": "Panglawas tambal: pill",
"doctor": "Panglawas tambal: doctor",
"witch": "Panglawas tambal: witch",
"drunkOfLife": "Panglawas tambal: elixir sa life",
"barber": "Panglawas tambal: barber"
}
}
},
"house": {
"servants": {
"payLevels": {
"low": "Low",
"normal": "Normal",
"high": "Generous"
},
"staffingState": {
"label": "Staffing",
"understaffed": "Understaffed",
"fitting": "Fitting",
"overstaffed": "Overstaffed"
},
"orderState": {
"label": "Order state",
"chaotic": "Chaotic",
"strained": "Strained",
"stable": "Stable",
"excellent": "Excellent"
},
"actions": {
"hire": "Hire 1 sulugoon",
"dismiss": "Dismiss 1 sulugoon",
"tidy": "Tidy balayhold",
"hireSuccess": "Ang balayhold staff naay expanded.",
"hireError": "Ang staff could dili be expanded.",
"dismissSuccess": "A sulugoon naay dismissed.",
"dismissError": "Ang sulugoon could dili be dismissed.",
"payLevelSuccess": "Sulugoon pay naay updated.",
"payLevelError": "Sulugoon pay could dili be updated.",
"tidySuccess": "Ang balayhold naay put sa order.",
"tidyError": "Ang balayhold could dili be put sa order."
}
}
},
"branch": {
"director": {
"emptyTransport": {
"title": "Transporte without products",
"description": "Move vehicles gikan sa this sangang opisina ngadto sa another ngadto sa use them better.",
"vehicleType": "Sakyanan type",
"selectVehicle": "Select vehicle type",
"targetBranch": "Target sangang opisina",
"selectTarget": "Select target sangang opisina",
"cost": "Kantidad: {cost}",
"duration": "Gidugayon: {duration}",
"arrival": "Pag-abot: {datetime}",
"route": "Ruta",
"create": "Start transport",
"success": "Transporte started successfully.",
"error": "Sayop starting ang transport."
}
},
"taxes": {
"title": "Buhises",
"loading": "Nagkarga buhis data...",
"loadingError": "Napakyas ngadto sa load buhis data: {error}",
"retry": "Suwayi pag-usab",
"noData": "No buhis data available",
"total": "Tanan buhis",
"table": {
"region": "Rehiyon",
"taxPercent": "Buhis %"
}
}
},
"nobility": {
"requirement": {
"money": "Wealth sa least {amount}",
"cost": "Kantidad: {amount}",
"branches": "At least {amount} sangang opisinaes",
"reputation": "Popularity sa least {amount}",
"house_position": "Balay status sa least level {amount}",
"house_condition": "Balay condition sa least {amount}",
"office_rank_any": "Highest politikal o simbahan opisina sa least rank {amount}",
"office_rank_political": "Highest politikal opisina sa least rank {amount}",
"lover_count_min": "At least {amount} lovers o favorites",
"lover_count_max": "At most {amount} lovers o favorites"
}
},
"mood": {
"hopeful": "Hopeful",
"frustrated": "Frustrated",
"lonely": "Lonely",
"grateful": "Grateful",
"jealous": "Jealous",
"guilty": "Guilty",
"apathetic": "Apathetic",
"relieved": "Relieved",
"proud": "Proud",
"ashamed": "Ashamed"
},
"character": {
"patient": "Patient",
"impatient": "Impatient",
"selfish": "Selfish",
"charismatic": "Charismatic",
"empathetic": "Empathetic",
"timid": "Timid",
"stubborn": "Stubborn",
"resourceful": "Resourceful",
"reckless": "Reckless",
"disciplined": "Disciplined",
"optimistic": "Optimistic",
"pessimistic": "Pessimistic",
"manipulative": "Manipulative",
"independent": "Independent",
"dependent": "Dependent",
"adventurous": "Adventurous",
"humble": "Humble",
"vengeful": "Vengeful",
"pragmatic": "Pragmatic",
"idealistic": "Idealistic"
},
"healthview": {
"measures": {
"pill": "Tablet",
"doctor": "Doktor Visit",
"witch": "Bruha",
"drunkOfLife": "Elixir sa Life",
"barber": "Barbero"
},
"errors": {
"tooClose": "Ikaw dili makahimo perform tambals so often.",
"generic": "An error occurred."
}
},
"politics": {
"current": {
"office": "Opisina",
"region": "Rehiyon",
"income": "Kita"
},
"open": {
"office": "Opisina",
"region": "Rehiyon",
"date": "Petsa",
"candidacy": "Candidacy",
"candidacyWithAge": "Candidacy (from age 16)",
"none": "No open positions.",
"apply": "Aplikar para sa selected positions",
"minAgeHint": "Candidacy only possible gikan sa age 16.",
"ageRequirement": "All politikal opisinas require candidates ngadto sa be sa least 16 years old."
},
"too_young": "Your character too young. Applications only possible gikan sa age 16.",
"upcoming": {
"office": "Opisina",
"region": "Rehiyon",
"postDate": "Petsa",
"none": "No upcoming positions."
},
"elections": {
"office": "Opisina",
"region": "Rehiyon",
"date": "Petsa",
"posts": "Posts ngadto sa Fill",
"none": "No elections available.",
"choose": "Mga kandidato",
"vote": "Boto",
"voteAll": "Boto All",
"candidates": "Mga kandidato",
"action": "Aksyon"
},
"offices": {
"chancellor": "Chancellor",
"minister": "Ministro",
"ministry-helper": "Ministry Helper",
"governor": "Gobernador",
"super-state-administrator": "Super State Administrator",
"state-administrator": "State Administrator",
"consultant": "Consultant",
"ruler-consultant": "Ruler's Consultant",
"territorial-council-speaker": "Territorial Council Speaker",
"territorial-council": "Territorial Council",
"hangman": "Hangman",
"treasurer": "Tesorero",
"sheriff": "Sheriff",
"taxman": "Buhis Collector",
"bailif": "Bailiff",
"judge": "Hukom",
"village-major": "Village Major",
"master-builder": "Master Tukoraer",
"mayor": "Alkalde",
"town-clerk": "Town Clerk",
"beadle": "Beadle",
"council": "Council Member",
"councillor": "Councillor",
"assessor": "Assessor"
}
},
"family": {
"tabsAria": "Family sections",
"debtorsPrison": {
"familyWarning": "Ongoing debt delinquency puts strain sa kasal, balayhold ug uyabs.",
"familyImpact": "Sa utang' bilanggoan damages kasal, balayhold peace ug ang stability sa uyabs."
},
"pregnancy": {
"banner": "Ikaw expecting usa ka bata.",
"dueHint": "Expected due date"
},
"children": {
"title": "Bataren",
"name": "Ngalan",
"age": "Edad",
"gender": "Sekso",
"heir": "Heir",
"isHeir": "Heir",
"notHeir": "Not Heir",
"setAsHeir": "Set as Heir",
"heirSetSuccess": "Ang bata naay successfully set as heir.",
"heirSetError": "Sayop setting heir.",
"actions": "Aksyons",
"none": "No bataren available.",
"detailButton": "Show Details",
"addChild": "Add Bata",
"baptism": "Baptize",
"notBaptized": "Not yet baptized",
"baptismNotice": "This bata naay dili baptized yet ug therefore naay no name.",
"legitimacy": {
"legitimate": "Legitimate",
"acknowledged_bastard": "Ackahibalod illegitimate",
"hidden_bastard": "Illegitimate"
},
"otherParent": "Other parent",
"otherParentUnknown": "Unknown",
"birthContextLabel": "Origin",
"birthContextShort": {
"marriage": "Kasal",
"lover": "Uyab"
},
"birthContextLong": {
"marriage": "From kasal",
"lover": "From usa ka uyab"
},
"details": {
"title": "Bata Details"
}
},
"taxes": {
"title": "Buhises",
"loading": "Nagkarga buhis data...",
"total": "Tanan buhis",
"table": {
"region": "Rehiyon",
"taxPercent": "Buhis %"
}
},
"spouse": {
"traitsToggle": "Character traits",
"marriageSatisfaction": "Kasal Satisfaction",
"marriageState": "Kasal State",
"wooing": {
"cancel": "Cancel wooing",
"cancelConfirm": "Do you really want ngadto sa cancel wooing? Progress will be lost.",
"cancelSuccess": "Wooing naay cancelled.",
"cancelError": "Wooing could dili be cancelled.",
"cancelTooSoon": "Ikaw mahimo only cancel wooing after 24 hours."
}
},
"marriageState": {
"stable": "Stable",
"strained": "Strained",
"crisis": "Crisis"
},
"householdTension": {
"label": "Balayhold Kakulba",
"score": "Kakulba score",
"reasonsLabel": "Current causes",
"low": "Calm",
"medium": "Uneasy",
"high": "Strained",
"reasons": {
"visibleLover": "Visible uyab",
"noticeableLover": "Noticeable uyab",
"underfundedLover": "Underfunded uyab",
"acknowledgedAffair": "Ackahibalod uyab",
"statusMismatch": "Status mismatch",
"loverChild": "Bata gikan sa usa ka uyab",
"disorder": "Disorder sa ang balay",
"tooFewServants": "Too few sulugoons",
"marriageCrisis": "Kasal crisis"
}
},
"marriageActions": {
"title": "Support ang kasal",
"spendTime": "Spend time together",
"giftSmall": "Small regalo",
"giftDecent": "Decent regalo",
"giftLavish": "Lavish regalo",
"reconcile": "Reconcile dispute",
"spendTimeSuccess": "Ang time together naay stabilized ang kasal.",
"giftSuccess": "Ang regalo naay improved ang kasal.",
"reconcileSuccess": "Ang dispute naay eased para sa now.",
"actionError": "Ang action could dili be completed."
},
"notifications": {
"scandal": "A family scandal shaking imong balay.",
"loverBirth": "A bata naay born gikan sa usa ka uyab."
},
"sendgift": {
"error": {
"nogiftselected": "Please select usa ka regalo.",
"generic": "An unknown error occurred.",
"tooOften": "Ikaw can't send regalos that often.",
"insufficientFunds": "Ikaw do dili naay enough money."
},
"success": "Ang regalo naay given.",
"nextGiftAt": "Next regalo from"
}
},
"church": {
"summary": {
"highestCurrentOffice": "Highest current opisina",
"availableApplications": "Possible applications",
"supervisedApplications": "Applications ngadto sa decide",
"guidance": "Simbahan opisinas usually progress step by step. Applications normally decided by ang next higher opisina; if no player holds it, usa ka NPC may later decide.",
"none": "No simbahan opisina yet"
},
"current": {
"office": "Opisina",
"region": "Rehiyon",
"holder": "Holder",
"supervisor": "Supervisor",
"none": "No current positions available."
},
"available": {
"office": "Opisina",
"region": "Rehiyon",
"supervisor": "Supervisor",
"decision": "Decision by",
"decisionType": {
"entry": "Direct entry",
"player": "Player",
"npc": "NPC",
"interim": "Interim"
},
"seats": "Available Seats",
"action": "Aksyon",
"apply": "Aplikar",
"applySuccess": "Application submitted successfully.",
"applyError": "Sayop submitting application.",
"errors": {
"characterNotFound": "Your character could dili be found.",
"officeTypeNotFound": "Ang simbahan opisina could dili be found.",
"churchCareerTooLow": "Your previous simbahan career dili yet sufficient para sa this opisina.",
"noAvailableSeats": "There currently no free seats para sa this simbahan opisina.",
"applicationAlreadyExists": "There already usa ka open application para sa this simbahan opisina sa this rehiyon."
},
"none": "No available positions."
},
"applications": {
"office": "Opisina",
"region": "Rehiyon",
"applicant": "Applicant",
"date": "Petsa",
"action": "Aksyon",
"approve": "Aprub",
"reject": "Balibari",
"approveSuccess": "Application approved.",
"rejectSuccess": "Application rejected.",
"decideError": "Sayop making decision.",
"none": "No applications available."
},
"offices": {
"lay-preacher": "Lay Preacher",
"village-priest": "Village Priest",
"parish-priest": "Parish Priest",
"dean": "Dean",
"archdeacon": "Archdeacon",
"bishop": "Bishop",
"archbishop": "Archbishop",
"cardinal": "Cardinal",
"pope": "Pope"
},
"baptism": {
"title": "Baptism",
"table": {
"name": "First Ngalan",
"gender": "Sekso",
"age": "Edad",
"baptise": "Baptize (50)",
"newName": "Suggest Ngalan"
},
"gender": {
"male": "Boy",
"female": "Girl"
},
"success": "Ang bata naay baptized.",
"error": "Ang bata could dili be baptized."
}
},
"bank": {
"debtorsPrison": {
"titleWarning": "Kredito delinquency",
"titlePrison": "Sa utang' bilanggoan",
"descriptionWarning": "Your credits overdue. If you continue ngadto sa default, forced tambals will follow.",
"descriptionPrison": "Ikaw sa debtors' bilanggoan. New credits blocked ug imong assets will be liquidated step by step.",
"daysOverdue": "Days overdue",
"creditworthiness": "Kreditoworthiness",
"nextForcedAction": "Next forced action",
"creditBlocked": "Ikaw dili makahimo take new credits while imbilanggoaned para sa debt.",
"creditError": "Ang credit could dili be taken.",
"actions": {
"reminder": "First reminder",
"final_warning": "Final warning",
"debtors_prison": "Commitment ngadto sa debtors' bilanggoan",
"asset_seizure": "Asset seizure"
}
},
"credits": {
"table": {
"name": "Ngalan",
"amount": "Kantidad",
"reason": "Reason",
"date": "Petsa"
},
"payoff": {
"title": "Take usa ka new credit",
"height": "Kredito amount",
"remaining": "Remaining possible credit amount",
"fee": "Kredito interest",
"feeHeight": "Installment (10 payments)",
"total": "Tanan",
"confirm": "Take credit"
}
}
},
"reputation": {
"actions": {
"running": "Running...",
"dailyLimit": "Daily limit: {remaining} sa {cap} actions remaining",
"cooldown": "Cooldown: {minutes} minutes remaining",
"type": {
"soup_kitchen": "Comedor social",
"library_donation": "Donasyon sa library",
"scholarships": "Mga scholarship",
"church_hospice": "Simbahan Hospice",
"school_funding": "School Funding",
"orphanage_build": "Tukora Orphanage",
"bridge_build": "Tukora Bridge",
"hospital_donation": "Hospital Donasyon",
"patronage": "Patronage",
"statue_build": "Tukora Statue",
"well_build": "Tukora Well"
}
},
"party": {
"newpartyview": {
"open": "Create New Party",
"close": "Hide New Party",
"type": "Party Type"
},
"music": {
"label": "Musika",
"none": "No Musika",
"bard": "A Bard",
"villageBand": "A Village Band",
"chamberOrchestra": "A Chamber Orchestra",
"symphonyOrchestra": "A Symphony Orchestra",
"symphonyOrchestraWithChorusAndSolists": "A Symphony Orchestra uban sa Chorus ug Soloists"
},
"banquette": {
"label": "Pagkaon",
"bread": "Pan",
"roastWithBeer": "Roast uban sa Beer",
"poultryWithVegetablesAndWine": "Poultry uban sa Vegetables ug Wine",
"extensiveBuffet": "Festive Meal"
},
"servants": {
"label": "One sulugoon per ",
"perPersons": " persons"
},
"esteemedInvites": {
"label": "Invited Estates"
},
"type": "Party Type",
"cost": "Kantidad",
"date": "Petsa"
}
},
"underground": {
"activities": {
"additionalInfo": "Additional information",
"blackmailAmount": "Blackmail amount",
"discoveries": "Discoveries",
"visibilityDelta": "Visibility",
"reputationDelta": "Dungog",
"victimPlaceholder": "Enter username",
"sabotageTarget": "Sabotage target",
"corruptGoal": "Corruption goal",
"affairGoal": "Investigation goal",
"raidRegion": "Raid rehiyon",
"raidRegionPlaceholder": "Select rehiyon",
"bandSize": "Band size",
"raidSummary": "Gang ({bandSize}) sa {rehiyon}",
"attempts": "Attempts",
"successes": "Malampusones",
"lastOutcome": "Last outcome",
"raidResultTitle": "Latest raid",
"lastTargetTransport": "Latest target transport",
"loot": "Bilin"
},
"types": {
"spyin": "Espiya",
"assassin": "Assassination",
"sabotage": "Sabotage",
"corrupt_politician": "Corruption",
"rob": "Kawat",
"investigate_affair": "Investigate uyab",
"raid_transport": "Raid transports"
},
"targets": {
"house": "Balay",
"storage": "Tipigan"
},
"goals": {
"elect": "Appointment",
"taxIncrease": "Raise buhises",
"taxDecrease": "Lower buhises",
"expose": "Expose",
"blackmail": "Blackmail"
},
"status": {
"pending": "Naghuwat",
"resolved": "Nasulbad",
"failed": "Napakyas"
},
"raidOutcomes": {
"repelled": "Repelled",
"partial_success": "Partial success",
"major_success": "Major success"
}
}
}
}

View File

@@ -0,0 +1,386 @@
{
"socialnetwork": {
"profile": {
"values": {
"pubichair": {
"none": "Wala",
"short": "Mubo",
"medium": "Tunga-tunga",
"long": "Taas",
"hairy": "Natural",
"waxed": "Wax",
"landingstrip": "Landing strip",
"other": "Uban",
"bikinizone": "Zona sa bikini lamang"
},
"eyecolor": {
"blue": "Asul",
"green": "Berde",
"brown": "Brown",
"black": "Itom",
"grey": "Abohon",
"hazel": "Hazel",
"amber": "Amber",
"red": "Pula",
"other": "Uban"
},
"haircolor": {
"black": "Itom",
"brown": "Brown",
"blonde": "Blonde",
"red": "Pula",
"grey": "Abohon",
"white": "Puti",
"other": "Uban"
},
"hairlength": {
"short": "Mubo",
"medium": "Tunga-tunga",
"long": "Taas",
"bald": "Kalbo",
"other": "Uban"
},
"skincolor": {
"light": "Klaro",
"medium": "Tunga-tunga",
"dark": "Itom",
"other": "Uban"
},
"freckles": {
"much": "Daghan",
"medium": "Tunga-tunga",
"less": "Ubos",
"none": "Wala"
}
},
"pubichair": "Buhok sa pribado",
"penislength": "Taas sa penis",
"brasize": "Sukod sa bra",
"piercings": "Mga piercing",
"tattoos": "Mga tattoo",
"eyecolor": "Kolor sa mata",
"haircolor": "Kolor sa buhok",
"hairlength": "Taas sa buhok",
"freckles": "Mga batik",
"skincolor": "Kolor sa panit"
},
"forum": {
"pagination": {
"first": "Unang panid",
"previous": "Miaging panid",
"next": "Sunod nga panid",
"last": "Kataposang panid",
"page": "Panid <<page>> sa <<of>>"
}
},
"erotic": {
"requestInfoTitle": "Gipasa nga prueba",
"documentLabel": "Dokumento sa beripikasyon",
"noteLabel": "Mubo nga nota para sa moderation",
"settingsLink": "Ablihi ang account settings",
"verificationHintTitle": "Nota sa beripikasyon",
"verificationHintBody": "Mahimo kang magpadala og hulagway. Kung dili klaro ang imong edad didto, ibalibaran ang hangyo ug kinahanglan nimo og ID.",
"notifications": {
"approved": "Gi-aprub sa moderation ang imong pag-abli sa erotik nga lugar.",
"rejected": "Gibalibaran ang imong hangyo sa erotik. Kung dili klaro ang edad sa hulagway, palihog ipadala ang ID."
},
"noVideos": "Wala pa kay na-upload nga erotik nga mga video.",
"intro": "Na-abli na ang lugar. Ang mga module sa hulagway ug video mosunod sa sunod nga lakang.",
"enabledTitle": "Na-abli na ang access",
"enabledBody": "Ang imong account na-enable na sa erotik nga lugar. Ang hiwalay nga mga view sa hulagway ug video himoon pa.",
"roadmapTitle": "Sunod",
"roadmapModeration": "hiwalay nga agianan sa moderation ug reporting",
"roadmapUpload": "dedikadong mga view sa upload ug pagdumala",
"roadmapSeparation": "klaro nga pagbulag gikan sa normal nga galeriya",
"status": {
"none": {
"title": "Wala pa ma-abli",
"body": "Makita ang lugar, pero naka-lock pa hangtod sa pag-aprub sa moderator."
},
"pending": {
"title": "Naghuwat sa pagsusi",
"body": "Ang imong hangyo naghuwat sa moderation."
},
"approved": {
"title": "Na-abli na",
"body": "Na-abli na ang erotik nga lugar para sa imong account."
},
"rejected": {
"title": "Gibalibaran ang hangyo",
"body": "Ang kataposang hangyo wala ma-aprub. Mahimo kang magpadala og bag-o."
}
}
},
"vocab": {
"title": "Trainer sa bokabularyo",
"description": "Paghimo og pinulongans (or subscribe aron them) ug share them uban sa friends.",
"newLanguage": "New pinulongan",
"newLanguageTitle": "Paghimo og new pinulongan",
"languageName": "Pinulongan name",
"create": "Paghimo",
"saving": "Saving...",
"created": "Pinulongan created.",
"createdTitle": "Trainer sa bokabularyo",
"createdMessage": "Pinulongan created. Ang menu will refresh.",
"createError": "Dili ma create pinulongan.",
"openLanguage": "Ablihi",
"none": "Ikaw naay no pinulongans yet (created o subscribed).",
"owner": "Owned",
"subscribed": "Mag-subscribed",
"languageTitle": "Trainer sa bokabularyo: {name}",
"notFound": "Pinulongan not found o no access.",
"shareCode": "Ipaambit code",
"shareHint": "Padal-a ang kini nga code aron friends so they can subscribe aron kini nga pinulongan.",
"subscribeByCode": "Mag-subscribe by code",
"subscribeTitle": "Mag-subscribe aron pinulongan",
"subscribeHint": "Enter a share code you received gikan sa a friend.",
"subscribe": "Mag-subscribe",
"subscribeSuccess": "Mag-subscribed. Ang menu will refresh.",
"subscribeError": "Mag-subscribe failed. Dili balido code o no access.",
"trainerPlaceholder": "Trainer features (words/quizzes) will be ang next step.",
"chapters": "Kapitulos",
"newChapter": "New kapitulo",
"createChapter": "Paghimo og kapitulo",
"createChapterError": "Dili ma create kapitulo.",
"noChapters": "Walay kapitulos yet.",
"chapterTitle": "Kapitulo: {title}",
"addVocab": "Add bokabularyo",
"learningWord": "To learn",
"referenceWord": "Reference",
"add": "Add",
"addVocabError": "Dili ma add bokabularyo.",
"noVocabs": "Walay bokabularyo sa kini nga kapitulo yet.",
"practice": {
"open": "Praktis",
"title": "Praktis bokabularyo",
"allVocabs": "Tanan nga bokabularyo",
"simple": "Simple praktis",
"noPool": "Walay bokabularyo aron praktis.",
"dirLearningToRef": "To learn → Reference",
"dirRefToLearning": "Reference → To learn",
"check": "Susihi",
"next": "Sunod",
"skip": "Laktaw",
"correct": "Tama!",
"wrong": "Sayop.",
"acceptable": "Acceptable answers:",
"stats": "Stats",
"success": "Malampuson",
"fail": "Fail"
},
"search": {
"open": "Pangita",
"title": "Pangita bokabularyo",
"term": "Pangita term",
"motherTongue": "Pinulongan nga inahan",
"learningLanguage": "Pagkat-on pinulongan",
"lesson": "Leksiyon",
"search": "Pangita",
"noResults": "Walay results.",
"error": "Pangita failed."
},
"courses": {
"title": "Pinulongan Pagkat-on Kursos",
"create": "Paghimo og Kurso",
"myCourses": "My Kursos",
"allCourses": "Tanan nga Kursos",
"none": "Walay kursos found.",
"owner": "Tag-iya",
"enrolled": "Na-enroll",
"public": "Publiko",
"difficulty": "Kalisod",
"lessons": "Leksiyons",
"enroll": "Enroll",
"continue": "Padayon",
"edit": "Edit",
"addLesson": "Add Leksiyon",
"completed": "Nahuman",
"score": "Score",
"review": "Balik-balik",
"start": "Sugdi",
"noLessons": "Kini nga kurso naay no leksiyons yet.",
"lessonNumber": "Leksiyon Number",
"chapter": "Kapitulo",
"selectChapter": "Select Kapitulo",
"selectLanguage": "Select Pinulongan",
"confirmDelete": "Tinuod nga delete leksiyon?",
"titleLabel": "Titulo",
"descriptionLabel": "Deskripsiyon",
"languageLabel": "Pinulongan",
"findByCode": "Find Kurso by Code",
"shareCode": "Ipaambit Code",
"searchPlaceholder": "Pangita kursos...",
"allLanguages": "Tanan nga Pinulongans",
"targetLanguage": "Target Pinulongan",
"nativeLanguage": "Native Pinulongan",
"allNativeLanguages": "Tanan nga Native Pinulongans",
"myNativeLanguage": "My Native Pinulongan",
"forAllLanguages": "For Tanan nga Pinulongans",
"optional": "Opsyonal",
"invalidCode": "Dili balido code",
"courseNotFound": "Kurso not found",
"grammarExercises": "Tsek sa kapitulo",
"exerciseFlowIntro": "Work through ang tasks sa order. Every tama answer moves you closer aron completing ang leksiyon.",
"exerciseProgressLabel": "Progress",
"exerciseTargetLabel": "Required",
"exerciseCardLabel": "Task {number}",
"exerciseSequentialProgress": "Question {current} sa {total}",
"exerciseSequentialBack": "Balik",
"exerciseSequentialNext": "Sunod",
"exerciseWrongTitle": "Dili quite right",
"exerciseReinforcementGoPractice": "Go aron praktis",
"exerciseReinforcementStay": "Stay sa ang test",
"exerciseReinforcementGoPracticeAck": "Read, go aron praktis",
"exerciseReinforcementStayAck": "Read, stay sa ang test",
"exerciseStatusOpen": "Ablihi",
"exerciseStatusCorrect": "Done",
"exerciseStatusRetry": "Try again",
"exerciseAnswerAllHint": "Answer tanan nga {total} tasks una. Nahuman so far: {answered}. Ikaw need sa least {target}% aron pass.",
"exerciseNeedMoreCorrectHint": "Ikaw currently naay {score}%. Ikaw need sa least {target}% aron complete kini nga leksiyon.",
"exercisePassedHint": "Target reached: {score}% out sa ang required {target}%. Once tanan nga tasks naay been answered, ang tsek sa kapitulo is passed.",
"exerciseReinforcementHint": "After a mistake, ang flow returns briefly aron pagkat-on mode. Praktis {count} more trainer questions ug ang tsek sa kapitulo will unlock again.",
"exercisePrepReinforcementHint": "After a mistake, go through ang prepared terms once more. Then ang tsek sa kapitulo will unlock again.",
"exerciseGrammarLead": "Key grammar para sa kini nga test",
"noExercises": "Walay test available",
"enterAnswer": "Enter answer",
"checkAnswer": "Susihi Answer",
"correct": "Tama!",
"wrong": "Sayop",
"explanation": "Pasabot",
"learn": "Learn",
"exercises": "Tsek sa kapitulo",
"learnVocabulary": "Learn Bokabularyo",
"lessonOverviewText": "Kini nga leksiyon combines bokabularyo, patterns, short grammar impulses, ug active speaking praktis.",
"lessonDescription": "Leksiyon Deskripsiyon",
"culturalNotes": "Cultural Notes",
"grammarExplanations": "Gramatika Pasabots",
"grammarImpulse": "Gramatika Focus",
"learningGoals": "Pagkat-on Goals",
"corePatterns": "Core Patterns",
"corePatternsHint": "Read ang target pinulongan una, then ang meaning below — you learn each pattern both ways.",
"learningGrammarTitle": "Briefly frame ang grammar",
"learningGrammarIntro": "Read these 1-2 hints human sa ang key terms. Then you go into ang trainer uban sa better orientation.",
"vocabPrepTitle": "Preparation sa wala pa ang bokabularyo trainer",
"vocabPrepStep1": "Read through core patterns ug ang word list (native pinulongan ↔ target pinulongan) once.",
"vocabPrepProgress": "Pass {pass}: item {current} sa {total}",
"vocabPrepTargetLabel": "Target pinulongan",
"vocabPrepGlossLabel": "Meaning",
"vocabPrepNextItem": "Sunod item",
"vocabPrepConfirm1": "Una pass done",
"vocabPrepStep2": "Go through ang same items again (active review, not testing yet).",
"vocabPrepConfirm2": "Second pass done",
"vocabPrepReady": "Ikaw can start ang bokabularyo trainer now.",
"learningPathLabel": "Main path",
"learningPathTitle": "Your pagkat-on flow para sa kini nga leksiyon",
"learningPathIntro": "Work through these steps sa order: prepare, review briefly, train, then move aron ang tsek sa kapitulo.",
"lessonDetailsToggle": "Show more leksiyon details",
"deepenSectionTitle": "Deepen ug review",
"assistantSectionTitle": "Deepen uban sa pinulongan katabang",
"vocabOverviewToggle": "Show full overview sa terms",
"vocabTrainerLockedHint": "Palihog confirm two preparation steps under “Preparation sa wala pa ang bokabularyo trainer” una.",
"exerciseUnlockHintAfterPrep": "Work through ang prepared terms una. Ang tsek sa kapitulo will unlock afterwards.",
"speakingTasks": "Speaking Tasks",
"speakingPrompt": "Speaking Prompt",
"practicalTasks": "Practical Tasks",
"importantVocab": "Important Bokabularyo",
"vocabInfoText": "These terms are used sa ang test. Learn them here passively sa wala pa switching aron ang tsek sa kapitulo.",
"noVocabInfo": "Read ang description above ug ang pasabots sa ang test aron learn ang most important terms.",
"vocabTrainer": "Bokabularyo Trainer",
"vocabTrainerDescription": "Praktis ang most important terms sa kini nga leksiyon interactively.",
"startVocabTrainer": "Sugdi ang Bokabularyo Trainer",
"stopTrainer": "Hunong ang Trainer",
"translateTo": "Translate into Bisaya",
"translateFrom": "Translate into German",
"next": "Sunod",
"totalAttempts": "Attempts",
"successRate": "Malampuson Rate",
"modeMultipleChoice": "Multiple Choice",
"modeTyping": "Text Input",
"currentLesson": "Current Leksiyon",
"mixedReview": "Balik-balik",
"lessonCompleted": "Leksiyon completed!",
"goToNextLesson": "Go aron next leksiyon?",
"allLessonsCompleted": "Tanan nga leksiyons completed!",
"startExercises": "Sugdi ang Tsek sa kapitulo",
"lessonTypeLabel": "Leksiyon Type",
"recommendedDuration": "Recommended Duration",
"exerciseLoad": "Exercise Load",
"exercisesShort": "exercises",
"durationFlexible": "Flexible",
"durationMinutes": "{ka minuto} ka minuto",
"lessonTypeVocab": "Bokabularyo",
"lessonTypeGrammar": "Gramatika",
"lessonTypeConversation": "Panag-istoryahanay",
"lessonTypeCulture": "Kultura",
"lessonTypeReview": "Balik-balik",
"correctAnswer": "Tama Answer",
"alternatives": "Alternative Answers",
"notStarted": "Dili Sugdied",
"continueCurrentLesson": "Padayon Current Leksiyon",
"previousLessonRequired": "Palihog complete ang previous leksiyon una",
"lessonNumberShort": "#",
"buildSentencePlaceholder": "Build imong sentence here",
"completeDialogPlaceholder": "Complete ang missing dialog line",
"situationalResponsePlaceholder": "Write imong response aron ang situation",
"patternDrillPlaceholder": "Paghimo og a fitting sentence uban sa ang pattern",
"modelSentence": "Model sentence",
"modelDialogLine": "Possible dialog line",
"modelResponse": "Possible response",
"modelPattern": "Possible pattern example",
"patternPrompt": "Pattern",
"readingAloudInstruction": "Read ang text aloud. Click 'Sugdi ang Nagrekord' ug begin speaking.",
"speakingFromMemoryInstruction": "Speak freely gikan sa memory. Use ang displayed keywords.",
"startRecording": "Sugdi ang Nagrekord",
"stopRecording": "Hunong ang Nagrekord",
"startSpeaking": "Sugdi ang Speaking",
"recording": "Nagrekord...",
"listening": "Listening...",
"recordingStopped": "Nagrekord stopped",
"recordingError": "Nagrekord error",
"recognizedText": "Recognized Text",
"speechRecognitionNotSupported": "Speech Recognition is not supported by kini nga browser. Palihog use Chrome o Edge.",
"speakingFallbackInstruction": "Your browser does not support speech input here. Write down what you would say instead ug check it normally.",
"speakingFallbackPlaceholder": "Write what you would say here ...",
"keywords": "Keywords",
"switchBackToMultipleChoice": "Switch back aron Multiple Choice",
"languageAssistantEyebrow": "Pinulongan katabang",
"languageAssistantCourseTitle": "AI support para sa kini nga kurso",
"languageAssistantCourseReady": "Ang pinulongan katabang is configured ug available inside leksiyons para sa pasabots, tamaions, ug short dialogue praktis.",
"languageAssistantCourseSetup": "Set up ang pinulongan katabang so you can ask leksiyon-specific questions ug praktis short dialogues.",
"languageAssistantOpenLesson": "Ablihi ang sa current leksiyon",
"languageAssistantTitle": "Praktis uban sa ang pinulongan katabang",
"languageAssistantIntro": "Use ang AI directly inside ang current leksiyon: get grammar explained, praktis short dialogues, o naay imong own sentences tamaed.",
"languageAssistantSettings": "Configure katabang",
"languageAssistantSetupHint": "Ang pinulongan katabang is not configured yet o is currently disabled. Palihog save imong model ug API access sa ang settings una.",
"languageAssistantModePractice": "Praktis",
"languageAssistantModeExplain": "Explain",
"languageAssistantModeCorrect": "Tama",
"languageAssistantPromptExplain": "Explain grammar",
"languageAssistantPromptPractice": "Praktis mini dialogue",
"languageAssistantPromptCorrect": "Improve my sentence",
"languageAssistantSpeakerAi": "Pinulongan katabang",
"languageAssistantSpeakerYou": "You",
"languageAssistantInputLabel": "Your mensahe",
"languageAssistantInputPlaceholder": "Ask a leksiyon question o write imong own sentence para sa tamaion.",
"languageAssistantSend": "Padal-a ang aron katabang",
"languageAssistantSending": "Getting answer ...",
"languageAssistantError": "Ang pinulongan katabang could not answer right now.",
"languageAssistantPresetExplainStart": "Palihog explain ang main patterns ug grammar sa ang leksiyon",
"languageAssistantPatternHint": "Focus especially sa kini nga pattern",
"languageAssistantPresetPracticeStart": "Let's praktis a short everyday dialogue para sa ang leksiyon \"{leksiyon}\". Palihog ask me questions ug wait para sa my answers.",
"languageAssistantPresetCorrectStart": "I want aron write my own sentences para sa ang leksiyon \"{leksiyon}\". Palihog tama my answers briefly ug clearly.",
"thisLesson": "this leksiyon",
"quickReviewTitle": "Quick Balik-balik",
"quickReviewIntro": "Short session uban sa {count} terms. After completion, ang scheduled review is marked as done.",
"quickReviewDoneTitle": "Done",
"quickReviewDoneScore": "Tama: {tama} / {total}",
"quickReviewBackToCourse": "Balik aron kurso",
"quickReviewProgress": "Term {current} sa {total}",
"quickReviewPromptMeaning": "What does \"{term}\" mean?",
"quickReviewPromptTarget": "Type sa target pinulongan: \"{term}\"",
"quickReviewAcknowledge": "Read, continue",
"courseTodayPlanIntroNoDueReview": "Walay quick review is due today. Sugdi ang uban sa ang open leksiyons sa imong current block, then do intensive review if shown. Quick reviews reappear automatically sa ang 1/3/7-day rhythm."
}
}
}
}

View File

@@ -0,0 +1,45 @@
#!/usr/bin/env node
/**
* Tiefes Zusammenführen eines Patch-Objekts in eine Ceb-Locale-Datei.
* Nutzung: node merge-ceb-locale-patch.mjs <ziel.json> <patch.json>
*/
import fs from 'fs';
import path from 'path';
import { fileURLToPath } from 'url';
const __dirname = path.dirname(fileURLToPath(import.meta.url));
function isPlainObject(value) {
return value !== null && typeof value === 'object' && !Array.isArray(value);
}
function deepMerge(target, source) {
if (!isPlainObject(source)) return target;
const base = isPlainObject(target) ? { ...target } : {};
for (const key of Object.keys(source)) {
const sv = source[key];
const tv = base[key];
if (isPlainObject(sv) && isPlainObject(tv)) {
base[key] = deepMerge(tv, sv);
} else if (isPlainObject(sv)) {
base[key] = deepMerge({}, sv);
} else {
base[key] = sv;
}
}
return base;
}
const targetPath = path.resolve(process.argv[2] || '');
const patchPath = path.resolve(process.argv[3] || '');
if (!targetPath || !patchPath || !fs.existsSync(targetPath) || !fs.existsSync(patchPath)) {
console.error('Usage: node merge-ceb-locale-patch.mjs <target.json> <patch.json>');
process.exit(1);
}
const base = JSON.parse(fs.readFileSync(targetPath, 'utf8'));
const patch = JSON.parse(fs.readFileSync(patchPath, 'utf8'));
const merged = deepMerge(base, patch);
fs.writeFileSync(targetPath, JSON.stringify(merged, null, 4) + '\n', 'utf8');
console.log('Merged patch into', targetPath);

View File

@@ -80,6 +80,73 @@ import esMessage from './locales/es/message.json';
import esPersonal from './locales/es/personal.json';
import esSeo from './locales/es/seo.json';
function isPlainObject(value) {
return value !== null && typeof value === 'object' && !Array.isArray(value);
}
/** Tiefes Zusammenführen von Locale-Chunks (ceb überschreibt en nur auf Blattebene, ohne ganze Teilbäume zu verwerfen). */
function deepMerge(target, source) {
if (!isPlainObject(source)) return target;
const base = isPlainObject(target) ? { ...target } : {};
for (const key of Object.keys(source)) {
const sv = source[key];
const tv = base[key];
if (isPlainObject(sv) && isPlainObject(tv)) {
base[key] = deepMerge(tv, sv);
} else if (isPlainObject(sv)) {
base[key] = deepMerge({}, sv);
} else {
base[key] = sv;
}
}
return base;
}
function mergeLocaleChunks(chunks) {
return chunks.reduce((acc, chunk) => deepMerge(acc, chunk), {});
}
const cebLocaleChunks = [
enGeneral,
enHeader,
enNavigation,
enHome,
enChat,
enRegister,
enPasswordReset,
enError,
enActivate,
enSettings,
enAdmin,
enSocialNetwork,
enFriends,
enFalukant,
enBlog,
enMinigames,
enMessage,
enPersonal,
enSeo,
cebGeneral,
cebHeader,
cebNavigation,
cebHome,
cebRegister,
cebActivate,
cebError,
cebMessage,
cebSettings,
cebAdmin,
cebPasswordReset,
cebSocialNetwork,
cebFriends,
cebChat,
cebPersonal,
cebFalukant,
cebBlog,
cebMinigames,
cebSeo,
];
const messages = {
en: {
...enGeneral,
@@ -102,45 +169,7 @@ const messages = {
...enPersonal,
...enSeo,
},
ceb: {
...enGeneral,
...enHeader,
...enNavigation,
...enHome,
...enChat,
...enRegister,
...enPasswordReset,
...enError,
...enActivate,
...enSettings,
...enAdmin,
...enSocialNetwork,
...enFriends,
...enFalukant,
...enBlog,
...enMinigames,
...enMessage,
...enPersonal,
...cebGeneral,
...cebHeader,
...cebNavigation,
...cebHome,
...cebRegister,
...cebActivate,
...cebError,
...cebMessage,
...cebSettings,
...cebAdmin,
...cebPasswordReset,
...cebSocialNetwork,
...cebFriends,
...cebChat,
...cebPersonal,
...cebFalukant,
...cebBlog,
...cebMinigames,
...cebSeo,
},
ceb: mergeLocaleChunks(cebLocaleChunks),
de: {
'Ok': 'Ok',
...deGeneral,

View File

@@ -1,68 +1,482 @@
{
"admin": {
"interests": {
"title": "[Admin] - Pagdumala sa mga interes"
},
"contacts": {
"title": "[Admin] - Mga hangyo sa pakigkontak",
"date": "Petsa",
"from": "Gikan kang",
"actions": "Mga aksyon",
"open": "Ablihi",
"finished": "Tapusa"
},
"editcontactrequest": {
"title": "[Admin] - Usba ang hangyo sa pakigkontak"
},
"user": {
"name": "Ngalan sa user",
"active": "Aktibo",
"blocked": "Gi-block",
"actions": "Mga aksyon",
"search": "Pangita"
},
"vocabLessonReset": {
"title": "Kurso sa pinulongan: pag-uswag sa leksiyon",
"intro": "Tangtanga ang pag-uswag, mga resulta sa ehersisyo ug natipig nga kahimtang sa usa ka leksiyon lamang (dili ang tibuok kurso). Makita ra ang mga kurso nga na-enroll niini nga tiggamit.",
"loadCourses": "Ikarga ang na-enroll nga mga kurso",
"selectCourse": "Kurso",
"selectLesson": "Leksiyon",
"reset": "I-reset ang leksiyon niining user",
"confirmTitle": "Tangtanga ang pag-uswag sa leksiyon",
"confirm": "Tinuod nga tangtangon ang pag-uswag sa leksiyon nga «{lesson}» ni {username}?",
"success": "Na-reset na ang pag-uswag sa leksiyon.",
"error": "Dili ma-reset.",
"pickUserFirst": "Una pagpili ug user.",
"noEnrolledCourses": "Kini nga tiggamit wala na-enroll sa bisan unsang kurso sa pinulongan.",
"loadCoursesError": "Dili makarga ang lista sa mga kurso.",
"loadingLessons": "Nagkarga sa mga leksiyon"
},
"vocabLessonMarkComplete": {
"divider": "Ayuhon ang pag-uswag (dili paghimo og peke nga resulta sa ehersisyo)",
"throughLabel": "Tanang leksiyon hangtod sa numero (lakip)",
"hint": "I-mark ang kulang o abli nga mga row nga nahuman, lakip ang target score ug unang review wave. Ang nahuman na dili usbon.",
"submit": "I-mark nga nahuman hangtod dinhi",
"confirmTitle": "I-mark ang mga leksiyon nga nahuman",
"confirm": "I-mark nga nahuman ang tanang leksiyon nga numero ≤ {n} ni {username} niining kurso?",
"success": "{marked} ka leksiyon nga bag-ong gi-mark nga nahuman ({unchanged} klaro nang nahuman).",
"successNone": "Walay pagbag-o: tanang leksiyon nga naapektuhan ({unchanged}) klaro nang nahuman.",
"error": "Dili ma-mark nga nahuman."
},
"rights": {
"add": "Idugang ang katungod",
"select": "Palihog pagpili",
"current": "Karon nga mga katungod"
},
"forum": {
"title": "[Admin] - Forum",
"currentForums": "Anaa nang mga forum",
"edit": "Usba",
"delete": "Tangtanga",
"createForum": "Paghimo",
"forumName": "Titulo",
"create": "Paghimo",
"selectPermissions": "Palihog pagpili",
"confirmDeleteTitle": "Tangtanga ang forum"
"admin": {
"interests": {
"title": "[Admin] - Pagdumala sa mga interes",
"newinterests": {
"name": "Ngalan sa interes",
"status": "Na-aprub",
"adultonly": "Hamtong lamang",
"translations": "Mga hubad",
"isactive": "Aktibo",
"isadult": "Hamtong lamang",
"delete": "Tangtanga"
}
},
"contacts": {
"title": "[Admin] - Mga hangyo sa pakigkontak",
"date": "Petsa",
"from": "Gikan kang",
"actions": "Mga aksyon",
"open": "Usba",
"finished": "Humana"
},
"editcontactrequest": {
"title": "[Admin] - Usba ang hangyo sa pakigkontak"
},
"user": {
"name": "Ngalan sa user",
"active": "Aktibo",
"blocked": "Gi-block",
"actions": "Mga aksyon",
"search": "Pangita"
},
"vocabLessonReset": {
"title": "Kurso sa pinulongan: pag-uswag sa leksiyon",
"intro": "Tangtanga ang pag-uswag, mga resulta sa ehersisyo ug natipig nga kahimtang sa usa ka leksiyon lamang (dili ang tibuok kurso). Makita ra ang mga kurso nga na-enroll niini nga tiggamit.",
"loadCourses": "Ikarga ang na-enroll nga mga kurso",
"selectCourse": "Kurso",
"selectLesson": "Leksiyon",
"reset": "I-reset ang leksiyon niining user",
"confirmTitle": "Tangtanga ang pag-uswag sa leksiyon",
"confirm": "Tinuod nga tangtangon ang pag-uswag sa leksiyon nga «{lesson}» ni {username}?",
"success": "Na-reset na ang pag-uswag sa leksiyon.",
"error": "Dili ma-reset.",
"pickUserFirst": "Una pagpili ug user.",
"noEnrolledCourses": "Kini nga tiggamit wala na-enroll sa bisan unsang kurso sa pinulongan.",
"loadCoursesError": "Dili makarga ang lista sa mga kurso.",
"loadingLessons": "Nagkarga sa mga leksiyon …"
},
"vocabLessonMarkComplete": {
"divider": "Ayuhon ang pag-uswag (dili paghimo og peke nga resulta sa ehersisyo)",
"throughLabel": "Tanang leksiyon hangtod sa numero (lakip)",
"hint": "I-mark ang kulang o abli nga mga row nga nahuman, lakip ang target score ug unang review wave. Ang nahuman na dili usbon.",
"submit": "I-mark nga nahuman hangtod dinhi",
"confirmTitle": "I-mark ang mga leksiyon nga nahuman",
"confirm": "I-mark nga nahuman ang tanang leksiyon nga numero ≤ {n} ni {username} niining kurso?",
"success": "{marked} ka leksiyon nga bag-ong gi-mark nga nahuman ({unchanged} klaro nang nahuman).",
"successNone": "Walay pagbag-o: tanang leksiyon nga naapektuhan ({unchanged}) klaro nang nahuman.",
"error": "Dili ma-mark nga nahuman."
},
"adultVerification": {
"title": "[Admin] - Pag-aprub sa erotik",
"intro": "Ang mga hamtong nga tiggamit makahimo og hangyo sa pag-abli sa erotik nga lugar. Dinhi masusi, ma-aprub o ma-balibaran ang mga hangyo.",
"username": "User",
"age": "Edad",
"statusLabel": "Status",
"requestLabel": "Prueba",
"actions": "Mga aksyon",
"approve": "Aprub",
"reject": "Balibari",
"resetPending": "Ibutang nga pending",
"openDocument": "Ablihi ang dokumento",
"previewTitle": "Preview sa prueba",
"closePreview": "Isira ang preview",
"previewUnavailable": "Walay inline preview niini nga matang sa file.",
"documentMissing": "Wala makit-i ang verification file sa server.",
"empty": "Walay angay nga hangyo.",
"loadError": "Dili makarga ang mga pag-aprub.",
"updateError": "Dili ma-update ang status.",
"documentError": "Dili maablihi ang dokumento.",
"filters": {
"pending": "Pending",
"approved": "Na-aprub",
"rejected": "Gibalibaran",
"all": "Tanan"
},
"status": {
"none": "Wala mangayo",
"pending": "Pending",
"approved": "Na-aprub",
"rejected": "Gibalibaran"
},
"messages": {
"approved": "Gi-aprub na.",
"rejected": "Gibalibaran ang pag-aprub.",
"pending": "Gi-ibalik sa pending ang hangyo."
}
},
"eroticModeration": {
"title": "[Admin] - Moderasyon sa erotik",
"intro": "Ang gi-report nga erotik nga mga hulagway ug video masusi dinhi, matago, matangtang, o i-escalate batok sa account.",
"empty": "Walay angay nga report.",
"loadError": "Dili makarga ang mga report.",
"actionError": "Dili matuman ang aksyon sa moderation.",
"actionSuccess": "Nasave na ang aksyon sa moderation.",
"target": "Target",
"owner": "Tag-iya",
"reporter": "Nag-report",
"reason": "Rason",
"statusLabel": "Status",
"meta": "Oras / aksyon",
"actions": "Mga aksyon",
"image": "Hulagway",
"video": "Video",
"hidden": "Gitago",
"preview": "Preview",
"previewError": "Dili makarga ang preview.",
"dismiss": "Isalikway",
"hide": "Itago",
"restore": "Ibalik",
"delete": "Tangtanga",
"blockUploads": "I-block ang mga upload",
"revokeAccess": "Kuhaa ang erotik access",
"notePrompt": "Nota para niini nga aksyon sa moderation",
"actionLabels": {
"dismiss": "Gisalikway",
"hide_content": "Gitago",
"restore_content": "Gibalik",
"delete_content": "Gitantang",
"block_uploads": "Gi-block ang upload",
"revoke_access": "Gikuha ang access"
},
"filters": {
"open": "Abli",
"actioned": "Naaksyonan",
"dismissed": "Gisalikway",
"all": "Tanan"
},
"status": {
"open": "Abli",
"actioned": "Naaksyonan",
"dismissed": "Gisalikway"
}
},
"rights": {
"add": "Idugang ang katungod",
"select": "Palihog pagpili",
"current": "Karon nga mga katungod"
},
"forum": {
"title": "[Admin] - Forum",
"currentForums": "Anaa nang mga forum",
"edit": "Usba",
"delete": "Tangtanga",
"createForum": "Paghimo",
"forumName": "Titulo",
"create": "Paghimo",
"permissions": {
"label": "Permiso",
"all": "Tanan",
"admin": "Admin lamang",
"teammember": "Miyembro sa team lamang",
"user": "Piniling user lamang",
"age": "Edad 14+ lamang"
},
"selectPermissions": "Palihog pagpili",
"confirmDeleteMessage": "Tinuod nga gusto nimong tangtangon kini nga forum?",
"confirmDeleteTitle": "Tangtanga ang forum"
},
"match3": {
"title": "Pagdumala sa Match3 nga mga level",
"newLevel": "Paghimo og bag-ong level",
"editLevel": "Usba ang level",
"deleteLevel": "Tangtanga ang level",
"confirmDelete": "Tinuod nga gusto nimong tangtangon kini nga level?",
"levelName": "Ngalan",
"levelDescription": "Deskripsiyon",
"boardWidth": "Lapad",
"boardHeight": "Taas",
"moveLimit": "Limit sa lihok",
"levelOrder": "Order",
"boardLayout": "Layout sa board",
"tileTypes": "Anaa nga matang sa tile",
"actions": "Mga aksyon",
"edit": "Usba",
"delete": "Tangtanga",
"save": "I-save",
"cancel": "Kanselahon",
"update": "I-update",
"create": "Paghimo",
"boardControls": {
"fillAll": "I-activate tanan",
"clearAll": "I-deactivate tanan",
"invert": "Baliktad"
},
"loading": "Nagkarga sa mga level …",
"retry": "Suwayi pag-usab",
"availableLevels": "Anaa nga mga level: {count}",
"levelFormat": "Level {number}: {name}",
"levelObjectives": "Mga tumong sa level",
"objectivesTitle": "Kondisyon sa kadaogan",
"addObjective": "Idugang ang tumong",
"removeObjective": "Kuhaa",
"objectiveType": "Matang",
"objectiveTypeScore": "Mangolekta og score",
"objectiveTypeMatches": "Paghimog match",
"objectiveTypeMoves": "Gamita ang mga lihok",
"objectiveTypeTime": "Hupti ang oras",
"objectiveTypeSpecial": "Espesyal nga tumong",
"objectiveOperator": "Operator",
"operatorGreaterEqual": "Mas dako o pareho (≥)",
"operatorLessEqual": "Mas gamay o pareho (≤)",
"operatorEqual": "Pareho (=)",
"operatorGreater": "Mas dako kay (>)",
"operatorLess": "Mas gamay kay (<)",
"objectiveTarget": "Target nga bili",
"objectiveTargetPlaceholder": "pananglitan 100",
"objectiveOrder": "Order",
"objectiveOrderPlaceholder": "1, 2, 3 …",
"objectiveDescription": "Deskripsiyon",
"objectiveDescriptionPlaceholder": "pananglitan mangolekta og 100 puntos",
"objectiveRequired": "Gikinahanglan aron mahuman ang level",
"noObjectives": "Walay kondisyon sa kadaogan. I-klik ang «Idugang ang tumong»."
},
"falukant": {
"edituser": {
"title": "Usba ang Falukant user",
"username": "Ngalan sa user",
"characterName": "Ngalan sa karakter",
"user": "User",
"success": "Nasave na ang mga kausaban.",
"error": "Dili masave ang mga kausaban.",
"errorLoadingBranches": "Sayop sa pagkarga sa mga sangang opisina.",
"errorUpdatingStock": "Sayop sa pag-update sa bodega.",
"stockUpdated": "Malampuson nga na-update ang bodega.",
"search": "Pangita",
"tabs": {
"userdata": "Datos sa user",
"branches": "Mga sangang opisina"
},
"branches": {
"title": "Mga sangang opisina ug bodega",
"noStocks": "Walay bodega",
"noBranches": "Walay nakit-an nga sangang opisina",
"addStock": "Idugang ang bodega",
"stockType": "Matang sa bodega",
"selectStockType": "Pilia ang matang sa bodega",
"quantity": "Kantidad",
"allStocksAdded": "Anaa na ang tanang matang sa bodega"
},
"errorLoadingStockTypes": "Sayop sa pagkarga sa mga matang sa bodega.",
"errorAddingStock": "Sayop sa pagdugang sa bodega.",
"stockAdded": "Malampuson nga nadugang ang bodega.",
"invalidStockData": "Palihog sulodi ang balido nga matang ug kantidad.",
"pregnancy": {
"title": "Pagmabdus (admin)",
"characterId": "ID sa karakter",
"status": "Status",
"statusActive": "Nagpaabot hangtod",
"statusNone": "Dili mabdus",
"fatherId": "ID sa amahan nga karakter (opsyonal)",
"fatherSelect": "Amahan (asawa / nobyo / uyab)",
"fatherNone": "— walay natipig nga amahan —",
"fatherHintList": "Gikan sa relasyon niini nga karakter (kaminyoon, engagement, aktibong uyab).",
"fatherHintManual": "Walay angay nga partner sa database: isulod ang ID sa amahan nga karakter.",
"fatherManualPlaceholder": "ID sa karakter",
"dueDays": "Mga adlaw hangtod sa due date",
"dueDaysHint": "0 = due karon (mahimong mosunod ang pagkatawo depende sa lohika sa dula).",
"force": "Ibutang ang pagmabdus",
"clear": "Tangtanga ang pagmabdus",
"successForce": "Na-set na ang pagmabdus.",
"successClear": "Natangtang na ang pagmabdus.",
"error": "Napakyas ang aksyon.",
"relationship": {
"married": "Asawa",
"engaged": "Nobyo/nobya",
"lover": "Uyab"
}
},
"birth": {
"title": "Pugson ang pagkatawo (admin)",
"motherHint": "Ang karakter sa ibabaw gamiton isip inahan.",
"fatherId": "ID sa amahan nga karakter",
"fatherSelect": "Amahan (asawa / nobyo / uyab)",
"fatherChoose": "— pilia ang amahan —",
"fatherHintList": "Gikan sa relasyon niini nga karakter.",
"fatherHintManual": "Walay partner sa lista: isulod ang ID sa amahan.",
"fatherRequired": "Palihog pilia ang amahan o isulod ang ID sa karakter.",
"context": "Konteksto",
"contextMarriage": "Kaminyoon",
"contextLover": "Uyab",
"legitimacy": "Legitimidad",
"legitimate": "Legitimo",
"ackBastard": "Giila nga bastardo",
"hiddenBastard": "Tago nga bastardo",
"gender": "Sekso sa bata",
"genderRandom": "Random",
"male": "Lalaki",
"female": "Babaye",
"force": "Pugson ang pagkatawo",
"success": "Nahimo ang bata (bautismo pending).",
"error": "Dili mapugos ang pagkatawo."
}
},
"createNPC": {
"title": "Paghimo og mga NPC",
"region": "Lungsod",
"allRegions": "Tanan nga lungsod",
"ageRange": "Sakup sa edad",
"to": "hangtod",
"years": "ka tuig",
"titleRange": "Sakup sa titulo",
"count": "Isip kada kombinasyon lungsodtitulo",
"countHelp": "Kini nga isip himoon sa matag kombinasyon sa napiling lungsod ug titulo.",
"create": "Paghimo og mga NPC",
"creating": "Naghimo …",
"result": "Resulta",
"createdCount": "{count} ka NPC ang nahimo.",
"combinationInfo": "{perCombination} ka NPC matag kombinasyon × {combinations} ka kombinasyon = {count} ka NPC tanan",
"age": "Edad",
"errorLoadingRegions": "Sayop sa pagkarga sa mga lungsod.",
"errorLoadingTitles": "Sayop sa pagkarga sa mga titulo.",
"errorCreating": "Sayop sa paghimo sa mga NPC.",
"invalidAgeRange": "Dili balido nga sakup sa edad.",
"invalidTitleRange": "Dili balido nga sakup sa titulo.",
"invalidCount": "Dili balido nga isip (1500).",
"progress": "Progreso",
"progressDetails": "{current} sa {total} ka NPC ang nahimo",
"timeRemainingSeconds": "Nahibilin nga oras: {seconds} ka segundo",
"timeRemainingMinutes": "Nahibilin nga oras: {minutes} ka minuto {seconds} ka segundo",
"almostDone": "Hapit na …",
"jobNotFound": "Wala makit-i ang trabaho o na-expire na."
}
},
"chatrooms": {
"title": "[Admin] - Pagdumala sa chat room",
"roomName": "Ngalan sa room",
"create": "Paghimo og chat room",
"edit": "Usba ang chat room",
"type": "Matang",
"isPublic": "Makita sa publiko",
"isAdultOnly": "Erotik nga lugar lamang",
"actions": "Mga aksyon",
"genderRestriction": {
"show": "Tugoti ang limit sa sekso",
"label": "Limit sa sekso"
},
"minAge": {
"show": "Butangi ang minimum nga edad",
"label": "Minimum nga edad"
},
"maxAge": {
"show": "Butangi ang maximum nga edad",
"label": "Maximum nga edad"
},
"password": {
"show": "Tugoti ang proteksyon sa password",
"label": "Password"
},
"friendsOfOwnerOnly": "Mga higala sa tag-iya lamang",
"requiredUserRight": {
"show": "Butangi ang gikinahanglan nga katungod sa user",
"label": "Gikinahanglan nga katungod sa user"
},
"roomtype": {
"chat": "Chat",
"dice": "Dado",
"poker": "Poker",
"hangman": "Hangman"
},
"rights": {
"talk": "Makistorya",
"scream": "Mosinggit",
"whisper": "Whisper",
"start game": "Sugdi ang dula",
"open room": "Ablihi ang room",
"systemmessage": "Mensahe sa sistema"
},
"confirmDelete": "Tinuod nga gusto nimong tangtangon kini nga chat room?"
},
"userStatistics": {
"title": "[Admin] - Estadistika sa user",
"totalUsers": "Tanan nga mga user",
"genderDistribution": "Distribusyon sa sekso",
"ageDistribution": "Distribusyon sa edad"
},
"taxiTools": {
"title": "Mga himan sa taxi",
"description": "Pagdumala sa mga mapa, level ug setting sa taxi",
"mapEditor": {
"title": "Usba ang mapa",
"availableMaps": "Anaa nga mga mapa: {count}",
"newMap": "Paghimo og bag-ong mapa",
"mapFormat": "{name} (Posisyon: {x},{y})",
"mapName": "Ngalan sa mapa",
"mapDescription": "Deskripsiyon",
"mapWidth": "Lapad",
"mapHeight": "Taas",
"tileSize": "Sukod sa tile",
"positionX": "Posisyon X",
"positionY": "Posisyon Y",
"mapType": "Matang sa mapa",
"mapLayout": "Layout sa mapa",
"tilePalette": "Palette sa tile",
"streetNames": "Ngalan sa dalan",
"extraElements": "Dugang nga elemento",
"streetNameHorizontal": "Ngalan sa dalan (pahigda)",
"streetNameVertical": "Ngalan sa dalan (patindog)",
"continueHorizontal": "Padayon sa laing direksiyon (→)",
"continueVertical": "Padayon sa laing direksiyon (↓)",
"continueOther": "Padayon sa laing direksiyon",
"position": "Posisyon",
"fillAllRoads": "Tanan nga dalan",
"clearAll": "Hawani tanan",
"generateRandom": "Himoa nga random",
"delete": "Tangtanga",
"update": "I-update",
"cancel": "Kanselahon",
"create": "Paghimo",
"createSuccess": "Malampuson nga nahimo ang mapa!",
"updateSuccess": "Malampuson nga na-update ang mapa!",
"deleteSuccess": "Malampuson nga natangtang ang mapa!"
}
},
"servicesStatus": {
"title": "Status sa serbisyo",
"description": "Tan-awa ang status sa Backend, Chat ug Daemon",
"status": {
"connected": "Na-connect",
"connecting": "Nag-connect …",
"disconnected": "Wala na-connect",
"error": "Sayop",
"unknown": "Wala mailhi"
},
"backend": {
"title": "Backend",
"connected": "Naabot ang backend service ug na-connect"
},
"chat": {
"title": "Chat",
"connected": "Naabot ang chat service ug na-connect"
},
"daemon": {
"title": "Daemon",
"connected": "Naabot ang daemon service ug na-connect",
"connections": {
"title": "Aktibong mga koneksiyon",
"none": "Walay aktibong koneksiyon",
"userId": "ID sa user",
"username": "Ngalan sa user",
"connections": "mga koneksiyon",
"duration": "Gidugayon sa koneksiyon",
"lastPong": "Panahon sukad sa kataposang pong",
"pingTimeouts": "Mga timeout sa ping",
"pongReceived": "Nadawat ang pong",
"yes": "Oo",
"no": "Dili",
"notConnected": "Wala na-connect ang daemon",
"sendError": "Sayop sa pagpadala sa hangyo",
"error": "Sayop sa pagkuha sa mga koneksiyon"
},
"websocketLog": {
"title": "Log sa WebSocket",
"showLog": "Ipakita ang WebSocket log",
"refresh": "I-refresh",
"loading": "Nagkarga …",
"close": "Isira",
"entryCount": "{count} ka entry",
"noEntries": "Walay entry sa log",
"notConnected": "Wala na-connect ang daemon",
"sendError": "Sayop sa pagpadala sa hangyo",
"parseError": "Sayop sa pag-parse sa tubag",
"timestamp": "Timestamp",
"direction": "Direksiyon",
"peer": "Peer",
"connUser": "User sa koneksiyon",
"targetUser": "Target nga user",
"event": "Hitabo"
}
}
}
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -15,7 +15,18 @@
"error-title": "Sayop",
"warning-title": "Pasidaan",
"info-title": "Impormasyon",
"dialog": {
"contact": {
"email": "Adres sa email",
"name": "Pangalan",
"message": "Imong mensahe kanamo",
"accept": "Ang imong email address temporaryong matipigan sa among sistema. Human masusi ang imong hangyo, matangtang na usab ang email.",
"acceptdatasave": "Mituyo ko sa temporaryong pagtipig sa akong email address.",
"accept2": "Kung wala niini, dili mi makatubag kanimo."
}
},
"general": {
"datetimelong": "dd.MM.yyyy HH:mm:ss",
"loading": "Nagkarga...",
"back": "Balik",
"cancel": "Kanselahon",

View File

@@ -3,16 +3,135 @@
"personal": {
"title": "Personal nga datos",
"label": {
"language": "Pinulongan"
"language": "Pinulongan",
"birthdate": "Petsa sa pagkatawo",
"gender": "Sekso",
"town": "Lungsod",
"zip": "ZIP",
"eyecolor": "Kolor sa mata",
"haircolor": "Kolor sa buhok",
"hairlength": "Taas sa buhok",
"skincolor": "Kolor sa panit",
"freckles": "Mga batik",
"weight": "Timbang",
"bodyheight": "Gitas-on",
"piercings": "Mga piercing",
"tattoos": "Mga tattoo",
"sexualpreference": "Oryentasyon",
"pubichair": "Buhok sa pribado",
"penislength": "Taas sa penis",
"brasize": "Sukod sa bra",
"willChildren": "Gusto og anak",
"smokes": "Pagpanigarilyo",
"drinks": "Pag-inom og alkohol",
"hasChildren": "Naay mga anak",
"interestedInGender": "Interesado sa"
},
"tooltip": {
"language": "Pinulongan"
"language": "Pinulongan",
"birthdate": "Petsa sa pagkatawo",
"gender": "Sekso",
"town": "Lungsod",
"zip": "ZIP",
"eyecolor": "Kolor sa mata",
"haircolor": "Kolor sa buhok",
"hairlength": "Taas sa buhok",
"skincolor": "Kolor sa panit",
"freckles": "Mga batik",
"weight": "Timbang",
"bodyheight": "Gitas-on",
"piercings": "Mga piercing",
"tattoos": "Mga tattoo",
"sexualpreference": "Oryentasyon",
"pubichair": "Buhok sa pribado",
"penislength": "Taas sa penis",
"brasize": "Sukod sa bra"
},
"gender": {
"male": "Lalaki",
"female": "Babaye",
"transmale": "Trans nga babaye",
"transfemale": "Trans nga lalaki",
"nonbinary": "Dili binaryo"
},
"language": {
"de": "Aleman",
"en": "Iningles",
"ceb": "Bisaya",
"es": "Espanyol"
},
"eyecolor": {
"blue": "Asul",
"green": "Berde",
"brown": "Brown",
"black": "Itom",
"grey": "Abohon",
"hazel": "Hazel",
"amber": "Amber",
"red": "Pula",
"other": "Uban"
},
"haircolor": {
"black": "Itom",
"brown": "Brown",
"blonde": "Blonde",
"red": "Pula",
"grey": "Abohon",
"white": "Puti",
"other": "Uban"
},
"hairlength": {
"short": "Mubo",
"medium": "Tunga-tunga",
"long": "Taas",
"bald": "Kalbo",
"other": "Uban"
},
"skincolor": {
"light": "Klaro",
"medium": "Tunga-tunga",
"dark": "Itom",
"other": "Uban"
},
"freckles": {
"much": "Daghan",
"medium": "Tunga-tunga",
"less": "Ubos",
"none": "Wala"
},
"sexualpreference": {
"straight": "Heterosexual",
"gay": "Homosexual",
"bi": "Bisexual",
"asexual": "Asexual",
"pan": "Pansexual"
},
"pubichair": {
"none": "Wala",
"short": "Mubo",
"medium": "Tunga-tunga",
"long": "Taas",
"hairy": "Natural",
"waxed": "Wax",
"landingstrip": "Landing strip",
"bikinizone": "Zona sa bikini lamang",
"other": "Uban"
},
"interestedInGender": {
"male": "Mga lalaki",
"female": "Mga babaye"
},
"smokes": {
"often": "Kanunay",
"socially": "Kung kauban",
"daily": "Adlaw-adlaw",
"never": "Dili gayud"
},
"drinks": {
"often": "Kanunay",
"socially": "Kung kauban",
"daily": "Adlaw-adlaw",
"never": "Dili gayud"
}
},
"view": {
@@ -25,11 +144,12 @@
"title": "Account",
"heroEyebrow": "Mga setting",
"heroIntro": "Atimana ang ngalan sa user, email, password ug visibility sa usa ka lugar.",
"language": "Pinulongan",
"username": "Ngalan sa user",
"email": "E-mail address",
"newpassword": "Password",
"newpasswordretype": "Usba ang password",
"deleteAccount": "Tangtanga ang account",
"language": "Pinulongan",
"showinsearch": "Ipakita sa pagpangita sa user",
"changeaction": "Usba ang datos sa user",
"oldpassword": "Karaan nga password (gikinahanglan)",
@@ -41,19 +161,88 @@
"feedback": {
"saved": "Malampuson nga nasave ang account settings.",
"saveError": "Adunay sayop sa pagsave sa account settings."
},
"adultAccessTitle": "Erotik nga lugar",
"adultAccessIntro": "Ang erotik nga lugar para lamang sa hamtong nga mga tiggamit ug gikinahanglan usab og pag-aprub sa moderator.",
"requestAdultVerification": "Mangayo og pag-abli",
"requestAdultVerificationSuccess": "Napadala na ang hangyo sa pag-abli.",
"requestAdultVerificationError": "Dili mapadala ang hangyo sa pag-abli.",
"adultStatus": {
"ineligible": {
"title": "Dili available",
"body": "Ang erotik nga lugar makita lamang sa hamtong nga mga tiggamit."
},
"none": {
"title": "Wala pa ma-abli",
"body": "Makita ang lugar, pero naka-lock pa hangtod sa pag-susi sa moderator."
},
"pending": {
"title": "Naghuwat sa pagsusi",
"body": "Ang imong hangyo naghuwat sa moderation. Naka-lock pa ang lugar hangtod ma-aprub."
},
"approved": {
"title": "Na-abli na",
"body": "Ang erotik nga lugar na-abli na para sa imong account."
},
"rejected": {
"title": "Gibalibaran ang pag-abli",
"body": "Ang kataposang hangyo wala ma-aprub. Mahimo kang magpadala og bag-ong hangyo."
}
}
},
"flirt": {
"title": "Flirt"
"languageAssistant": {
"eyebrow": "Mga setting",
"title": "Katabang sa pinulongan ug AI",
"intro": "Dinhi makatipig ka og kaugalingong API access (pananglitan OpenAI) nga magamit sa plataporma para sa mga bahin sa kurso sa pinulongan. Ang yabi gisave nga encrypted sa server; kinahanglan nimo og account sa provider.",
"linkSignup": "Paghimo og account sa OpenAI (bag-ong bintana)",
"linkApiKeys": "Pagdumala sa API keys sa OpenAI (bag-ong bintana)",
"enabled": "Tugoti ang paggamit para sa mga bahin sa pinulongan",
"baseUrl": "API base URL (opsyonal)",
"baseUrlPlaceholder": "Walay sulod = default (OpenAI). Para sa Ollama pananglitan http://127.0.0.1:11434/v1",
"model": "Ngalan sa modelo",
"apiKey": "API key",
"apiKeyHint": "Biyai nga walay sulod aron mapadayon ang natipig nga yabi.",
"apiKeyPlaceholderNew": "I-paste ang bag-ong yabi",
"apiKeyPlaceholderHasKey": "Ang natipig nagtapos sa …{last4} — walay sulod = padayon",
"apiKeyPlaceholderClear": "Ma-clear ang tipigan kung mag-save ka nga “tangtanga ang yabi” sa ubos",
"clearKey": "Tangtanga ang natipig nga API key",
"save": "I-save",
"saved": "Nasave na ang mga setting.",
"saveError": "Dili masave.",
"confirmClear": "Tinuod nga tangtangon ang API key?",
"keyStatusStored": "Naa ang API key nga natipig.",
"keyStatusInvalid": "Naa ang natipig nga API key pero dili mabasa. Palihog i-save pag-usab.",
"keyStatusMissing": "Walay natipig nga API key karon."
},
"interests": {
"title": "Mga interes",
"new": "Bag-ong interes",
"add": "Idugang"
"add": "Idugang",
"added": "Ang bag-ong interes gidugang na ug gisusi pa. Dili pa makita sa lista hangtod mahuman.",
"adderror": "Sayop sa pagdugang sa interes.",
"errorsetinterest": "Dili ma-book ang interes para nimo."
},
"visibility": {
"Invisible": "Ayaw ipakita",
"OnlyFriends": "Mga higala lamang",
"FriendsAndAdults": "Mga higala ug mga hamtong",
"AdultsOnly": "Mga hamtong lamang",
"All": "Ipakita sa tanan"
},
"feedback": {
"updateError": "Dili masave ang kausaban.",
"visibilityUpdateError": "Dili ma-update ang visibility."
},
"flirt": {
"title": "Flirt"
},
"immutable": {
"tooltip": "Kini nga field dili mausab. Para sa kausaban, kontaka ang support.",
"supportContact": "Kontaka ang support",
"supportMessage": {
"general": "Hello,\n\ngusto nako mangayo og kausaban sa akong profile nga dili mausab.\n\nPalihog kontaka ko para sa dugang detalye.\n\nSalamat",
"specific": "Hello,\n\ngusto nako mangayo og kausaban niini nga dili mausab nga datos sa profile: {fields}\n\nPalihog kontaka ko para sa dugang detalye.\n\nSalamat"
}
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,11 +1,61 @@
{
"blog": {
"blog": {
"posts": "Publicaciones",
"noPosts": "No hay publicaciones.",
"newPost": "Escribir nueva publicación",
"title": "Blog",
"title": "Título",
"publish": "Publicar",
"pickImage": "Seleccionar imagen",
"uploadImage": "Subir imagen"
"uploadImage": "Subir imagen",
"list": {
"eyebrow": "Blogs de la comunidad",
"title": "Blogs",
"intro": "Artículos, avances de proyectos y miradas personales de la comunidad YourPart.",
"create": "Crear nuevo blog",
"loading": "Cargando…",
"empty": "No se han encontrado blogs.",
"by": "por",
"unknownAuthor": "Desconocido",
"open": "Ir al blog",
"fallbackExcerpt": "Entradas públicas, ideas y avances de proyectos de la comunidad."
},
"view": {
"loading": "Cargando…",
"edit": "Editar",
"entriesCount": "{count} entradas",
"empty": "No hay entradas.",
"fallbackDescription": "Blog público de la comunidad en YourPart.",
"notFoundTitle": "Blog no encontrado | YourPart",
"notFoundDescription": "No se pudo cargar el blog solicitado."
},
"editor": {
"createTitle": "Crear blog",
"editTitle": "Editar blog",
"description": "Descripción",
"visibility": "Visibilidad",
"visibilityPublic": "Público",
"visibilityLoggedIn": "Solo usuarios con sesión iniciada",
"ageRange": "Rango de edad",
"gender": "Género",
"genderMale": "Masculino",
"genderFemale": "Femenino",
"save": "Guardar",
"newPostTitle": "Nueva entrada",
"addPost": "Añadir entrada",
"shareTitle": "Compartir blog",
"url": "URL",
"copyLink": "Copiar enlace",
"shareToFriends": "Enviar a amigos",
"emailAddresses": "Direcciones de correo (separadas por comas)",
"send": "Enviar",
"restrictedHint": "Nota: este blog no es público. Los destinatarios pueden necesitar iniciar sesión y permisos de edad/género adecuados.",
"invalidAgeRange": "Rango de edad no válido",
"copySuccess": "Enlace copiado",
"copyError": "No se pudo copiar",
"shareError": "Error al compartir",
"emailError": "Error al enviar el correo",
"friendsSent": "Enviado a {count} amigo(s).",
"emailsSent": "{count} correo(s) enviado(s)."
}
}
}

View File

@@ -37,6 +37,9 @@
},
"notifications": {
"notify_election_created": "Se ha convocado una nueva elección.",
"director_death": "{characterName} ha fallecido a la edad de {ageYears} años. Como empleador debes nombrar un nuevo director.{regionLabel}{spouses}{children}{lovers}",
"relationship_death": "{characterName} ha fallecido a la edad de {ageYears} años.{regionLabel}{spouses}{children}{lovers}",
"child_death": "Tu hijo/a {characterName} ha fallecido a la edad de {ageYears} años.{regionLabel}",
"production": {
"overproduction": "Sobreproducción: tu producción está un {value}% por encima de la demanda."
},
@@ -118,12 +121,22 @@
},
"overview": {
"title": "Falukant - Resumen",
"heroIntro": "Tu situación en economía, familia y patrimonio, de un vistazo.",
"heirSelection": {
"title": "Elección de heredero",
"description": "Tu personaje anterior ya no está disponible. Elige un heredero de la lista para seguir jugando.",
"loading": "Cargando posibles herederos…",
"noHeirs": "No hay herederos disponibles.",
"select": "Elegir como personaje",
"error": "Error al elegir al heredero."
},
"metadata": {
"title": "Datos personales",
"name": "Nombre",
"money": "Patrimonio",
"age": "Edad",
"years": "años",
"days": "días",
"mainbranch": "Ciudad natal",
"nobleTitle": "Rango",
"certificate": "Certificado"
@@ -171,6 +184,16 @@
"two_of": "Al menos dos condiciones de estatus"
}
},
"summary": {
"certificateHint": "Determina qué categorías de producto puedes fabricar ahora.",
"branches": "Sucursales",
"branchesHint": "Acceso directo a tus principales ubicaciones.",
"productions": "Producciones activas",
"productionsHint": "Producciones en curso que pronto requieren conclusión o control.",
"stock": "Posiciones de almacén",
"stockHint": "Vista resumida del inventario en todas las regiones.",
"open": "Abrir"
},
"productions": {
"title": "Producciones"
},
@@ -196,6 +219,8 @@
"toddler": "niño pequeño",
"child": "niño",
"adolescence": "joven",
"teen": "jovencito",
"youngAdult": "joven adulto",
"adult": "hombre",
"mature": "señor",
"elder": "anciano"
@@ -205,6 +230,8 @@
"toddler": "niña pequeña",
"child": "niña",
"adolescence": "joven",
"teen": "jovencita",
"youngAdult": "joven adulta",
"adult": "mujer",
"mature": "señora",
"elder": "anciana"
@@ -256,6 +283,8 @@
},
"branch": {
"title": "Sucursal",
"heroEyebrow": "Sucursal",
"heroIntro": "Producción, almacén, venta y transporte en un panel ligado al mundo del juego.",
"debtorsPrison": {
"branchLocked": "En la prisión por deudas se bloquean los nuevos pasos económicos. Las sucursales cerradas o embargadas también se reflejarán aquí.",
"branchRisk": "Tu mora pone en peligro sucursales, vehículos y mercancías almacenadas.",
@@ -393,7 +422,10 @@
"current": "Producciones en curso",
"product": "Producto",
"remainingTime": "Tiempo restante (segundos)",
"noProductions": "No hay producciones en curso."
"noProductions": "No hay producciones en curso.",
"status": "Estado",
"sleep": "En pausa",
"active": "Activo"
},
"columns": {
"city": "Ciudad",
@@ -792,6 +824,23 @@
"time": "Hora",
"prev": "Anterior",
"next": "Siguiente",
"graph": {
"open": "Mostrar evolución",
"title": "Evolución del dinero",
"close": "Cerrar",
"loading": "Cargando historial…",
"noData": "No hay movimientos en el periodo seleccionado.",
"yesterday": "Ayer",
"range": {
"label": "Periodo",
"today": "Hoy",
"24h": "Últimas 24 horas",
"week": "Última semana",
"month": "Último mes",
"year": "Último año",
"all": "Todo el historial"
}
},
"activities": {
"Product sale": "Productos vendidos",
"Production cost": "Costes de producción",
@@ -882,7 +931,8 @@
"apathetic": "Apático",
"relieved": "Aliviado",
"proud": "Orgulloso",
"ashamed": "Avergonzado"
"ashamed": "Avergonzado",
"calm": "Tranquilo"
},
"character": {
"brave": "Valiente",
@@ -1027,7 +1077,34 @@
"reputation": {
"title": "Reputación",
"overview": {
"title": "Resumen"
"title": "Resumen",
"current": "Reputación actual"
},
"actions": {
"title": "Acciones de reputación",
"description": "Puedes realizar distintas acciones para mejorar tu reputación.",
"none": "No hay acciones de reputación disponibles.",
"action": "Acción",
"cost": "Coste",
"gain": "Ganancia",
"timesUsed": "Usado",
"execute": "Ejecutar",
"running": "En curso…",
"dailyLimit": "Límite diario: quedan {remaining} de {cap} acciones",
"cooldown": "Enfriamiento: aún {minutes} minutos",
"type": {
"soup_kitchen": "Comedor social",
"library_donation": "Donación a la biblioteca",
"scholarships": "Becas",
"church_hospice": "Hospicio eclesiástico",
"school_funding": "Financiación escolar",
"orphanage_build": "Construir orfanato",
"bridge_build": "Construir puente",
"hospital_donation": "Donación al hospital",
"patronage": "Mecenazgo",
"statue_build": "Erigir estatua",
"well_build": "Construir pozo"
}
},
"party": {
"title": "Fiestas",
@@ -1078,6 +1155,17 @@
},
"church": {
"title": "Iglesia",
"offices": {
"lay-preacher": "Predicador laico",
"village-priest": "Párroco del pueblo",
"parish-priest": "Párroco",
"dean": "Decano",
"archdeacon": "Arcediano",
"bishop": "Obispo",
"archbishop": "Arzobispo",
"cardinal": "Cardenal",
"pope": "Papa"
},
"tabs": {
"baptism": "Bautizos",
"current": "Cargos actuales",
@@ -1254,7 +1342,12 @@
"drunkOfLife": "Elixir de la vida",
"barber": "Barbero"
},
"choose": "Por favor, selecciona"
"choose": "Por favor, selecciona",
"errors": {
"tooClose": "No puedes aplicar medidas tan a menudo.",
"generic": "Se ha producido un error."
},
"nextMeasureAt": "Próxima medida a partir de"
},
"politics": {
"title": "Política",
@@ -1264,6 +1357,10 @@
"upcoming": "Cargos pendientes de (re)elección",
"elections": "Elecciones"
},
"bookmarkCandidate": "Recordar esta candidatura",
"voteError": "Error al emitir el voto",
"voteAllError": "Error al emitir los votos",
"applyError": "No se pudo enviar la candidatura.",
"benefits": {
"daily_salary": "Estipendio diario (una vez al día): {amount}",
"tax_exemption": "Exención fiscal: {regions}",
@@ -1326,9 +1423,13 @@
"region": "Región",
"date": "Fecha",
"candidacy": "Candidatura",
"candidacyWithAge": "Candidatura (desde 16 años)",
"none": "No hay cargos abiertos.",
"apply": "Presentarse a los cargos seleccionados"
"apply": "Presentarse a los cargos seleccionados",
"minAgeHint": "La candidatura solo es posible a partir de 16 años.",
"ageRequirement": "Para todos los cargos políticos: candidatura solo a partir de 16 años."
},
"too_young": "Tu personaje es demasiado joven. La candidatura solo es posible a partir de 16 años.",
"upcoming": {
"office": "Cargo",
"region": "Región",

View File

@@ -32,7 +32,13 @@
"totalScore": "Puntuación total",
"totalStars": "Estrellas totales",
"levelsCompleted": "Niveles completados",
"restartCampaign": "Reiniciar campaña"
"restartCampaign": "Reiniciar campaña",
"nextStep": "Siguiente paso",
"objectivesCollapse": "Ocultar objetivos",
"objectivesShow": "Mostrar objetivos",
"objectives": "Objetivos",
"loadingBoard": "Preparando el tablero…",
"loadingHint": "Sincronizando datos del nivel, objetivos y disposición del campo."
},
"taxi": {
"title": "Taxi Simulator",
@@ -64,6 +70,34 @@
"refuel": "Repostar",
"startEngine": "Arrancar motor",
"stopEngine": "Parar motor",
"controls": "Controles",
"accelerate": "Acelerar",
"brake": "Frenar",
"steerRight": "Girar a la derecha",
"steerLeft": "Girar a la izquierda",
"goals": "Objetivos",
"avoidCollisions": "Evita colisiones con otros vehículos",
"streetNames": "Nombres de calles",
"remainingVehicles": "Vehículos restantes",
"fuelTitle": "Combustible",
"pointsTitle": "Puntos",
"speedViolations": "Infracciones de velocidad",
"redLightsPassed": "Semáforos en rojo saltados",
"highscore": "Récords",
"topPlayers": "Top 20 jugadores",
"loadingHighscore": "Cargando récords…",
"noHighscore": "Aún no hay récords",
"pointsShort": "pts",
"backToGame": "Volver al juego",
"minimap": "Minimapa",
"loadedPassengers": "Pasajeros a bordo",
"waitingPassengers": "Pasajeros en espera",
"noPassengersInTaxi": "No hay pasajeros en el taxi",
"noWaitingPassengers": "No hay pasajeros esperando",
"name": "Nombre",
"destination": "Destino",
"bonus": "Bonificación",
"time": "Tiempo",
"crash": {
"title": "¡Accidente!",
"message": "¡Has tenido un accidente! Choques: {crashes}"

View File

@@ -1,9 +1,13 @@
{
"passwordReset": {
"title": "Restablecer contraseña",
"email": "E-Mail",
"passwordReset": {
"title": "Restablecer contraseña",
"email": "Correo electrónico",
"reset": "Restablecer",
"success": "Si el correo electrónico existe, se ha enviado una guía para restablecer la contraseña.",
"failure": "No se pudo restablecer la contraseña. Inténtalo de nuevo más tarde."
"success": "Si el correo existe, se ha enviado una guía para restablecer la contraseña.",
"failure": "No se pudo restablecer la contraseña. Inténtalo de nuevo más tarde.",
"emailHint": "Enviaremos el enlace a la dirección de correo registrada.",
"validation": {
"invalidEmail": "Introduce una dirección de correo válida."
}
}
}

View File

@@ -1,21 +1,29 @@
{
"register": {
"title": "Registrarse",
"email": "Dirección de correo electrónico",
"username": "Nombre de usuario",
"password": "Contraseña",
"repeatPassword": "Repetir contraseña",
"language": "Idioma",
"languages": {
"en": "Inglés",
"de": "Alemán"
},
"register": "Registrarse",
"close": "Cerrar",
"failure": "Se ha producido un error.",
"success": "Te has registrado correctamente. Revisa tu correo electrónico para activar tu cuenta.",
"passwordMismatch": "Las contraseñas no coinciden.",
"emailinuse": "La dirección de correo electrónico ya está en uso.",
"usernameinuse": "El nombre de usuario no está disponible."
"register": {
"title": "Registrarse en yourPart",
"email": "Dirección de correo electrónico",
"username": "Nombre de usuario",
"password": "Contraseña",
"repeatPassword": "Repetir contraseña",
"language": "Idioma",
"languages": {
"en": "Inglés",
"de": "Alemán",
"ceb": "Bisaya",
"es": "Español"
},
"register": "Registrarse",
"close": "Cerrar",
"failure": "Se ha producido un error.",
"success": "Te has registrado correctamente. Revisa tu correo para activar tu cuenta.",
"passwordMismatch": "Las contraseñas no coinciden.",
"emailinuse": "La dirección de correo ya está en uso.",
"usernameinuse": "El nombre de usuario no está disponible.",
"validation": {
"invalidEmail": "Introduce una dirección de correo válida.",
"usernameTooShort": "El nombre de usuario debe tener al menos 3 caracteres.",
"passwordHint": "Al menos 8 caracteres.",
"passwordTooShort": "La contraseña es demasiado corta."
}
}
}

View File

@@ -142,6 +142,8 @@
},
"account": {
"title": "Account",
"heroEyebrow": "Ajustes",
"heroIntro": "Gestiona nombre de usuario, correo, contraseña y visibilidad en un solo lugar.",
"username": "Nombre de usuario",
"email": "Dirección de correo electrónico",
"newpassword": "Contraseña",
@@ -151,6 +153,15 @@
"showinsearch": "Mostrar en búsquedas de usuarios",
"changeaction": "Actualizar datos de usuario",
"oldpassword": "Contraseña anterior (obligatoria)",
"validation": {
"newPasswordTooShort": "La nueva contraseña debe tener al menos 8 caracteres.",
"passwordMismatch": "Las contraseñas no coinciden.",
"oldPasswordRequired": "Se necesita la contraseña actual para cambiarla."
},
"feedback": {
"saved": "Los ajustes de la cuenta se guardaron correctamente.",
"saveError": "Se produjo un error al guardar los ajustes de la cuenta."
},
"adultAccessTitle": "Área erótica",
"adultAccessIntro": "El área erótica está destinada solo a usuarios adultos y además requiere aprobación de moderación.",
"requestAdultVerification": "Solicitar acceso",
@@ -218,6 +229,10 @@
"AdultsOnly": "Solo adultos",
"All": "Mostrar a todos"
},
"feedback": {
"updateError": "No se pudo guardar el cambio.",
"visibilityUpdateError": "No se pudo actualizar la visibilidad."
},
"flirt": {
"title": "Flirt"
},