mirror of
https://github.com/pagefaultgames/pokerogue.git
synced 2025-07-04 07:22:19 +02:00
Update and format test, i18n.ts and settings.ts
This commit is contained in:
parent
51c8cf6be9
commit
e20305ea2d
@ -107,6 +107,10 @@ export const languages: LanguageType = {
|
|||||||
// "ca-ES": "Català",
|
// "ca-ES": "Català",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const languagesKeys = Object.keys(languages);
|
||||||
|
|
||||||
|
export const languagesLabels = Object.values(languages);
|
||||||
|
|
||||||
export async function initI18n(): Promise<void> {
|
export async function initI18n(): Promise<void> {
|
||||||
// Prevent reinitialization
|
// Prevent reinitialization
|
||||||
if (isInitialized) {
|
if (isInitialized) {
|
||||||
@ -120,7 +124,7 @@ export async function initI18n(): Promise<void> {
|
|||||||
* Q: How do I add a new language?
|
* 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.
|
* 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.
|
* Each language folder should contain a file for each namespace (ex. menu.ts) with the translations.
|
||||||
* Don't forgot declare new language in `languages` const with language code as key and language label as value.
|
* Don't forget to declare new language in `languages` const with language code as key and language label as value.
|
||||||
*
|
*
|
||||||
* Q: How do I add a new namespace?
|
* 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.
|
* A: To add a new namespace, create a new file in each language folder with the translations.
|
||||||
@ -137,8 +141,8 @@ export async function initI18n(): Promise<void> {
|
|||||||
await i18next.init({
|
await i18next.init({
|
||||||
nonExplicitSupportedLngs: true,
|
nonExplicitSupportedLngs: true,
|
||||||
fallbackLng: "en",
|
fallbackLng: "en",
|
||||||
supportedLngs: Object.keys(languages).map((langKey)=>langKey.split("-")[0]).filter((lang, i, a) => {
|
supportedLngs: languagesKeys.map((langKey) => langKey.split("-")[0]).filter((lang, i, a) => {
|
||||||
return (a.findIndex((t) => t === lang) === i);
|
return a.findIndex((t) => t === lang) === i;
|
||||||
}),
|
}),
|
||||||
defaultNS: "menu",
|
defaultNS: "menu",
|
||||||
ns: Object.keys(enConfig),
|
ns: Object.keys(enConfig),
|
||||||
|
@ -8,7 +8,7 @@ import SettingsUiHandler from "#app/ui/settings/settings-ui-handler";
|
|||||||
import { EaseType } from "#enums/ease-type";
|
import { EaseType } from "#enums/ease-type";
|
||||||
import { MoneyFormat } from "#enums/money-format";
|
import { MoneyFormat } from "#enums/money-format";
|
||||||
import { PlayerGender } from "#enums/player-gender";
|
import { PlayerGender } from "#enums/player-gender";
|
||||||
import { getIsInitialized, initI18n, languages } from "#app/plugins/i18n.js";
|
import { getIsInitialized, initI18n, languages, languagesKeys, languagesLabels } from "#app/plugins/i18n.js";
|
||||||
import { ShopCursorTarget } from "#app/enums/shop-cursor-target";
|
import { ShopCursorTarget } from "#app/enums/shop-cursor-target";
|
||||||
|
|
||||||
function getTranslation(key: string): string {
|
function getTranslation(key: string): string {
|
||||||
@ -80,9 +80,6 @@ export interface Setting {
|
|||||||
isHidden?: () => boolean
|
isHidden?: () => boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
// default is English
|
|
||||||
export const currentLanguage = languages[i18next.resolvedLanguage!] ?? "English";
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Setting Keys for existing settings
|
* Setting Keys for existing settings
|
||||||
* to be used when trying to find or update Settings
|
* to be used when trying to find or update Settings
|
||||||
@ -306,8 +303,8 @@ export const Setting: Array<Setting> = [
|
|||||||
* Update to current language or return default value.
|
* Update to current language or return default value.
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
value: currentLanguage,
|
value: languages[i18next.resolvedLanguage!] ?? "English",
|
||||||
label: currentLanguage
|
label: languages[i18next.resolvedLanguage!] ?? "English"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
value: "Change",
|
value: "Change",
|
||||||
@ -811,21 +808,19 @@ export function setSetting(scene: BattleScene, setting: string, value: integer):
|
|||||||
};
|
};
|
||||||
scene.ui.setOverlayMode(Mode.OPTION_SELECT, {
|
scene.ui.setOverlayMode(Mode.OPTION_SELECT, {
|
||||||
options: [
|
options: [
|
||||||
...Object.values(languages)
|
...languagesLabels.map((lang, index) => {
|
||||||
.map((lang, index) => {
|
return {
|
||||||
return {
|
label: lang,
|
||||||
label: lang,
|
handler: () => changeLocaleHandler(languagesKeys[index]),
|
||||||
handler: () => changeLocaleHandler(Object.keys(languages)[index]),
|
};
|
||||||
};
|
}).filter((lang) => {
|
||||||
})
|
// Remove active language.
|
||||||
.filter((lang) => {
|
return languages[i18next.resolvedLanguage!] !== lang.label;
|
||||||
// Remove language active
|
}),
|
||||||
return currentLanguage !== lang.label;
|
|
||||||
}),
|
|
||||||
{
|
{
|
||||||
label: i18next.t("settings:back"),
|
label: i18next.t("settings:back"),
|
||||||
handler: () => cancelHandler(),
|
handler: () => cancelHandler()
|
||||||
},
|
}
|
||||||
],
|
],
|
||||||
maxOptions: 7,
|
maxOptions: 7,
|
||||||
});
|
});
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
import { setSetting, SettingKeys } from "#app/system/settings/settings.js";
|
import { setSetting, SettingKeys } from "#app/system/settings/settings.js";
|
||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
import { expect, describe, it, beforeAll, afterEach, vi } from "vitest";
|
import { expect, describe, it, beforeAll, afterEach, vi, beforeEach } from "vitest";
|
||||||
import GameManager from "../utils/gameManager";
|
import GameManager from "../utils/gameManager";
|
||||||
import OptionSelectUiHandler from "#app/ui/settings/option-select-ui-handler.js";
|
import OptionSelectUiHandler from "#app/ui/settings/option-select-ui-handler.js";
|
||||||
import { Mode } from "#app/ui/ui.js";
|
import { Mode } from "#app/ui/ui.js";
|
||||||
import { languages } from "#app/plugins/i18n.js";
|
import { languages, languagesKeys, languagesLabels } from "#app/plugins/i18n.js";
|
||||||
|
|
||||||
class TestingOptionSelectUiHandler extends OptionSelectUiHandler {
|
class TestingOptionSelectUiHandler extends OptionSelectUiHandler {
|
||||||
public get getOptions() {
|
public get getOptions() {
|
||||||
@ -15,6 +15,7 @@ class TestingOptionSelectUiHandler extends OptionSelectUiHandler {
|
|||||||
describe("Check Languages", () => {
|
describe("Check Languages", () => {
|
||||||
let phaserGame: Phaser.Game;
|
let phaserGame: Phaser.Game;
|
||||||
let game: GameManager;
|
let game: GameManager;
|
||||||
|
let optionSelectUiHandler: TestingOptionSelectUiHandler;
|
||||||
|
|
||||||
beforeAll(async () => {
|
beforeAll(async () => {
|
||||||
phaserGame = new Phaser.Game({
|
phaserGame = new Phaser.Game({
|
||||||
@ -23,21 +24,22 @@ describe("Check Languages", () => {
|
|||||||
game = new GameManager(phaserGame);
|
game = new GameManager(phaserGame);
|
||||||
expect(languages).not.toBe(undefined);
|
expect(languages).not.toBe(undefined);
|
||||||
await game.runToTitle();
|
await game.runToTitle();
|
||||||
|
vi.spyOn(game.scene.ui, "hideTooltip").mockReturnValueOnce();
|
||||||
|
game.scene.ui.handlers[Mode.OPTION_SELECT] = new TestingOptionSelectUiHandler(game.scene);
|
||||||
|
game.scene.ui.handlers[Mode.OPTION_SELECT].setup();
|
||||||
|
});
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
game.setMode(Mode.SETTINGS_DISPLAY);
|
||||||
|
setSetting(game.scene, SettingKeys.Language, 1);
|
||||||
|
optionSelectUiHandler = game.scene.ui.getHandler();
|
||||||
});
|
});
|
||||||
|
|
||||||
afterEach(async () => {
|
afterEach(async () => {
|
||||||
game.phaseInterceptor.restoreOg();
|
game.phaseInterceptor.restoreOg();
|
||||||
});
|
});
|
||||||
|
|
||||||
it("correct structure: { label: string, handler: function}", () => {
|
it("Correct structure is expected: { label: string, handler: function }", () => {
|
||||||
vi.spyOn(game.scene.ui, "hideTooltip").mockReturnValueOnce();
|
|
||||||
game.scene.ui.handlers[Mode.OPTION_SELECT] = new TestingOptionSelectUiHandler(game.scene);
|
|
||||||
game.scene.ui.handlers[Mode.OPTION_SELECT].setup();
|
|
||||||
game.setMode(Mode.SETTINGS_DISPLAY);
|
|
||||||
|
|
||||||
setSetting(game.scene, SettingKeys.Language, 1);
|
|
||||||
const optionSelectUiHandler = game.scene.ui.getHandler() as TestingOptionSelectUiHandler;
|
|
||||||
|
|
||||||
expect(
|
expect(
|
||||||
optionSelectUiHandler.getOptions?.every((option) => {
|
optionSelectUiHandler.getOptions?.every((option) => {
|
||||||
return (
|
return (
|
||||||
@ -48,12 +50,16 @@ describe("Check Languages", () => {
|
|||||||
).toBe(true);
|
).toBe(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
[...Object.values(languages)].map(async (lang, index, array) => {
|
[...languagesLabels].map(async (lang, index, array) => {
|
||||||
return it(`Check ${lang}`, async () => {
|
return it(`Check ${lang}`, async () => {
|
||||||
expect(i18next.resolvedLanguage).toBe(Object.keys(languages)[index]);
|
// Active language should be the current one.
|
||||||
i18next.changeLanguage(
|
expect(i18next.resolvedLanguage).toBe(languagesKeys[index]);
|
||||||
Object.keys(languages)[(index + 1) % array.length]
|
|
||||||
);
|
// Active language should not be among the options.
|
||||||
|
expect(optionSelectUiHandler.getOptions?.some(({ label }) => label === lang)).toBe(false);
|
||||||
|
|
||||||
|
// Change to following language.
|
||||||
|
i18next.changeLanguage(languagesKeys[(index + 1) % array.length]);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user