pull/737/merge
MrWaterT 2024-05-16 06:33:30 +09:00 committed by GitHub
commit 6036b2f7ad
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
21 changed files with 6536 additions and 1 deletions

View File

@ -0,0 +1,4 @@
The FontStruction “Pokemon DPPt”
(https://fontstruct.com/fontstructions/show/1951915) by “aztecwarrior28” is
licensed under a Creative Commons Attribution Share Alike license
(http://creativecommons.org/licenses/by-sa/3.0/).

Binary file not shown.

View File

@ -0,0 +1,5 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const abilityTriggers: SimpleTranslationEntries = {
'blockRecoilDamage' : `{{pokemonName}}(는)은 {{abilityName}} 때문에\n반동 데미지를 받지 않는다!`,
} as const;

1252
src/locales/ko/ability.ts Normal file

File diff suppressed because it is too large Load Diff

53
src/locales/ko/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}}(이)가\n튀어나왔다!",
"multiWildAppeared": "야생 {{pokemonName1}}(과)와\n{{pokemonName2}}(이)가 튀어나왔다!",
"playerComeBack": "돌아와, {{pokemonName}}!",
"trainerComeBack": "{{trainerName}}(는)은 {{pokemonName}}를(을) 넣어버렸다!",
"playerGo": "가랏! {{pokemonName}}!",
"trainerGo": "{{trainerName}}(는)은 {{pokemonName}}를(을) 내보냈다!",
"switchQuestion": "{{pokemonName}}를(을)\n교체하시겠습니까?",
"trainerDefeated": `{{trainerName}}과(와)의\n승부에서 이겼다!`,
"pokemonCaught": "신난다-!\n{{pokemonName}}을 붙잡았다!",
"pokemon": "포켓몬",
"sendOutPokemon": "가랏! {{pokemonName}}!",
"hitResultCriticalHit": "급소에 맞았다!",
"hitResultSuperEffective": "효과가 굉장했다!",
"hitResultNotVeryEffective": "효과가 별로인 듯하다…",
"hitResultNoEffect": "{{pokemonName}}에게는\n효과가 없는 것 같다…",
"hitResultOneHitKO": "일격필살!",
"attackFailed": "하지만 실패했다!",
"attackHitsCount": `{{count}}번 맞았다!`,
"expGain": "{{pokemonName}}(는)은\n{{exp}} 경험치를 얻었다!",
"levelUp": "{{pokemonName}}(는)은\n레벨 {{level}}(으)로 올랐다!",
"learnMove": "{{pokemonName}}(는)은 새로\n{{moveName}}를(을) 배웠다!",
"learnMovePrompt": "{{pokemonName}}(는)은 새로\n{{moveName}}를(을) 배우고 싶다…",
"learnMoveLimitReached": "그러나 {{pokemonName}}(는)은 기술을 4개\n알고 있으므로 더 이상 배울 수 없다!",
"learnMoveReplaceQuestion": "{{moveName}}대신 다른 기술을 잊게 하겠습니까?",
"learnMoveStopTeaching": "그럼… {{moveName}}를(을)\n배우는 것을 포기하겠습니까?",
"learnMoveNotLearned": "{{pokemonName}}(는)은\n결국 배우지 않았다!",
"learnMoveForgetQuestion": "어느 기술을 잊게 하고싶은가?",
"learnMoveForgetSuccess": "{{pokemonName}}(는)은 {{moveName}}를(을) 깨끗이 잊었다!",
"levelCapUp": "레벨의 최대치가\n{{levelCap}}까지 상승했다!",
"moveNotImplemented": "{{moveName}}(는)은 아직 구현되지 않아 사용할 수 없다…",
"moveNoPP": "기술의 남은 포인트가 없다!",
"moveDisabled": "{{moveName}}를(을) 쓸 수 없다!",
"noPokeballForce": "본 적 없는 힘이\n볼을 사용하지 못하게 한다.",
"noPokeballTrainer": "다른 트레이너의 포켓몬은 잡을 수 없다!",
"noPokeballMulti": "안돼! 2마리 있어서\n목표를 정할 수가 없어…!",
"noPokeballStrong": "너무 강해서 잡을 수가 없다!\n먼저 약화시켜야 한다!",
"noEscapeForce": "본 적 없는 힘이\n도망칠 수 없게 한다.",
"noEscapeTrainer": "안돼! 승부 도중에\n상대에게 등을 보일 순 없어!",
"noEscapePokemon": "{{pokemonName}}의 {{moveName}}때문에\n{{escapeVerb}} 수 없다!",
"runAwaySuccess": "무사히 도망쳤다!",
"runAwayCannotEscape": "도망칠 수 없었다!",
"escapeVerbSwitch": "교체할",
"escapeVerbFlee": "도망칠",
"notDisabled": "{{pokemonName}}의\n{{moveName}} 사슬묶기가 풀렸다!",
"skipItemQuestion": "아이템을 받지 않고 넘어가시겠습니까?",
"eggHatching": "어라?",
"ivScannerUseQuestion": "{{pokemonName}}에게 IV Scanner를 사용하시겠습니까?"
} as const;

