1use bevy::prelude::*;
2use egui_i18n::*;
3use strum_macros::EnumIter;
4
5#[derive(Reflect, Clone, Copy, Debug, EnumIter, PartialEq, Eq, Default)]
8pub enum Language {
9 #[default]
10 EnCA,
11 JaJP,
12 ZhHans,
13}
14
15impl Language {
16 const ALL: &[Self] = &[Self::EnCA, Self::JaJP, Self::ZhHans];
17 pub fn name(self) -> &'static str {
19 match self {
20 Self::EnCA => "English (Canada)",
21 Self::JaJP => "Japanese",
22 Self::ZhHans => "中文(简体)",
23 }
24 }
25 pub fn identifier(self) -> &'static str {
27 match self {
28 Self::EnCA => "en-CA",
29 Self::JaJP => "ja-JP",
30 Self::ZhHans => "zh-Hans",
31 }
32 }
33 pub fn set(&mut self, identifier: &str) -> bool {
35 for lang in Self::ALL {
36 if identifier != lang.identifier() {
37 continue;
38 }
39 *self = *lang;
40 return true;
41 }
42 false
43 }
44}
45
46pub fn init() {
47 let default_identifier = Language::default().identifier();
48 load_translations_from_text(
50 default_identifier,
51 include_str!("../../paiagram-ui/assets/locales/en-CA.ftl"),
52 )
53 .unwrap();
54 load_translations_from_text(
55 "zh-Hans",
56 include_str!("../../paiagram-ui/assets/locales/zh-Hans.ftl"),
57 )
58 .unwrap();
59 set_language(default_identifier);
60 set_fallback(default_identifier);
61}