add simplifed chinese locale (#485)

* add chinese locale, but translation is not yet complete.

* Add chs and cht locale

* translate ability,move,pokeball,pokemon

* Add files via upload

* Add files via upload

* Update i18n.ts

* Delete src/locales/zh_cn directory

* Add files via upload

* Update settings.ts

* Delete src/locales/chs directory

* Add files via upload

* add tutorial

* fix conflict issue

* remove cht, due to chs is almost done by justhil

* remove duplicated setting

* spell correction

---------

Co-authored-by: ZXZhuang <2993968012@qq.com>
Co-authored-by: justhil <138752349+justhil@users.noreply.github.com>
Co-authored-by: Jianfeng 2. Wang (NSB) <jianfeng.2.wang@nokia-sbell.com>
This commit is contained in:
Jane620 2024-05-09 11:59:49 +08:00 committed by GitHub
parent 76ac86d2ae
commit 5992d9eb81
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
15 changed files with 6415 additions and 1 deletions

1244
src/locales/chs/ability.ts Normal file

File diff suppressed because it is too large Load Diff

53
src/locales/chs/battle.ts Normal file
View File

@ -0,0 +1,53 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const battle: SimpleTranslationEntries = {
"bossAppeared": "{{bossName}} 出现了。",
"trainerAppeared": "{{trainerName}}\n想要和你对战!",
"singleWildAppeared": "一只野生 {{pokemonName}} 出现了。!",
"multiWildAppeared": "野生的 {{pokemonName1}}\n和 {{pokemonName2}} 出现了。!",
"playerComeBack": "回来吧, {{pokemonName}}!",
"trainerComeBack": "{{trainerName}} 收回了 {{pokemonName}}!",
"playerGo": "去吧! {{pokemonName}}!",
"trainerGo": "{{trainerName}} 派出了 {{pokemonName}}!",
"switchQuestion": "要更换\n{{pokemonName}}吗?",
"trainerDefeated": `你击败了\n{{trainerName}}!`,
"pokemonCaught": "{{pokemonName}} 被抓住了!",
"pokemon": "宝可梦",
"sendOutPokemon": "上吧! {{pokemonName}}!",
"hitResultCriticalHit": "击中了要害!",
"hitResultSuperEffective": "效果拔群!",
"hitResultNotVeryEffective": "收效甚微…",
"hitResultNoEffect": "对 {{pokemonName}} 没有效果!!",
"hitResultOneHitKO": "一击必杀!",
"attackFailed": "但是失败了!",
"attackHitsCount": `击中 {{count}} 次!`,
"expGain": "{{pokemonName}} 获得了 {{exp}} 经验值!",
"levelUp": "{{pokemonName}} 升级到 Lv. {{level}}",
"learnMove": "{{pokemonName}} 学会了 {{moveName}}",
"learnMovePrompt": "{{pokemonName}} 想要学习 {{moveName}}。",
"learnMoveLimitReached": "但是,{{pokemonName}} 已经学会了\n四个技能",
"learnMoveReplaceQuestion": "要忘记一个技能并学习 {{moveName}} 吗?",
"learnMoveStopTeaching": "不再尝试学习 {{moveName}}",
"learnMoveNotLearned": "{{pokemonName}} 没有学会 {{moveName}}。",
"learnMoveForgetQuestion": "要忘记哪个技能?",
"learnMoveForgetSuccess": "{{pokemonName}} 忘记了\n如何使用 {{moveName}}。",
"levelCapUp": "等级上限提升到 {{levelCap}}",
"moveNotImplemented": "{{moveName}} 尚未实装,无法选择。",
"moveNoPP": "这个技能的 PP 用完了",
"moveDisabled": "{{moveName}} 被禁用!",
"noPokeballForce": "一股无形的力量阻止了你使用精灵球。",
"noPokeballTrainer": "你不能捕捉其他训练家的宝可梦!",
"noPokeballMulti": "只能在剩下一只宝可梦时才能扔出精灵球!",
"noPokeballStrong": "目标宝可梦太强了,无法捕捉!你需要先削弱它!",
"noEscapeForce": "一股无形的力量阻止你逃跑。",
"noEscapeTrainer": "你不能从训练家战斗中逃跑!",
"noEscapePokemon": "{{pokemonName}} 的 {{moveName}} 阻止了你 {{escapeVerb}}",
"runAwaySuccess": "你成功逃脱了!",
"runAwayCannotEscape": '你无法逃脱!',
"escapeVerbSwitch": "切换",
"escapeVerbFlee": "逃跑",
"notDisabled": "{{moveName}} 不再被禁用!",
"skipItemQuestion": "你确定要跳过拾取道具吗?",
"eggHatching": "咦?",
"ivScannerUseQuestion": "对 {{pokemonName}} 使用个体值扫描仪?"
} as const;

View File

@ -0,0 +1,9 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const commandUiHandler: SimpleTranslationEntries = {
"fight": "战斗",
"ball": "精灵球",
"pokemon": "宝可梦",
"run": "逃跑",
"actionMessage": "要让\n{{pokemonName}} 做什么?",
} as const;

28
src/locales/chs/config.ts Normal file
View File

@ -0,0 +1,28 @@
import { ability } from "./ability";
import { battle } from "./battle";
import { commandUiHandler } from "./command-ui-handler";
import { fightUiHandler } from "./fight-ui-handler";
import { menu } from "./menu";
import { menuUiHandler } from "./menu-ui-handler";
import { move } from "./move";
import { pokeball } from "./pokeball";
import { pokemon } from "./pokemon";
import { pokemonStat } from "./pokemon-stat";
import { starterSelectUiHandler } from "./starter-select-ui-handler";
import { tutorial } from "./tutorial";
export const chsConfig = {
ability: ability,
battle: battle,
commandUiHandler: commandUiHandler,
fightUiHandler: fightUiHandler,
menuUiHandler: menuUiHandler,
menu: menu,
move: move,
pokeball: pokeball,
pokemonStat: pokemonStat,
pokemon: pokemon,
starterSelectUiHandler: starterSelectUiHandler,
tutorial: tutorial
}

View File

@ -0,0 +1,6 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const fightUiHandler: SimpleTranslationEntries = {
"pp": "PP",
"power": "POWER",
} as const;

View File

@ -0,0 +1,23 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const menuUiHandler: SimpleTranslationEntries = {
"GAME_SETTINGS": '游戏设置',
"ACHIEVEMENTS": "成就",
"STATS": "数据统计",
"VOUCHERS": "兑换券",
"EGG_LIST": "蛋列表",
"EGG_GACHA": "蛋扭蛋",
"MANAGE_DATA": "管理数据",
"COMMUNITY": "社区",
"RETURN_TO_TITLE": "返回标题画面",
"LOG_OUT": "登出",
"slot": "存档位 {{slotNumber}}",
"importSession": "导入存档",
"importSlotSelect": "选择要导入到的存档位。",
"exportSession": "导出存档",
"exportSlotSelect": "选择要导出的存档位。",
"importData": "导入数据",
"exportData": "导出数据",
"cancel": "取消",
"losingProgressionWarning": "你将失去自战斗开始以来的所有进度。是否继续?"
} as const;

46
src/locales/chs/menu.ts Normal file
View File

@ -0,0 +1,46 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
/**
* The menu namespace holds most miscellaneous text that isn't directly part of the game's
* contents or directly related to Pokemon data. This includes menu navigation, settings,
* account interactions, descriptive text, etc.
*/
export const menu: SimpleTranslationEntries = {
"cancel": "取消",
"continue": "继续",
"dailyRun": "每日挑战 (Beta)",
"loadGame": "加载游戏",
"newGame": "新游戏",
"selectGameMode": "选择一个游戏模式",
"logInOrCreateAccount": "登录或创建账户以开始游戏。无需邮箱!",
"username": "用户名",
"password": "密码",
"login": "登录",
"register": "注册",
"emptyUsername": "用户名不能为空",
"invalidLoginUsername": "提供的用户名无效",
"invalidRegisterUsername": "用户名只能包含字母、数字或下划线",
"invalidLoginPassword": "提供的密码无效",
"invalidRegisterPassword": "密码必须至少包含 6 个字符",
"usernameAlreadyUsed": "提供的用户名已被使用",
"accountNonExistent": "提供的用户不存在",
"unmatchingPassword": "提供的密码不匹配",
"passwordNotMatchingConfirmPassword": "密码必须与确认密码一致",
"confirmPassword": "确认密码",
"registrationAgeWarning": "注册即表示您确认您已年满 13 岁。",
"backToLogin": "返回登录",
"failedToLoadSaveData": "读取存档数据失败。请重新加载页面。如果问题仍然存在,请联系管理员。",
"sessionSuccess": "会话加载成功。",
"failedToLoadSession": "无法加载您的会话数据。它可能已损坏。",
"boyOrGirl": "你是男孩还是女孩?",
"boy": "男孩",
"girl": "女孩",
"dailyRankings": "每日排名",
"weeklyRankings": "每周排名",
"noRankings": "无排名",
"loading": "加载中…",
"playersOnline": "在线玩家",
"empty": "空",
"yes": "是",
"no": "否",
} as const;

3811
src/locales/chs/move.ts Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,10 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const pokeball: SimpleTranslationEntries = {
"pokeBall": "精灵球",
"greatBall": "超级球",
"ultraBall": "高级球",
"rogueBall": "肉鸽球",
"masterBall": "大师球",
"luxuryBall": "豪华球",
} as const;

View File

@ -0,0 +1,16 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const pokemonStat: SimpleTranslationEntries = {
"HP": "最大HP",
"HPshortened": "最大HP",
"ATK": "攻击",
"ATKshortened": "攻击",
"DEF": "防御",
"DEFshortened": "防御",
"SPATK": "特攻",
"SPATKshortened": "特攻",
"SPDEF": "特防",
"SPDEFshortened": "特防",
"SPD": "速度",
"SPDshortened": "速度"
} as const;

1086
src/locales/chs/pokemon.ts Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,32 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
/**
* The menu namespace holds most miscellaneous text that isn't directly part of the game's
* contents or directly related to Pokemon data. This includes menu navigation, settings,
* account interactions, descriptive text, etc.
*/
export const starterSelectUiHandler: SimpleTranslationEntries = {
"confirmStartTeam":'使用这些宝可梦开始游戏吗?',
"growthRate": "成长速度:",
"ability": "特性:",
"passive": "被动:",
"nature": "性格:",
"eggMoves": '蛋招式',
"start": "开始",
"addToParty": "加入队伍",
"toggleIVs": '切换个体值',
"manageMoves": '管理招式',
"useCandies": '使用糖果',
"selectMoveSwapOut": "选择要替换的招式。",
"selectMoveSwapWith": "选择要替换成的招式",
"unlockPassive": "解锁被动",
"reduceCost": "降低花费",
"cycleShiny": "R: 切换闪光",
"cycleForm": 'F: 切换形态',
"cycleGender": 'G: 切换性别',
"cycleAbility": 'E: 切换特性',
"cycleNature": 'N: 切换性格',
"cycleVariant": 'V: 切换变种',
"enablePassive": "启用被动",
"disablePassive": "禁用被动"
}

View File

@ -0,0 +1,42 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const tutorial: SimpleTranslationEntries = {
"intro": `欢迎来到宝可梦PokéRogue这是一款以战斗为核心的宝可梦同人游戏融合了 roguelite 元素。
$本游戏未进行商业化使
$游戏仍在开发中\n如需报告错误使 Discord
$如果游戏运行缓慢`,
"accessMenu": `在等待输入时,按 M 或 Escape 键可访问菜单。\n菜单包含设置和各种功能。`,
"menu": `在此菜单中,您可以访问设置。
$在设置中
$这里还有各种其他功能`,
"starterSelect": `在此屏幕中,您可以选择您的初始宝可梦。\n这些是您最初的队伍成员。
$每个初始宝可梦都有一个价值\n6 10
$您还可以根据\n您捕获或孵化的变种选择性别
$一个物种的个体值也是您捕获或孵化的所有宝可梦中最好的`,
"pokerus": `每天随机 3 个可选的初始宝可梦会有紫色边框。
$如果您看到您拥有的初始宝可梦带有紫色边框\n请尝试将其添加到您的队伍中`,
"statChange": `只要您的宝可梦没有被召回,属性变化就会在战斗中持续存在。
$在训练家战斗之前和进入新的生物群落之前
$您还可以通过按住 C Shift `,
"selectItem": `每次战斗后,您都可以选择 3 个随机物品。\n您只能选择其中一个。
$这些物品包括消耗品
$大多数非消耗品的效果会以各种方式叠加
$某些物品只有在可以使用时才会出现
$您还可以使用转移选项在宝可梦之间转移携带物品
$一旦您获得了携带物品
$您可以用金钱购买消耗品
$请务必在选择随机物品之前购买这些消耗品`,
"eggGacha": `在此屏幕中,您可以使用您的兑换券兑换\n宝可梦蛋。
$蛋需要孵化
$孵化的宝可梦也不会被添加到您的队伍中
$从蛋中孵化的宝可梦通常比\n野生宝可梦具有更好的个体值
$有些宝可梦甚至只能从蛋中获得
$有 3 \n奖励`,
} as const;

View File

@ -6,6 +6,7 @@ import { enConfig } from '#app/locales/en/config.js';
import { esConfig } from '#app/locales/es/config.js';
import { frConfig } from '#app/locales/fr/config.js';
import { itConfig } from '#app/locales/it/config.js';
import { chsConfig } from '#app/locales/chs/config.js';
export interface SimpleTranslationEntries {
[key: string]: string
@ -58,7 +59,7 @@ export function initI18n(): void {
i18next.use(LanguageDetector).init({
lng: lang,
fallbackLng: 'en',
supportedLngs: ['en', 'es', 'fr', 'it', 'de'],
supportedLngs: ['en', 'es', 'fr', 'it', 'de', 'chs'],
debug: true,
interpolation: {
escapeValue: false,
@ -78,6 +79,9 @@ export function initI18n(): void {
},
de: {
...deConfig
},
chs: {
...chsConfig
}
},
});

View File

@ -198,6 +198,10 @@ export function setSetting(scene: BattleScene, setting: Setting, value: integer)
label: 'Deutsch',
handler: () => changeLocaleHandler('de')
},
{
label: 'Simplified Chinese',
handler: () => changeLocaleHandler('chs')
},
{
label: 'Cancel',
handler: () => cancelHandler()