View File

@ -0,0 +1,9 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const commandUiHandler: SimpleTranslationEntries = {
"fight": "싸우다",
"ball": "볼",
"pokemon": "포켓몬",
"run": "도망치다",
"actionMessage": "{{pokemonName}}(는)은 무엇을 할까?",
} as const;

34
src/locales/ko/config.ts Normal file
View File

@ -0,0 +1,34 @@
import { ability } from "./ability";
import { abilityTriggers } from "./ability-trigger";
import { battle } from "./battle";
import { commandUiHandler } from "./command-ui-handler";
import { fightUiHandler } from "./fight-ui-handler";
import { growth } from "./growth";
import { menu } from "./menu";
import { menuUiHandler } from "./menu-ui-handler";
import { move } from "./move";
import { nature } from "./nature";
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 koConfig = {
ability,
abilityTriggers,
battle,
commandUiHandler,
fightUiHandler,
menuUiHandler,
menu,
move,
pokeball,
pokemonStat,
pokemon,
starterSelectUiHandler,
tutorial,
nature,
growth
}

View File

@ -0,0 +1,7 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const fightUiHandler: SimpleTranslationEntries = {
"pp": "PP",
"power": "위력",
"accuracy": "명중률",
} as const;

10
src/locales/ko/growth.ts Normal file
View File

@ -0,0 +1,10 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const growth: SimpleTranslationEntries = {
"Erratic": "불규칙",
"Fast": "빠름",
"Medium_Fast": "중간 빠름",
"Medium_Slow": "중간 느림",
"Slow": "느림",
"Fluctuating": "변동"
} 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/ko/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": "데일리 런 (베타)",
"loadGame": "불러오기",
"newGame": "새 게임",
"selectGameMode": "게임 모드를 선택해주세요.",
"logInOrCreateAccount": "로그인 또는 등록을 해 주세요. 개인정보를 요구하지 않습니다!",
"username": "이름",
"password": "비밀번호",
"login": "로그인",
"register": "등록",
"emptyUsername": "이름은 비워둘 수 없습니다",
"invalidLoginUsername": "사용할 수 없는 이름입니다",
"invalidRegisterUsername": "이름은 알파벳, 숫자, 언더바(_)만 사용할 수 있습니다",
"invalidLoginPassword": "사용할 수 없는 비밀번호입니다",
"invalidRegisterPassword": "비밀번호는 여섯글자 이상이어야 합니다",
"usernameAlreadyUsed": "이미 사용중인 이름입니다",
"accountNonExistent": "등록되지 않은 이름입니다",
"unmatchingPassword": "비밀번호가 틀립니다",
"passwordNotMatchingConfirmPassword": "비밀번호가 일치하지 않습니다",
"confirmPassword": "비밀번호 재입력",
"registrationAgeWarning": "13세 이상입니다.",
"backToLogin": "로그인 화면으로",
"failedToLoadSaveData": "데이터를 불러올 수 없었습니다. 페이지를 새로고침해주세요.\n문제가 계속 발생한다면, 관리자에게 연락해주세요.",
"sessionSuccess": "세션 불러오기 성공.",
"failedToLoadSession": "세션을 불러올 수 없었습니다.\n파일이 손상되었을 수 있습니다.",
"boyOrGirl": "너는 남자니?\n아니면 여자니?",
"boy": "남자",
"girl": "여자",
"dailyRankings": "일간 랭킹",
"weeklyRankings": "주간 랭킹",
"noRankings": "랭킹 정보 없음",
"loading": "로딩 중…",
"playersOnline": "플레이어 온라인",
"empty":"빈 슬롯",
"yes":"예",
"no":"아니오",
} as const;

3839
src/locales/ko/move.ts Normal file

File diff suppressed because it is too large Load Diff

29
src/locales/ko/nature.ts Normal file
View File

