Added language setting (#185)
* Added language setting * Allow properly changing language --------- Co-authored-by: Flashfyre <flashfireex@gmail.com>
This commit is contained in:
1 parent
86da18943d
commit
95d2ad2fb4
6 files changed
+112
-41
No files matched your search
+40
-1
@@ -1,13 +1,17 @@
|
||||
import i18next from "i18next";
|
||||
import BattleScene from "../battle-scene";
|
||||
import { hasTouchscreen } from "../touch-controls";
|
||||
import { updateWindowType } from "../ui/ui-theme";
|
||||
import { PlayerGender } from "./game-data";
|
||||
import { Mode } from "#app/ui/ui";
|
||||
import SettingsUiHandler from "#app/ui/settings-ui-handler";
|
||||
|
||||
export enum Setting {
|
||||
Game_Speed = "GAME_SPEED",
|
||||
Master_Volume = "MASTER_VOLUME",
|
||||
BGM_Volume = "BGM_VOLUME",
|
||||
SE_Volume = "SE_VOLUME",
|
||||
Language = "LANGUAGE",
|
||||
Damage_Numbers = "DAMAGE_NUMBERS",
|
||||
UI_Theme = "UI_THEME",
|
||||
Window_Type = "WINDOW_TYPE",
|
||||
@@ -38,6 +42,7 @@ export const settingOptions: SettingOptions = {
|
||||
[Setting.Master_Volume]: new Array(11).fill(null).map((_, i) => i ? (i * 10).toString() : 'Mute'),
|
||||
[Setting.BGM_Volume]: new Array(11).fill(null).map((_, i) => i ? (i * 10).toString() : 'Mute'),
|
||||
[Setting.SE_Volume]: new Array(11).fill(null).map((_, i) => i ? (i * 10).toString() : 'Mute'),
|
||||
[Setting.Language]: [ 'English', 'Change' ],
|
||||
[Setting.Damage_Numbers]: [ 'Off', 'Simple', 'Fancy' ],
|
||||
[Setting.UI_Theme]: [ 'Default', 'Legacy' ],
|
||||
[Setting.Window_Type]: new Array(5).fill(null).map((_, i) => (i + 1).toString()),
|
||||
@@ -60,6 +65,7 @@ export const settingDefaults: SettingDefaults = {
|
||||
[Setting.Master_Volume]: 5,
|
||||
[Setting.BGM_Volume]: 10,
|
||||
[Setting.SE_Volume]: 10,
|
||||
[Setting.Language]: 0,
|
||||
[Setting.Damage_Numbers]: 0,
|
||||
[Setting.UI_Theme]: 0,
|
||||
[Setting.Window_Type]: 0,
|
||||
@@ -77,7 +83,7 @@ export const settingDefaults: SettingDefaults = {
|
||||
[Setting.Vibration]: 0
|
||||
};
|
||||
|
||||
export const reloadSettings: Setting[] = [ Setting.UI_Theme ];
|
||||
export const reloadSettings: Setting[] = [ Setting.UI_Theme, Setting.Language ];
|
||||
|
||||
export function setSetting(scene: BattleScene, setting: Setting, value: integer): boolean {
|
||||
switch (setting) {
|
||||
@@ -151,6 +157,39 @@ export function setSetting(scene: BattleScene, setting: Setting, value: integer)
|
||||
case Setting.Vibration:
|
||||
scene.enableVibration = settingOptions[setting][value] !== 'Disabled' && hasTouchscreen();
|
||||
break;
|
||||
case Setting.Language:
|
||||
if (value) {
|
||||
if (scene.ui) {
|
||||
const cancelHandler = () => {
|
||||
scene.ui.revertMode();
|
||||
(scene.ui.getHandler() as SettingsUiHandler).setOptionCursor(Object.values(Setting).indexOf(Setting.Language), 0, true);
|
||||
};
|
||||
const changeLocaleHandler = (locale: string) => {
|
||||
i18next.changeLanguage(locale);
|
||||
localStorage.setItem('prLang', locale);
|
||||
cancelHandler();
|
||||
scene.reset(true, false, true);
|
||||
};
|
||||
scene.ui.setOverlayMode(Mode.OPTION_SELECT, {
|
||||
options: [
|
||||
{
|
||||
label: 'English',
|
||||
handler: () => changeLocaleHandler('en')
|
||||
},
|
||||
{
|
||||
label: 'French',
|
||||
handler: () => changeLocaleHandler('fr')
|
||||
},
|
||||
{
|
||||
label: 'Cancel',
|
||||
handler: () => cancelHandler()
|
||||
}
|
||||
]
|
||||
});
|
||||
return false;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
Reference in new issue
Block a user