Skip to main content

paiagram_core/
i18n.rs

1use bevy::prelude::*;
2use egui_i18n::*;
3use strum_macros::EnumIter;
4
5/// Languages
6/// Sorted alphabetically
7#[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    /// The native name of the language.
18    pub fn name(self) -> &'static str {
19        match self {
20            Self::EnCA => "English (Canada)",
21            Self::JaJP => "Japanese",
22            Self::ZhHans => "中文(简体)",
23        }
24    }
25    /// The identifier of the language.
26    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    /// Set the localization
34    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    // TODO: move these strings
49    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}