@ -0,0 +1,29 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const nature: SimpleTranslationEntries = {
"Hardy": "노력",
"Lonely": "외로움",
"Brave": "용감",
"Adamant": "고집",
"Naughty": "개구쟁이",
"Bold": "대담",
"Docile": "온순",
"Relaxed": "무사태평",
"Impish": "장난꾸러기",
"Lax": "촐랑",
"Timid": "겁쟁이",
"Hasty": "성급",
"Serious": "성실",
"Jolly": "명랑",
"Naive": "천진난만",
"Modest": "조심",
"Mild": "의젓",
"Quiet": "냉정",
"Bashful": "수줍음",
"Rash": "덜렁",
"Calm": "차분",
"Gentle": "얌전",
"Sassy": "건방",
"Careful": "신중",
"Quirky": "변덕"
} as const;

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/ko/pokemon.ts Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,35 @@
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": "패시브 비활성화",
"locked": "잠김",
"disabled": "비활성",
"uncaught": "미등록",
}

View File

@ -0,0 +1,42 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const tutorial: SimpleTranslationEntries = {
intro: `포켓로그에 오신 것을 환영합니다! 로그라이트 요소가 가미된 전투 중심의 포켓몬 팬게임입니다.
$ Pokémon .
$ .\n .
$ '하드웨어 가속' .`,
accessMenu: `메뉴에 액세스하려면 입력을 기다리는 동안 M 또는 Esc를 누릅니다.\n메뉴에는 설정과 다양한 기능이 포함되어 있습니다.`,
menu: `이 메뉴에서 설정에 액세스할 수 있습니다.
$ , .
$ !`,
starterSelect: `이 화면에서 스타팅을 선택할 수 있습니다.\n이들은 당신의 첫 번째 파티 멤버들입니다.
$ 6 \n 10 .
$ \n , , .
$ ,\n !`,
pokerus: `매일 랜덤 스타팅 세 종류에 보라색 테두리가 쳐집니다.
$ ,\n !`,
statChange: `포켓몬은 교체하지 않으면 다음 전투에서도 능력치 변화가 유지됩니다.
$ .
$C Shift .`,
selectItem: `전투가 끝날때마다 무작위 아이템 3개 중 하나를 선택하여 얻습니다.
$ , , .
$ .
$ .
$ .
$ .
$ , .
$ , .`,
eggGacha: `이 화면에서 포켓몬 알 바우처를\n사용해 뽑기를 할 수 있습니다.
$ .\n .
$ \n .
$ \n .
$ .
$ ,\n !`,
} as const;

View File

@ -8,6 +8,7 @@ import { frConfig } from '#app/locales/fr/config.js';
import { itConfig } from '#app/locales/it/config.js';
import { ptBrConfig } from '#app/locales/pt_BR/config.js';
import { zhCnConfig } from '#app/locales/zh_CN/config.js';
import { koConfig } from '#app/locales/ko/config.js';
export interface SimpleTranslationEntries {
[key: string]: string
@ -35,12 +36,36 @@ export interface Localizable {
localize(): void;
}
const alternativeFonts = {
'ko': [
new FontFace("emerald", "url(./fonts/pokemon-dppt.ttf)")
],
}
function loadFont(language: string) {
Object.keys(alternativeFonts).forEach(l => {
if (language == l) {
alternativeFonts[l].forEach(f=> { document.fonts.add(f); });
}
else {
alternativeFonts[l].forEach(f=> {
if (f && f.status == "loaded") { document.fonts.delete(f); }
});
}
});
}
export function initI18n(): void {
let lang = '';
if (localStorage.getItem('prLang'))
lang = localStorage.getItem('prLang');
loadFont(lang);
i18next.on("languageChanged", lng=> {
loadFont(lng);
});
/**
* i18next is a localization library for maintaining and using translation resources.
*
@ -60,7 +85,7 @@ export function initI18n(): void {
i18next.use(LanguageDetector).init({
lng: lang,
fallbackLng: 'en',
supportedLngs: ['en', 'es', 'fr', 'it', 'de', 'zh_CN','pt_BR'],
supportedLngs: ['en', 'es', 'fr', 'it', 'de', 'pt_BR', 'zh_CN', 'ko'],
debug: true,
interpolation: {
escapeValue: false,
@ -86,6 +111,9 @@ export function initI18n(): void {
},
zh_CN: {
...zhCnConfig
},
ko: {
...koConfig
}
},
});

View File

@ -214,6 +214,10 @@ export function setSetting(scene: BattleScene, setting: Setting, value: integer)
label: '简体中文',
handler: () => changeLocaleHandler('zh_CN')
},
{
label: '한국어',
handler: () => changeLocaleHandler('ko')
},
{
label: 'Cancel',
handler: () => cancelHandler()

View File

@ -613,6 +613,9 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
case 'zh_CN':
instructionTextSize = '42px';
break;
case 'ko':
instructionTextSize = '38px';
break;
}