Skip to main content

paiagram_core/
i18n.rs

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