Update with comments and type safety

This commit is contained in:
neverblde 2024-04-11 20:21:35 -07:00
parent 53d63188d6
commit fb9ac6fd6e
4 changed files with 47 additions and 9 deletions

View File

@ -1,8 +1,13 @@
/**
* The menu namespace holds most miscellaneous text that isn't directly part of the game's
* contents or directly related to Pokemon. This includes menu navigation, settings,
* account interactions, etc.
*/
export const menu = { export const menu = {
"cancel": "Cancel", "cancel": "Cancel",
"continue": "Continue", "continue": "Continue",
"newGame": "New Game",
"loadGame": "Load Game",
"dailyRun": "Daily Run (Beta)", "dailyRun": "Daily Run (Beta)",
"loadGame": "Load Game",
"newGame": "New Game",
"selectGameMode": "Select a game mode." "selectGameMode": "Select a game mode."
} as const; } as const;

8
src/locales/it/menu.ts Normal file
View File

@ -0,0 +1,8 @@
export const menu = {
"cancel": "Annulla",
"continue": "Continua",
"newGame": "Nuova Partita",
"loadGame": "Carica Partita",
"dailyRun": "Corsa Giornaliera (Beta)",
"selectGameMode": "Seleziona una modalità di gioco."
} as const;

View File

@ -57,7 +57,7 @@ import { SaveSlotUiMode } from "./ui/save-slot-select-ui-handler";
import { fetchDailyRunSeed, getDailyRunStarters } from "./data/daily-run"; import { fetchDailyRunSeed, getDailyRunStarters } from "./data/daily-run";
import { GameModes, gameModes } from "./game-mode"; import { GameModes, gameModes } from "./game-mode";
import { getPokemonSpecies, speciesStarters } from "./data/pokemon-species"; import { getPokemonSpecies, speciesStarters } from "./data/pokemon-species";
import { default as i18next, menuNS }from './plugins/i18n'; import i18next from './plugins/i18n';
export class LoginPhase extends Phase { export class LoginPhase extends Phase {
private showText: boolean; private showText: boolean;
@ -174,7 +174,7 @@ export class TitlePhase extends Phase {
const options: OptionSelectItem[] = []; const options: OptionSelectItem[] = [];
if (loggedInUser.lastSessionSlot > -1) { if (loggedInUser.lastSessionSlot > -1) {
options.push({ options.push({
label: i18next.t('continue', {ns: menuNS}), label: i18next.t('menu:continue'),
handler: () => this.loadSaveSlot(this.lastSessionData ? -1 : loggedInUser.lastSessionSlot) handler: () => this.loadSaveSlot(this.lastSessionData ? -1 : loggedInUser.lastSessionSlot)
}); });
} }

View File

@ -1,17 +1,42 @@
import i18next from 'i18next'; import i18next from 'i18next';
import { menu as enMenu } from '../locales/en/menu'; import { menu as enMenu } from '../locales/en/menu';
import { menu as itMenu } from '../locales/it/menu';
export const menuNS = 'menu'; const DEFAULT_LANGUAGE_OVERRIDE = '';
/**
* i18next is a localization library for maintaining and using translation resources.
*
* Q: How do I add a new language?
* A: To add a new language, create a new folder in the locales directory with the language code.
* Each language folder should contain a file for each namespace (ex. menu.ts) with the translations.
*
* Q: How do I add a new namespace?
* A: To add a new namespace, create a new file in each language folder with the translations.
* Then update the `resources` field in the init() call and the CustomTypeOptions interface.
*/
i18next.init({ i18next.init({
lng: 'en', // Default language lng: DEFAULT_LANGUAGE_OVERRIDE ? DEFAULT_LANGUAGE_OVERRIDE : 'en',
fallbackLng: 'en', // Fallback language fallbackLng: 'en',
debug: true, // Enable debug mode (optional) debug: true,
resources: { resources: {
en: { en: {
menu: enMenu, menu: enMenu,
}, },
it: {
menu: itMenu,
}
}, },
}); });
// Module declared to make referencing keys in the localization files type-safe.
declare module 'i18next' {
interface CustomTypeOptions {
resources: {
menu: typeof enMenu;
};
}
}
export default i18next; export default i18next;