diff --git a/docs/en/05+5-translation.md b/docs/en/05+5-translation.md
index 76f6d4b2..172ea780 100644
--- a/docs/en/05+5-translation.md
+++ b/docs/en/05+5-translation.md
@@ -1,26 +1,92 @@
-# Transalation
+# Translation
-## How to update exists translation
+## Firmware
-1. Edit fw/data/i18n.csv with your favorite text editor. For vscode, extension "Edit csv" is recommended.
-2. Run `fw/scripts/i18n_gen.py` to generate new language files.
-3. Optional: Run `fw/scripts/font_data_gen.sh` to generate new font data if you add new charaters in i18n.csv
-4. Run `make full` rebuild firmware
+## How to update existing translation
+
+When editing CSV files with VSCode, the extension [Edit CSV](https://marketplace.visualstudio.com/items?itemName=janisdd.vscode-edit-csv) is recommended.
+
+**Windows** requires you to have [Python](https://www.python.org/downloads/) and [Git](https://git-scm.com/download/windows) installed and within your `$PATH`
+For **Linux**, most distributions come with `python` and `git` by default and **macOS** comes bundled with `python`, but to use `git` you either need to install the Command Line tools via `xcode-select –-install`, or download [Git](https://git-scm.com/download/mac) separately.
+
+### Windows
-note:
-The script `font_data_gen.sh` only can be run in Git Bash windows in Windows.
+1. Clone this repository
+ `git clone https://github.com/solosky/pixl.js.git; cd pixl.js`
+2. Edit `fw/data/i18n.csv`
+3. Run `py.exe fw/scripts/i18n_gen.py` to generate new language files.
+4. _Optional:_ Run `py.exe fw/scripts/font_data_gen.py` to generate new font data if you add new characters in `i18n.csv`
+5. [Build the Firmware](03-Build-Firmware.md)
+
+### Linux and macOS
+
+1. Clone this repository
+ `git clone https://github.com/solosky/pixl.js.git; cd pixl.js`
+2. Edit `fw/data/i18n.csv`
+3. Run `python3 fw/scripts/i18n_gen.py` to generate new language files.
+4. Optional: Run `python fw/scripts/font_data_gen.py` to generate new font data if you add new characters in `i18n.csv`
+5. [Build the Firmware](03-Build-Firmware.md)
## How to add new language translation
-1. Add new column in fw/data/i18n.csv, for example "ja_JP"
+The process is similar to updating an existing translation, and has the same requirements depending on your Operating System.
+
+1. Add new column in `fw/data/i18n.csv`, for example "ja_JP"
2. Run `fw/scripts/i18n_gen.py` to generate new language files.
-3. Optional: Run `fw/scripts/font_data_gen.sh` to generate new font data if you add new charaters in i18n.csv
+3. Optional: Run `fw/scripts/font_data_gen.py` to generate new font data if you add new characters in `i18n.csv`
4. Edit `fw/application/src/i18n/language.h` and `fw/application/src/i18n/language.c` to adopt new language
5. Edit Makefile to include `$(PROJ_DIR)/i18n/ja_JP.c` as C source files
-6. Run `make full` rebuild firmware
+6. [Build the Firmware](03-Build-Firmware.md)
+
+## Font notes
+
+For release builds (RELEASE=1), the firmware uses wenquanyi_9pt_u8g2.bdf to display unicode characters.
+Please check if the new language character codepoint is included in wenquanyi_9pt_u8g2.bdf or not.
+If not, it's not recommended supporting the new language due to the MCU internal flash restrictions.
+
+## Web App
+
+### How to update existing translation
+
+The language file can be found under `web/src/i18n'
+
+## How to add new language translation
+
+In this example, we will add a Japanese (ja_JP) translation:
+
+1. Copy the `en_US.js` file and name it `ja_JP.js`
+2. Translate the string within `ja_JP.js` including the `changeok` message.
+
+ Don't translate the other language names.
+
+ Add your language at the bottom of the `lang {` section:
+
+ `ja: '日本語',`
+
+3. Edit `index.js` while keeping its current structure, adding:
+
+ ```js
+ import elementJaLocale from 'element-ui/lib/locale/lang/ja' // element-ui
+ lang import jaLocale from './ja_JP' elementJpLocale
+ ```
+
+ And extending `messages`:
+
+ ```js
+ ja_JP: {
+ ...jaLocale,
+ ...elementJaLocale,
+ },
+ ```
+
+4. Add your language to the other `.js` files (within the `lang: {` section):
+
+ `vueja: '日本語',`
-## Font notes
+5. Add your language to the `web/src/App.vue` file:
-For release build (RELEASE=1), the firmware use wenquanyi_9pt_u8g2.bdf to display unicode characters.
-Please check new language charater codepoint is included in wenquanyi_9pt_u8g2.bdf or not.
-If not, I am not recommended to support the new language due to the MCU internal flash restrction.
\ No newline at end of file
+```js
+
+ {{ $t('lang.ja') }}
+
+```
diff --git a/fw/application/src/i18n/de_DE.c b/fw/application/src/i18n/de_DE.c
index 1b62f1b2..d3ea1602 100644
--- a/fw/application/src/i18n/de_DE.c
+++ b/fw/application/src/i18n/de_DE.c
@@ -4,30 +4,30 @@ const char * const lang_de_DE[_L_COUNT] = {
[_L_OFF] = "AUS",
[_L_ON_F] = "[AN]",
[_L_OFF_F] = "[AUS]",
- [_L_BACK] = "[Zurück]",
+ [_L_BACK] = "Zurück",
[_L_ERR] = "Fehler",
[_L_ERR_CODE] = "Fehlercode",
- [_L_APP_AMIIBO] = "Amiibo-Emulator",
+ [_L_APP_AMIIBO] = "Amiibo Emulator",
[_L_APP_AMIIBOLINK] = "AmiiboLink",
- [_L_APP_BLE] = "BLE-Dateitransfer",
- [_L_APP_BLE_TITLE] = "BLE-Dateitransfer",
- [_L_APP_PLAYER] = "Videospieler",
+ [_L_APP_BLE] = "BLE Dateitransfer",
+ [_L_APP_BLE_TITLE] = "BLE Dateitransfer",
+ [_L_APP_PLAYER] = "Videoplayer",
[_L_APP_SET] = "Einstellungen",
[_L_APP_SET_VERSION] = "Version",
[_L_APP_SET_STORAGE_USED] = "Belegt",
- [_L_APP_SET_STORAGE] = "Speicher",
- [_L_APP_SET_OLED_CONTRAST] = "OLED-Kontrast",
- [_L_APP_SET_OLED_CONTRAST_TITLE] = "OLED-Kontrast",
+ [_L_APP_SET_STORAGE] = "Externer Speicher",
+ [_L_APP_SET_OLED_CONTRAST] = "OLED Kontrast",
+ [_L_APP_SET_OLED_CONTRAST_TITLE] = "OLED Kontrast",
[_L_APP_SET_LCD_BACKLIGHT] = "Beleuchtung",
[_L_APP_SET_LCD_BACKLIGHT_TITLE] = "Helligkeit",
- [_L_APP_SET_ANIM] = "Menü-Animation",
- [_L_APP_SET_LIPO_BAT] = "LiPO-Batterie",
+ [_L_APP_SET_ANIM] = "Menü Animation",
+ [_L_APP_SET_LIPO_BAT] = "LiPO Batterie",
[_L_APP_SET_SHOW_MEM_USAGE] = "Speicheranzeige",
- [_L_APP_SET_HIBERNATE] = "Schnell-Wecken",
- [_L_APP_SET_SLEEP_TIMEOUT] = "Schlaf-Timeout",
+ [_L_APP_SET_HIBERNATE] = "Schnelles Aufwachen",
+ [_L_APP_SET_SLEEP_TIMEOUT] = "Standby nach",
[_L_APP_SET_LANGUAGE] = "Sprache",
- [_L_APP_SET_DFU] = "Firmw.-Aktualisierung",
- [_L_APP_SET_REBOOT] = "System-Neustart",
+ [_L_APP_SET_DFU] = "Firmw. Aktualisierung",
+ [_L_APP_SET_REBOOT] = "System Neustart",
[_L_APP_SET_RESET_DEFAULT] = "Standardeinstellungen",
[_L_APP_SET_RESET_DEFAULT_SUCCESS] = "Einstellungen zurückgesetzt!",
[_L_APP_SET_RESET_DEFAULT_CONFIRM] = "Auf Standardeinstellungen zurücksetzen?",
@@ -36,68 +36,68 @@ const char * const lang_de_DE[_L_COUNT] = {
[_L_45S] = "45 Sekunden",
[_L_1MIN] = "1 Minute",
[_L_2MIN] = "2 Minuten",
- [_L_3MIN] = "3 Min",
- [_L_AMIIBO_KEY_UNLOADED] = "Schlüssel nicht gefunden",
- [_L_UPLOAD_KEY_RETAIL_BIN] = "Laden Sie die Datei key_retail.bin in das Stammverzeichnis des Speichers.",
+ [_L_3MIN] = "3 Minuten",
+ [_L_AMIIBO_KEY_UNLOADED] = "Amiibo Schlüssel fehlt",
+ [_L_UPLOAD_KEY_RETAIL_BIN] = "Platzieren Sie die Datei key_retail.bin im Hauptverzeichnis des Speichers.",
[_L_KNOW] = "Verstanden",
- [_L_RANDOM_GENERATION] = "Zufällige Tag-Nummer",
- [_L_AUTO_RANDOM_GENERATION] = "Autom. random.",
- [_L_SHOW_QRCODE] = "QR-Code",
+ [_L_RANDOM_GENERATION] = "Zufällige UUID",
+ [_L_AUTO_RANDOM_GENERATION] = "Zufällige UUID (Automatisch)",
+ [_L_SHOW_QRCODE] = "QR Code",
[_L_DELETE_TAG] = "Tag löschen",
- [_L_DELETE_TAG_CONFIRM] = "Bestätigen Sie das\nLöschen %s?",
- [_L_BACK_TO_DETAILS] = "Zurück zu Tag-Details",
- [_L_BACK_TO_FILE_LIST] = "[Zurück zur Liste]",
- [_L_BACK_TO_MAIN_MENU] = "[Hauptmenü]",
+ [_L_DELETE_TAG_CONFIRM] = "Löschen von %s bestätigen?",
+ [_L_BACK_TO_DETAILS] = "Zurück zu Tag Details",
+ [_L_BACK_TO_FILE_LIST] = "Zurück zur Liste",
+ [_L_BACK_TO_MAIN_MENU] = "Hauptmenü",
[_L_FORMAT] = "Formatieren",
[_L_FORMAT_STORAGE] = "Speicher formatieren",
[_L_DELETE_ALL_DATA] = "Alle Daten löschen?",
- [_L_DELETING_MESSAGE] = "Formatierung..",
- [_L_MESSAGE] = "Nachricht",
+ [_L_DELETING_MESSAGE] = "Formatiere..",
+ [_L_MESSAGE] = "Meldung",
[_L_CONFIRM] = "Bestätigen",
[_L_CANCEL] = "Abbrechen",
- [_L_BACK_TO_LIST] = "[Zurück zur Liste]",
- [_L_NOT_MOUNTED] = "Speicher nicht ausgerüstet",
+ [_L_BACK_TO_LIST] = "Zurück zur Liste",
+ [_L_NOT_MOUNTED] = "Speicher nicht eingebunden",
[_L_MOUNTED_LFS] = "===Speicher [LFS]===",
[_L_MOUNTED_FFS] = "===Speicher [FFS]===",
[_L_TOTAL_SPACE] = "Gesamt",
[_L_AVAILABLE_SPACE] = "Frei",
- [_L_NOT_AMIIBO_FILE] = "Dies ist keine Amiibo-Datei",
+ [_L_NOT_AMIIBO_FILE] = "Keine Amiibo Datei",
[_L_READ_FILE_FAILED] = "Lesen fehlgeschlagen",
[_L_INPUT_FOLDER_NAME] = "Ordnername eingeben:",
- [_L_INPUT_AMIIBO_NAME] = "Amiibo-Name eingeben:",
+ [_L_INPUT_AMIIBO_NAME] = "Amiibo Namen eingeben:",
[_L_DELETE] = "Löschen",
[_L_INPUT_NEW_NAME] = "Neuen Namen eingeben:",
[_L_INVALID_INPUT] = "Ungültige Eingabe",
[_L_CREATE_NEW_FOLDER] = "Neuer Ordner..",
[_L_CREATE_NEW_TAG] = "Neuer Tag..",
- [_L_CREATE_NEW_TAG_BATCH] = "Mehrere Tags..",
- [_L_INPUT_TAG_NUM] = "Tag-Anzahl eingeben:",
- [_L_CREATE_TOO_MANY_NUM] = "Nur maximal %d Tags in einem Stapel erstellt.",
+ [_L_CREATE_NEW_TAG_BATCH] = "Mehrere Tags erstellen..",
+ [_L_INPUT_TAG_NUM] = "Tag Anzahl eingeben:",
+ [_L_CREATE_TOO_MANY_NUM] = "Sie können nur maximal %d Tags auf einmal erstellen.",
[_L_CREATING_TAG_BATCH] = "Tag erstellen",
[_L_CREATING_TAG_FAILED] = "Erstellen von Tag %s fehlgeschlagen!",
[_L_RENAME] = "Umbenennen",
[_L_OPEN_FOLDER_FAILED] = "Ordner konnte nicht geöffnet werden",
[_L_RENAME_FAILED] = "Umbenennen fehlgeschlagen\nFehlercode",
[_L_MAIN_RETURN] = "[Zurück]",
- [_L_RANDOM_MODE_MANUAL] = "Zufällig (Manuell)",
- [_L_RANDOM_MODE_AUTO] = "Zufällig (Automatisch)",
+ [_L_RANDOM_MODE_MANUAL] = "Zufällige UUID (Manuell)",
+ [_L_RANDOM_MODE_AUTO] = "Zufällige UUID (Automatisch)",
[_L_SEQUENCE_MODE] = "Sequentieller Modus",
- [_L_READ_WRITE_MODE] = "Lese-Schreib-Modus",
+ [_L_READ_WRITE_MODE] = "Lese-Schreibmodus",
[_L_AMIIBOLINK_V1] = "V1",
[_L_AMIIBOLINK_V2] = "V2",
[_L_AMILOOP] = "AmiLoop",
[_L_MODE] = "Modus",
- [_L_AUTO_RANDOM] = "Autom. randomisieren",
- [_L_COMPATIBLE_MODE] = "Kompat. Modus",
+ [_L_AUTO_RANDOM] = "Zufällige UUID (Automatisch)",
+ [_L_COMPATIBLE_MODE] = "Kompabilitäts Modus",
[_L_TAG_DETAILS] = "[Zurück zu Details]",
[_L_MAIN_MENU] = "[Hauptmenü]",
- [_L_MODE_RANDOM] = "Manuell",
+ [_L_MODE_RANDOM] = "Zufällige UUID (Manuell)",
[_L_MODE_CYCLE] = "Sequentiell",
- [_L_MODE_NTAG] = "Lese/Schreib",
- [_L_MODE_RANDOM_AUTO_GEN] = "Automatisch",
- [_L_BLANK_TAG] = "Leerer NFC-Tag",
- [_L_APP_AMIIDB] = "Amiibo-Datenbank",
- [_L_APP_AMMIDB_BROWSER] = "Browser..",
+ [_L_MODE_NTAG] = "Lesen/Schreiben",
+ [_L_MODE_RANDOM_AUTO_GEN] = "Zufällig (Auto.)",
+ [_L_BLANK_TAG] = "Leerer NFC Tag",
+ [_L_APP_AMIIDB] = "Amiibo Datenbank",
+ [_L_APP_AMMIDB_BROWSER] = "Navigieren..",
[_L_APP_AMIIDB_SEARCH] = "Suche..",
[_L_APP_AMIIDB_MY_FAVORITES] = "Meine Favoriten..",
[_L_APP_AMIIDB_MY_TAGS] = "Meine Amiibo..",
@@ -106,8 +106,8 @@ const char * const lang_de_DE[_L_COUNT] = {
[_L_APP_AMIIDB_BACK] = "[Zurück]",
[_L_APP_AMIIDB_SETTINGS_AMIIBO_KEY] = "Schlüssel",
[_L_APP_AMIIDB_SETTINGS_AMIIBO_KEY_LOADED] = "geladen",
- [_L_APP_AMIIDB_SETTINGS_AMIIBO_KEY_NOT_LOADED] = "fehlend",
- [_L_APP_AMIIDB_SETTINGS_SLOT_NUM] = "Steckplatznummer",
+ [_L_APP_AMIIDB_SETTINGS_AMIIBO_KEY_NOT_LOADED] = "NICHT geladen",
+ [_L_APP_AMIIDB_SETTINGS_SLOT_NUM] = "Steckplatzanzahl",
[_L_APP_AMIIDB_DETAIL_FAVORITE] = "Favorit..",
[_L_APP_AMIIDB_DETAIL_SAVE_AS] = "Speichern unter..",
[_L_APP_AMIIDB_DETAIL_BACK_DETAIL] = "[Zurück zu Details]",
@@ -122,15 +122,15 @@ const char * const lang_de_DE[_L_COUNT] = {
[_L_APP_AMIIDB_NEW] = "Neu..",
[_L_APP_AMIIDB_EMPTY] = "Leeren..",
[_L_APP_AMIIDB_DELETE] = "Löschen..",
- [_L_APP_AMIIDB_FAV_NEW_HEAD] = "Neuer Favoriten-Ordner:",
- [_L_APP_AMIIDB_FAV_EMPTY_MSG] = "Favoritenordner leeren?",
- [_L_APP_AMIIDB_FAV_DELETE_MSG] = "Favoritenordner löschen?",
+ [_L_APP_AMIIDB_FAV_NEW_HEAD] = "Neuer Fav.-Ordner:",
+ [_L_APP_AMIIDB_FAV_EMPTY_MSG] = "Fav.-Ordner leeren?",
+ [_L_APP_AMIIDB_FAV_DELETE_MSG] = "Löschen Bestätigen?",
[_L_APP_AMIIDB_FAV_SELECT_FOLDER] = "Fav.-Ordner auswählen..",
[_L_APP_AMIIDB_FAV_SUCCESS] = "Favorit erstellt ",
- [_L_APP_AMIIDB_FAV_FAILED] = "Favorit fehlgeschlagen!",
+ [_L_APP_AMIIDB_FAV_FAILED] = "Favorisieren fehlgeschlagen!",
[_L_APP_AMIIDB_SLOT_SAVE_SUCCESS] = "Speichern erfolgreich",
[_L_APP_AMIIDB_SLOT_SAVE_FAILED] = "Speichern fehlgeschlagen!",
- [_L_APP_CHAMELEON] = "Karten-Emulator",
+ [_L_APP_CHAMELEON] = "Karten Emulator",
[_L_APP_CHAMELEON_TAG_MF1_WRITE_NORMAL] = "Normal",
[_L_APP_CHAMELEON_TAG_MF1_WRITE_DENIED] = "Verweigern",
[_L_APP_CHAMELEON_TAG_MF1_WRITE_DECEIVE] = "Ignorieren",
@@ -142,25 +142,25 @@ const char * const lang_de_DE[_L_COUNT] = {
[_L_APP_CHAMELEON_CARD_TYPE] = "Typ",
[_L_APP_CHAMELEON_CARD_DATA] = "Daten..",
[_L_APP_CHAMELEON_CARD_ADVANCED] = "Erweitert..",
- [_L_APP_CHAMELEON_CARD_SLOT_SETTINGS] = "Steckplätze..",
- [_L_APP_CHAMELEON_CARD_SLOT_NUM] = "Steckplätze",
- [_L_APP_CHAMELEON_CARD_SET_NICK_SUCCESS] = "Spitzname erfolgreich",
- [_L_APP_CHAMELEON_CARD_SET_NICK_FAILED] = "Spitzname fehlgeschlagen!",
- [_L_APP_CHAMELEON_CARD_INPUT_NICK] = "Spitzname eingeben:",
+ [_L_APP_CHAMELEON_CARD_SLOT_SETTINGS] = "Steckplatz Einstellungen..",
+ [_L_APP_CHAMELEON_CARD_SLOT_NUM] = "Steckplatz Nummer",
+ [_L_APP_CHAMELEON_CARD_SET_NICK_SUCCESS] = "Spitzname erfolgreich gesetzt",
+ [_L_APP_CHAMELEON_CARD_SET_NICK_FAILED] = "Spitzname setzen fehlgeschlagen!",
+ [_L_APP_CHAMELEON_CARD_INPUT_NICK] = "Spitznamen eingeben:",
[_L_APP_CHAMELEON_CARD_DATA_LOAD] = "Laden..",
[_L_APP_CHAMELEON_CARD_DATA_SAVE] = "Speichern..",
[_L_APP_CHAMELEON_CARD_DATA_FACTORY] = "Zurücksetzen..",
[_L_APP_CHAMELEON_CARD_DATA_FACTORY_SUCCESS] = "Daten zurückgesetzt",
[_L_APP_CHAMELEON_CARD_DATA_LOAD_NOT_FOUND] = "Datei nicht gefunden",
- [_L_APP_CHAMELEON_CARD_DATA_LOAD_SIZE_NOT_MATCH] = "Dateigröße inkorrekt",
- [_L_APP_CHAMELEON_CARD_DATA_LOAD_FAILED] = "Laden fehlgeschlagen",
- [_L_APP_CHAMELEON_CARD_DATA_LOAD_SUCCESS] = "Laden erfolgreich",
- [_L_APP_CHAMELEON_CARD_DATA_SAVE_INPUT_FILE_NAME] = "Dateinamen eingeben:",
- [_L_APP_CHAMELEON_CARD_DATA_SAVE_FAILED] = "Speichern fehlgeschlagen!",
- [_L_APP_CHAMELEON_CARD_DATA_SAVE_SUCCESS] = "Speichern erfolgreich",
- [_L_APP_CHAMELEON_CARD_ADV_CUSTOM_MODE] = "Benutzermodus",
+ [_L_APP_CHAMELEON_CARD_DATA_LOAD_SIZE_NOT_MATCH] = "Dateigröße stimmt nicht überein",
+ [_L_APP_CHAMELEON_CARD_DATA_LOAD_FAILED] = "Laden der Datei fehlgeschlagen",
+ [_L_APP_CHAMELEON_CARD_DATA_LOAD_SUCCESS] = "Datei erfolgreich geladen",
+ [_L_APP_CHAMELEON_CARD_DATA_SAVE_INPUT_FILE_NAME] = "Datei Namen eingeben:",
+ [_L_APP_CHAMELEON_CARD_DATA_SAVE_FAILED] = "Datei speichern fehlgeschlagen!",
+ [_L_APP_CHAMELEON_CARD_DATA_SAVE_SUCCESS] = "Datei erfolgreich gespeichert",
+ [_L_APP_CHAMELEON_CARD_ADV_CUSTOM_MODE] = "Benutzerdefinierter Modus",
[_L_APP_CHAMELEON_CARD_GEN1A_MODE] = "Gen1A aktiv",
- [_L_APP_CHAMELEON_CARD_GENERATE_UID] = "Randomisierte UID",
+ [_L_APP_CHAMELEON_CARD_GENERATE_UID] = "Zufällige UID",
[_L_APP_CHAMELEON_CARD_GENERATE_UID_SUCCESS] = "UID generiert",
[_L_APP_CHAMELEON_CARD_GEN2_MODE] = "Gen2 aktiv",
[_L_APP_CHAMELEON_CARD_WRITE_MODE] = "Schreibmodus",
diff --git a/fw/application/src/i18n/fr_FR.c b/fw/application/src/i18n/fr_FR.c
index 34188da9..170c4c56 100644
--- a/fw/application/src/i18n/fr_FR.c
+++ b/fw/application/src/i18n/fr_FR.c
@@ -134,7 +134,7 @@ const char * const lang_fr_FR[_L_COUNT] = {
[_L_APP_CHAMELEON_TAG_MF1_WRITE_NORMAL] = "Normal",
[_L_APP_CHAMELEON_TAG_MF1_WRITE_DENIED] = "Refuser",
[_L_APP_CHAMELEON_TAG_MF1_WRITE_DECEIVE] = "Ignorer",
- [_L_APP_CHAMELEON_TAG_MF1_WRITE_SHADOW] = "Zwischenspeicher",
+ [_L_APP_CHAMELEON_TAG_MF1_WRITE_SHADOW] = "Cache",
[_L_APP_CHAMELEON_INITIALIZING] = "Initialisation des données ..",
[_L_APP_CHAMELEON_CARD_SLOT] = "Fente",
[_L_APP_CHAMELEON_CARD_NICK] = "Pseudo",
diff --git a/fw/application/src/mui/u8g2_font_wqy12_t_gb2312a.c b/fw/application/src/mui/u8g2_font_wqy12_t_gb2312a.c
index 5d8e7a1d..edcbff38 100644
--- a/fw/application/src/mui/u8g2_font_wqy12_t_gb2312a.c
+++ b/fw/application/src/mui/u8g2_font_wqy12_t_gb2312a.c
@@ -1250,4 +1250,4 @@ const uint8_t u8g2_font_wqy12_t_gb2312a[39601] U8G2_FONT_SECTION("u8g2_font_wqy1
"<\311\360\22U\243\4\377\10\15\303\177\134I\224D\275EY\0\377\11\15\303{\34Y\224E\275DI"
"\4\377\21\12\244{\134Y\262\365i\377\32\11r\236\34C<\4\377\37\20\266|,<空标签>,<空標簽>,,<Üres Amiibo>,,,,,,
-_L_APP_AMIIDB_SLOT_DELETE,Reset..,重置..,重置..,Borrar..,Újraindítás..,Zurücksetzen..,Réinitialiser..,Reset..,Reiniciar..,リセット..,Elimina..
-_L_APP_AMIIDB_CONFIRM,Confirm,确认,確認,Confirmar,Megerősítés,Bestätigen,Confirmer,Bevestigen,Confirmar,確認する,Conferma
-_L_APP_AMIIDB_CANCEL,Cancel,取消,取消,Cancelar,Törlés,Abbrechen,Annuler,Annuleren,Cancelar,キャンセルする,Annulla
-_L_APP_AMIIDB_TIPS,Confirm,提示,提示,Confirmar,Megerősítés,Bestätigen,Confirmer,Bevestigen,Confirmar,確認する,Conferma
-_L_APP_AMIIDB_NEW,New..,新建..,新建..,Nueva..,Új..,Neu..,Nouveau..,Nieuw..,Novo..,新規..,Nuovo..
-_L_APP_AMIIDB_EMPTY,Empty..,清空..,清空..,Vaciar..,Üres..,Leeren..,Vider..,Leeg..,Vazio..,空..,Svuota..
-_L_APP_AMIIDB_DELETE,Delete..,删除..,删除..,Borrar..,Törlés..,Löschen..,Supprimer..,Verwijderen..,Excluir..,削除..,Cancella..
-_L_APP_AMIIDB_FAV_NEW_HEAD,New Fav. Folder:,新建收藏夹:,新建收藏夾:,Nueva Carp. Favoritos:,Új Kedvenc Mappa:,Neuer Favoriten-Ordner:,Nouveau Dossier Favori:,Nieuwe Favoriete Map:,Nova Pasta de Favoritos:,新しいお気に入りフォルダ:,Nuova cart. preferiti:
-_L_APP_AMIIDB_FAV_EMPTY_MSG,Empty Fav. Folder?,确认清空收藏夹?,確認清空收藏夾?,¿Vaciar Carp. Favoritos?,Üres Kedvenc Mappa?,Favoritenordner leeren?,Vider le Dossier Favori?,Favoriete Map Leegmaken?,Esvaziar Pasta de Favoritos?,お気に入りフォルダを空にしますか?,Svuotare cart. preferiti?
-_L_APP_AMIIDB_FAV_DELETE_MSG,Confirm Delete?,确认删除?,確認刪除?,¿Confirma borrado?,Törlés Megerősítése?,Favoritenordner löschen?,Confirmer la Suppression?,Verwijderen Bevestigen?,Confirmar Exclusão?,削除してよろしいですか?,Conferma cancellazione?
-_L_APP_AMIIDB_FAV_SELECT_FOLDER,Select Fav. Folder..,选择收藏夹..,選擇收藏夾..,Selec. carp. favoritos..,Kedvenc Mappa Kiválasztása..,Fav.-Ordner auswählen..,Sélectionner le Dossier Favori..,Selecteer Favoriete Map..,Selecionar Pasta Favorita..,お気に入りフォルダを選択..,Selez. cart. preferiti..
-_L_APP_AMIIDB_FAV_SUCCESS,Favorite Success,收藏成功,收藏成功,¡Favorito correcto!,Kedvenc Sikeres,"Favorit erstellt ",Succès du Favori,Favoriet Geslaagd,Favorito Bem-Sucedido,お気に入りに追加されました,Preferito aggiunto!
-_L_APP_AMIIDB_FAV_FAILED,Favorite Failed!,收藏失败,收藏失敗,¡Favorito fallido!,Kedvenc Sikertelen!,Favorit fehlgeschlagen!,Échec du Favori!,Favoriet Mislukt!,Favorito Falhou!,お気に入りに追加できませんでした!,Preferito non aggiunto!
-_L_APP_AMIIDB_SLOT_SAVE_SUCCESS,Save Success,保存成功,保存成功,Asignación correcta,Sikeresen Mentve,Speichern erfolgreich,Sauvegarder Succès,Opslaan Succes,Salvar Com Êxito,保存されました,Assegnazione corretta
-_L_APP_AMIIDB_SLOT_SAVE_FAILED,Save Failed!,保存失败,保存失敗,¡Asignación fallida!,Mentés Sikertelen!,Speichern fehlgeschlagen!,Sauvegarde Échouée!,Opslaan Mislukt!,Falha ao Salvar!,保存に失敗しました!,Assegnazione fallita!
-_L_APP_CHAMELEON,Card Emulator,卡模拟器,卡模擬器,Emular Etiqueta RFID,Kártya Emulátor,Karten-Emulator,Emulateur de Carte,Kaart Emulator,Emulador de Cartão,カードエミュレータ,Emula tag RFID
-_L_APP_CHAMELEON_TAG_MF1_WRITE_NORMAL,Normal,正常,正常,Normal,Normál,Normal,Normal,Normaal,Normal,通常,Normale
-_L_APP_CHAMELEON_TAG_MF1_WRITE_DENIED,Deny,拒绝,拒絕,Negar,Tagadni,Verweigern,Refuser,Weigeren,Negar,拒否,Nega
-_L_APP_CHAMELEON_TAG_MF1_WRITE_DECEIVE,Ignore,忽略,忽略,Ignorar,Figyelmen Kívül Hagyni,Ignorieren,Ignorer,Negeren,Ignorar,無視,Ignora
-_L_APP_CHAMELEON_TAG_MF1_WRITE_SHADOW,Cache,缓存,緩存,Caché,Elrejt,Cache,Zwischenspeicher,Cache,Cache,キャッシュ,Cache
-_L_APP_CHAMELEON_INITIALIZING,Initializing data ..,"初始化, 请稍后..","初始化, 請稍後..",Inicializando ambiente.\nPor favor espere..,Az adatok inicializálása ..,Daten initialisieren..,Initialisation des données ..,Gegevens Initialiseren ..,Inicialização de Dados ..,データの初期化 ..,Inizializzazione ambiente.\nPer favore attendi..
-_L_APP_CHAMELEON_CARD_SLOT,Slot,卡槽,卡槽,Ranura,Cella,Steckplatz,Fente,Slot,Slot,スロット,Slot
-_L_APP_CHAMELEON_CARD_NICK,Nick,卡名,卡名,Apodo,Becenév,Spitzname,Pseudo,Bijnaam,Apelido,ニックネーム,Nickname
-_L_APP_CHAMELEON_CARD_ID,ID,ID,ID,ID,ID,ID,ID,ID,ID,ID,ID
-_L_APP_CHAMELEON_CARD_TYPE,Type,卡类型,卡類型,Tipo,Típus,Typ,Type de Données,Type,Tipo de Dados,タイプ,Tipo
-_L_APP_CHAMELEON_CARD_DATA,Data..,卡数据..,卡數據..,Datos..,Adatok..,Daten..,Données..,Gegevens..,Dados..,データ..,Dati..
-_L_APP_CHAMELEON_CARD_ADVANCED,Advanced..,卡高级设置..,卡高級設置..,Avanzado..,Fejlett..,Erweitert..,Avancé..,Geavanceerd..,Avançado..,詳細設定..,Avanzato..
-_L_APP_CHAMELEON_CARD_SLOT_SETTINGS,Slots Settings..,卡槽管理..,卡槽管理..,Configuración..,Cella Beállításai..,Steckplätze..,Paramètres des Emplacements..,Slot Instellingen..,Configurações de Slots..,スロット設定..,Impostazioni..
-_L_APP_CHAMELEON_CARD_SLOT_NUM,Slot Num..,卡槽数量..,卡槽數量..,Cant. ranuras..,Cella Száma..,Steckplätze,Numéro d'Emplacement..,Slotnummer..,Número do Slot..,スロット番号..,Num. slot..
-_L_APP_CHAMELEON_CARD_SET_NICK_SUCCESS,Set Nick Success,设置卡名成功,設置卡名成功,Apodo cambiado.,Becenév Beállítása Sikeres,Spitzname erfolgreich,Définir le Pseudo Succès,Bijnaam Instellen Succes,Apelido Definido com Sucesso,ニックネームが設定されました,Cambio nickname riuscito.
-_L_APP_CHAMELEON_CARD_SET_NICK_FAILED,Set Nick Failed!,设置卡名失败,設置卡名失敗,¡Falló cambio apodo!,Becenév Beállítása Sikertelen!,Spitzname fehlgeschlagen!,Définir le Pseudo a Échoué!,Bijnaam Instellen Mislukt!,Falha ao Definir Apelido!,ニックネームが設定できませんでした!,Cambio nickname fallito!
-_L_APP_CHAMELEON_CARD_INPUT_NICK,Input Nick:,输入卡名:,輸入卡名:,Apodo:,Becenév Bevitele:,Spitzname eingeben:,Entrer le Pseudo:,Voer Bijnaam In:,Insira o Apelido:,ニックネームを入力してください:,Nickname:
-_L_APP_CHAMELEON_CARD_DATA_LOAD,Load..,加载..,加載..,Cargar..,Betöltés..,Laden..,Charger..,Laden..,Carregar..,ロード..,Carica..
-_L_APP_CHAMELEON_CARD_DATA_SAVE,Save..,导出..,導出..,Guardar..,Mentés..,Speichern..,Sauvegarder..,Opslaan..,Salvar..,保存..,Salva..
-_L_APP_CHAMELEON_CARD_DATA_FACTORY,Factory..,重置..,重置..,Inicializar..,Visszaállítás..,Zurücksetzen..,Rétablir Les Valeurs Par Défaut..,Terugzetten Naar Standaard..,Restaurar Padrões..,初期化..,Inizializza..
-_L_APP_CHAMELEON_CARD_DATA_FACTORY_SUCCESS,Data Factory Success,卡片初始化成功,卡片初始化成功,¡Datos inicializados!,Adatok Visszaállítása Sikeres,Daten zurückgesetzt,Réinitialisation des Données Succès,Fabriekgegeven terugzetten Succesvol,Restauração de Dados Bem-Sucedida,初期化成功,Dati inizializzati!
-_L_APP_CHAMELEON_CARD_DATA_LOAD_NOT_FOUND,File Not Found,文件不存在,文件不存在,Archivo no encontrado,Fájl Nem Található,Datei nicht gefunden,Fichier Non Trouvé,Bestand Niet Gevonden,Arquivo Não Encontrado,ファイルが見つかりません,File non trovato
-_L_APP_CHAMELEON_CARD_DATA_LOAD_SIZE_NOT_MATCH,File Size Not Match,文件大小不匹配,文件大小不匹配,Tamaño archivo incorrecto,Fájl Mérete Nem Egyezik,Dateigröße inkorrekt,La Taille du Fichier ne Correspond Pas,Bestandsgrootte Komt Niet Overeen,Tamanho do Arquivo Não Corresponde,ファイルサイズが一致しません,Dimensione file non corretta
-_L_APP_CHAMELEON_CARD_DATA_LOAD_FAILED,Load File Failed,读取文件失败,讀取文件失敗,Falla carga archivo,Fájl betöltése Sikertelen,Laden fehlgeschlagen,Échec du Chargement du Fichier,Bestand Laden Mislukt,Falha no Carregamento do Arquivo,ファイルの読み込み失敗,Caricamento file fallito
-_L_APP_CHAMELEON_CARD_DATA_LOAD_SUCCESS,Load File Success,加载卡片数据成功,加載卡片數據成功,Carga archivo correcta,Fájl Betöltése Sikeres,Laden erfolgreich,Chargement du Fichier Réussi,Laad Bestand Succesvol,Sucesso no Carregamento do Arquivo,ファイルの読み込みに成功,Caricamento file riuscito
-_L_APP_CHAMELEON_CARD_DATA_SAVE_INPUT_FILE_NAME,Input File Name:,输入文件名,輸入文件名,Nombre archivo:,Bemeneti Fájl Neve:,Dateinamen eingeben:,Saisir le Nom du Fichier:,Bestandsnaam Invoeren:,Nome do Arquivo de Entrada:,入力ファイル名:,Nome file:
-_L_APP_CHAMELEON_CARD_DATA_SAVE_FAILED,Save File Failed!,写入文件失败,寫入文件失敗,¡Error al guardar!,Fájl Mentése Sikertelen!,Speichern fehlgeschlagen!,Échec de l'Enregistrement du Fichier!,Bestand Opslaan Mislukt!,Falha ao Salvar o Arquivo!,ファイルの保存に失敗しました!,Errore nel salvataggio!
-_L_APP_CHAMELEON_CARD_DATA_SAVE_SUCCESS,Save File Success,导出卡片数据成功,導出卡片數據成功,Guardado correcto,Fájl Mentése Sikeres,Speichern erfolgreich,Sauvegarde du Fichier Réussie,Bestand Opslaan Gelukt,Arquivo Salvo com êxito,ファイルが保存されました,Salvataggio riuscito
-_L_APP_CHAMELEON_CARD_ADV_CUSTOM_MODE,Custom Mode,自定义模式,自定義模式,Modo personali.,Egyéni Mód,Benutzermodus,Mode Personnalisé,Aangepaste Modus,Modo Personalizado,カスタムモード,Modalità personalizzata
-_L_APP_CHAMELEON_CARD_GEN1A_MODE,Gen1A Enabled,Gen1A模式,Gen1A模式,Gen1A habilitada,Gen1A Engedélyezve,Gen1A aktiv,Gen1A Activé,Gen1A Ingeschakeld,Gen1A Ativada,Gen1A 有効,Gen1A abilitata
-_L_APP_CHAMELEON_CARD_GENERATE_UID,Rand. UID,生成UID,生成UID,Generar nuevo UID,Véletlen UID,Randomisierte UID,Randomiser l'UID,Willekeurige UID,UID Aleatório,UIDのランダム化,Genera nuovo UID
-_L_APP_CHAMELEON_CARD_GENERATE_UID_SUCCESS,UID Generated,UID已生成,UID已生成,UID generado,Generált UID,UID generiert,UID Généré,UID Gegenereerd,UID Gerado,UID 生成,UID generato
-_L_APP_CHAMELEON_CARD_GEN2_MODE,Gen2 Enabled,Gen2模式,Gen2模式,Gen2 habilitada,Gen2 Engedélyezve,Gen2 aktiv,Gen2 Activé,Gen2 Ingeschakeld,Gen2 Ativado,Gen2 有効,Gen2 abilitata
-_L_APP_CHAMELEON_CARD_WRITE_MODE,Write Mode,写入模式,寫入模式,Modo escrit.,Írási Mód,Schreibmodus,Mode d'Écriture,Schrijfmodus,Modo de Gravação,書き込みモード,Modalità scrittura
-_L_APP_CHAMELEON_CARD_ADV_ID_EDIT_INVALID_INPUT,Invalid Input!,无效的输入!,無效的輸入!,¡Entrada inválida!,Érvénytelen bemenet!,Ungültige Eingabe!,Entrée Invalide!,Ongeldige Invoer!,Entrada Inválida!,無効な入力,Input non valido!
-_L_APP_CHAMELEON_CARD_TYPE_FACTORY_DATA_CONFRIM,Card type changed. \nFactory card data?,卡类型已修改\n重置卡数据?,卡類型已修改\n重置卡數據?,Tipo tarjeta modificado\n¿Inicializar tarjeta?,A kártya típusa megváltozott.\nGyári kártyaadatok?,Kartentyp geändert. \nKartendaten zurücksetzen?,Le Type de Carte a Été Modifié. \nRéinitialiser les Données de la Carte?,Kaarttype gewijzigd. \nGegevens terugzetten naar standaard?,O tipo de cartão foi alterado. \nRedefinir dados do cartão?,カードの種類が変更されました。\nカードデータを初期化しますか?,Tipo di carta modificato\nInizializzare carta?
\ No newline at end of file
+CODE,en_US,zh_Hans,zh_TW,es_ES,hu_HU,de_DE,fr_FR,nl_NL,pt_BR,ja_JP,it_IT
+_L_ON,ON,开,開,SI,BE,AN,ACTIVÉ,AAN,LIGADO,オン,SI
+_L_OFF,OFF,关,關,NO,KI,AUS,DÉSACTIVÉ,UIT,DESLIGADO,オフ,NO
+_L_ON_F,[ON],[开],[開],[SI],[BE],[AN],[ACTIVÉ],[AAN],[LIGADO],[オン],[SI]
+_L_OFF_F,[OFF],[关],[關],[NO],[KI],[AUS],[DÉSACTIVÉ],[UIT],[DESLIGADO],[オフ],[NO]
+_L_BACK,Back,返回,返回,[Atrás],Vissza,Zurück,Retour,Terug,Voltar,戻る,Indietro
+_L_ERR,Error,错误,錯誤,Error,Hiba,Fehler,Erreur,Fout,Erro,エラー,Errore
+_L_ERR_CODE,Error Code,错误码,錯誤碼,Código error,Hibakód,Fehlercode,Code d'Erreur,Foutcode,Código de Erro,エラーコード,Codice errore
+_L_APP_AMIIBO,Amiibo Emulator,Amiibo模拟器,Amiibo模擬器,Emulador de amiibo,Amiibo Emulátor,Amiibo Emulator,Emulateur Amiibo,Amiibo-Emulator,Emulador de Amiibo,Amiiboエミュレータ,Emulatore Amiibo
+_L_APP_AMIIBOLINK,AmiiboLink,AmiiboLink,AmiiboLink,AmiiboLink,AmiiboLink,AmiiboLink,AmiiboLink,AmiiboLink,AmiiboLink,AmiiboLink,AmiiboLink
+_L_APP_BLE,BLE File Transfer,蓝牙传输,藍牙傳送,Transferencia BLE,BLE Fájltovábbítás,BLE Dateitransfer,Transfert de Fichiers BLE,BLE Bestandsoverdracht,Transferência de Arquivos BLE,BLEファイル転送,Trasferimento file BLE
+_L_APP_BLE_TITLE,BLE File Transfer,蓝牙传输,藍牙傳送,Transferencia BLE,BLE Fájltovábbítás,BLE Dateitransfer,Transfert de Fichiers BLE,BLE Bestandsoverdracht,Transferência de Arquivos BLE,BLEファイル転送,Trasferimento file BLE
+_L_APP_PLAYER,Video Player,动画播放器,動畫播放器,Reproductor vídeo,Video Lejátszó,Videoplayer,Lecteur Vidéo,Videospeler,Reprodutor de Vídeo,ビデオプレーヤー,Lettore video
+_L_APP_SET,Settings,系统设置,系統設定,Configuraciones,Beállítások,Einstellungen,Paramètres,Instellingen,Configurações,設定,Impostazioni
+_L_APP_SET_VERSION,Version,版本,版本,Versión,Verzió,Version,Version,Versie,Versão,バージョン,Versione
+_L_APP_SET_STORAGE_USED,Used,已用,已用,Usado,Használt,Belegt,Utilisé,Gebruikt,Usado,使用ストレージ,Usato
+_L_APP_SET_STORAGE,External Storage,外置存储,外置存儲,M. Flash,Külső Tároló,Externer Speicher,Stockage Externe,Externe Opslag,Armazenamento Externo,外部ストレージ,Memoria esterna
+_L_APP_SET_OLED_CONTRAST,OLED Contrast,OLED对比度,OLED對比度,Contraste OLED,OLED Kontraszt,OLED Kontrast,Contraste OLED,OLED-Contrast,Contraste do OLED,OLEDコントラスト,Contrasto OLED
+_L_APP_SET_OLED_CONTRAST_TITLE,OLED Contrast,OLED对比度,OLED對比度,Contraste OLED,OLED Kontraszt,OLED Kontrast,Contraste OLED,OLED-Contrast,Contraste do OLED,OLEDコントラスト,Contrasto OLED
+_L_APP_SET_LCD_BACKLIGHT,Backlight,背光亮度,背光亮度,Brillo,Háttérvilágítás,Beleuchtung,Rétroéclairage,Achtergrondverlichting,Luz de Fundo,バックライト,Luminosità
+_L_APP_SET_LCD_BACKLIGHT_TITLE,Backlight Brightness,背光亮度,背光亮度,Brillo de fondo,Háttérvilágítás Fényerő,Helligkeit,Luminosité du Rétroéclairage,Helderheid Achtergrondverlichting,Brilho da Luz de Fundo,バックライトの明るさ,Luminosità schermo
+_L_APP_SET_ANIM,Menu Animation,动画效果,動畫效果,Animar menú,Menü Animáció,Menü Animation,Animation du Menu,Menu-Animatie,Animação do Menu,メニュー アニメーション,Animazione menu
+_L_APP_SET_LIPO_BAT,LiPO Battery,LiPO电池,LiPO電池,Batería LiPO,LiPO Akkumulátor,LiPO Batterie,Batterie LiPO,LiPO-Batterij,Bateria LiPO,LiPOバッテリー,Batteria LiPO
+_L_APP_SET_SHOW_MEM_USAGE,Memory Used,内存使用率,記憶體使用率,Mem. usada,Használt Memória,Speicheranzeige,Mémoire Utilisée,Gebruikt Geheugen,Memória Usada,使用メモリ,Memoria usata
+_L_APP_SET_HIBERNATE,Fast Wakeup,快速唤醒,快速喚醒,Hibernar,Gyors Ébresztés,Schnelles Aufwachen,Réveil Rapide,Snel Ontwaken,Despertar Rápido,高速起動,Risveglio rapido
+_L_APP_SET_SLEEP_TIMEOUT,Sleep Timeout,休眠时间,休眠時間,Dormir en:,Alvási Időkorlát,Standby nach,Délai de mise en veille,Time-out Slaapstand,Tempo Limite de Suspensão,スリープタイムアウト,Timeout di sospensione
+_L_APP_SET_LANGUAGE,Language,系统语言,系統語言,Idioma,Nyelv,Sprache,Langue,Taal,Idioma,言語,Lingua
+_L_APP_SET_DFU,Firmware Update,固件更新,軟體升級,Actualizar firmware,Firmware Frissítés,Firmw. Aktualisierung,Mise à Jour du Micrologiciel,Firmware Bijwerken,Atualização de Firmware,ファームウェア更新,Aggiornamento firmware
+_L_APP_SET_REBOOT,System Reboot,重启设备,重啟設備,Reiniciar,Rendszer Újraindítása,System Neustart,Redémarrage du Système,Systeem Herstarten,Reinicialização do Sistema,システム再起動,Riavvio del sistema
+_L_APP_SET_RESET_DEFAULT,Reset Default Setting,重置默认配置,重置默認配置,Restablecer config.,Alapért. Beállítás Visszaállítása,Standardeinstellungen,Rétablir les Paramètres par Défaut,Terugzetten Naar Standaardwaarden,Restaurar Configurações Padrão,デフォルト設定に戻す,Ripristina impostazioni predefinite
+_L_APP_SET_RESET_DEFAULT_SUCCESS,Reset Success!,重置成功,重置成功,¡Configuración Restablecida!,Alapért. Beállítások Visszaállítása,Einstellungen zurückgesetzt!,Réinitialiser les Paramètres Par Défaut,Standaardinstellingen Herstellen,Redefinir a Configuração Padrão,設定を初期化,Ripristino riuscito!
+_L_APP_SET_RESET_DEFAULT_CONFIRM,Confirm Reset Settings?,确认重置默认设置?,确认重置默认设置?,,,Auf Standardeinstellungen zurücksetzen?,,,,,Conferma il ripristino delle impostazioni?
+_L_15S,15 Seconds,15秒,15秒,15 segundos,15 sec.,15 Sekunden,15 sec.,15 sec.,15 seg.,15秒,15 secondi
+_L_30S,30 Seconds,30秒,30秒,30 segundos,30 sec.,30 Sekunden,30 sec.,30 sec.,30 seg.,30秒,30 secondi
+_L_45S,45 Seconds,45秒,45秒,45 segundos,45 sec.,45 Sekunden,45 sec.,45 sec.,45 seg.,45秒,45 secondi
+_L_1MIN,1 Minute,1分钟,1分鐘,1 minuto,1 min.,1 Minute,1 min.,1 min.,1 min.,1分,1 minuto
+_L_2MIN,2 Minutes,2分钟,2分鐘,2 minutos,2 min.,2 Minuten,2 min.,2 min.,2 min.,2分,2 minuti
+_L_3MIN,3 Minutes,3分钟,3分鐘,3 minutos,3 min.,3 Minuten,3 min.,3 min.,3 min.,3分,3 minuti
+_L_AMIIBO_KEY_UNLOADED,Amiibo Key not loaded,Amiibo Key未加载,Amiibo Key未載入,Sin llave amiibo,Amiibo kulcs nincs betöltve,Amiibo Schlüssel fehlt,Clé Amiibo Non Chargée,Amiibo-Sleutel Niet Geladen,A chave Amiibo não foi carregada,Amiiboキーが読み込まれない,Chiave Amiibo non caricata
+_L_UPLOAD_KEY_RETAIL_BIN,Upload the file key_retail.bin to the root directory of the storage.,上传文件 key_retail.bin\n到存储根目录下。,上傳檔案 key_retail.bin\n到儲存根目錄下。,Suba el archivo\nkey_retail.bin\nal directorio raíz.,Töltse fel a key_retail.bin fájlt a gyökérkönyvtárába.,Platzieren Sie die Datei key_retail.bin im Hauptverzeichnis des Speichers.,Téléchargez le fichier key_retail.bin dans le répertoire racine du stockage.,Upload het bestand key_retail.bin naar de hoofdmap van de opslag.,Carregue o arquivo key_retail.bin no diretório raiz do armazenamento.,key_retail.binファイルをストレージのルートディレクトリにアップロードする。,Carica il file key_retail.bin nella directory root della memoria.
+_L_KNOW,Got it,知道了,知道了,Entendido,Megvan,Verstanden,Compris (NOTE please feel free to simply change any entry as needed),Begrepen,Entendi,了解,Ho Capito
+_L_RANDOM_GENERATION,Rand. Tag,随机生成,隨機產生,Nuevo serial aleat.,Véletlengenerátor,Zufällige UUID,Randomiser la Balise,Willekeurige Tag,Randomizar Etiqueta,タグのランダム化,Tag casuale
+_L_AUTO_RANDOM_GENERATION,Auto Rand.,自动随机生成,自動隨機產生,Serial alea. aut,Automat. Véletlengenerátor,Zufällige UUID (Automatisch),Randomisation Automatique,Automatische Randomisatie,Randomização Automática,自動ランダム化,Casuale automatico
+_L_SHOW_QRCODE,Display QR Code,显示二维码,顯示二維碼,Mostrar QR,QR-kód Megjelenítése,QR Code,Afficher le Code QR,QR-Code Weergeven,Exibir QR Code,QRコード表示,Mostra codice QR
+_L_DELETE_TAG,Delete Tag,删除标签,刪除標籤,Borrar amiibo..,Címke Törlése,Tag löschen,Supprimer la Balise,Tag Verwijderen,Excluir Etiqueta,タグの削除,Elimina tag
+_L_DELETE_TAG_CONFIRM,Confirm Delete %s ?,确认删除 %s ?,確認刪除 %s ?,¿\nBorrar %s\n?,Törlés Megerősítése?,Löschen von %s bestätigen?,Confirmer la Suppression de %s ?,Bevestig Verwijderen %s ?,Confirmar Exclusão de %s ?,%s を削除しますか?,Conferma eliminazione %s\n?
+_L_BACK_TO_DETAILS,Back to Tag Details,返回详情,返回詳情,[Detalles amiibo],Vissza a Címke Részletkhez,Zurück zu Tag Details,Retour Aux Détails de L'étiquette,Terug naar Tag Details,Voltar Aos Detalhes da Tag,タグの詳細に戻る,[Torna ai dettagli del tag]
+_L_BACK_TO_FILE_LIST,Back to File List,返回文件列表,返回檔案清單,[Lista Archivos],Vissza a Fájl Listához,Zurück zur Liste,Retour à La Liste Des Fichiers,Terug naar Bestandslijst,Voltar Para a Lista de Arquivos,ファイル一覧に戻る,[Torna alla lista dei file]
+_L_BACK_TO_MAIN_MENU,Back to Main Menu,返回主菜单,返回主選單,[Menú Principal],Vissza a Főmenübe,Hauptmenü,Retour au Menu Principal,Terug naar Hoofdmenu,Voltar ao Menu Principal,メインメニューに戻る,[Torna al menu principale]
+_L_FORMAT,Format,格式化,格式化,Formatear..,Formátum ,Formatieren,Format,Formatteren,Formatar,フォーマット,Formatta..
+_L_FORMAT_STORAGE,Format Storage,格式化存储,格式化儲存,Formatear mem. Flash,Formátum Tárolás,Speicher formatieren,Format de Stockage,Opslag Formatteren,Formatar Armazenamento,保存領域フォーマット,Formatta memoria
+_L_DELETE_ALL_DATA,This will delete all data. Confirm format?,将删除所有数据。\n确认格式化?,將刪除所有資料。\n確認格式化?,Se borrará todos los\ndatos.,Minden adatot töröl. Formázás megerősítése?,Alle Daten löschen?,Cette opération efface toutes les données. Confirmer le formatage?,Hierdoor worden alle gegevens gewist. Formatteren bevestigen?,Isso excluirá todos os dados. Confirmar a formatação?,これですべてのデータが削除されます。よろしいですか?,Questo cancellerà tutti i dati.\nConferma la formattazione?
+_L_DELETING_MESSAGE,Formatting ..,格式化中..,格式化中..,Formateando..,Formázás ..,Formatiere..,Formatage ..,Formatteren ..,Formatando ..,書式設定 ..,Formattazione in corso ..
+_L_MESSAGE,Message,提示,提示,Inicializar,Üzenet,Meldung,Message,Bericht,Mensagem,メッセージ,Messaggio
+_L_CONFIRM,Confirm,确定,確定,Confirmar,Megerősítés,Bestätigen,Confirmer,Bevestigen,Confirmar,確認,Conferma
+_L_CANCEL,Cancel,取消,取消,Cancelar,Megszüntet,Abbrechen,Annuler,Annuleren,Cancelar,キャンセル,Annulla
+_L_BACK_TO_LIST,Back List,返回列表,返回清單,[Voler a lista],Vissza a Listához,Zurück zur Liste,Retour à La Liste,Terug naar Lijst,Voltar à Lista,バックリスト,[Torna alla lista]
+_L_NOT_MOUNTED,Not Mounted,未挂载,未掛載,No montado,Nincs Felszerelve,Speicher nicht eingebunden,Stockage non Monté,Niet Gekoppeld,Não Montado,ストレージがマウントされていません,Non montato
+_L_MOUNTED_LFS,===Mounted[LFS]===,===已挂载[LFS]===,===已掛載[LFS]===,===[LFS]Montado===,===Szerelt[LFS]===,===Speicher [LFS]===,===Monté[LFS]===,===Gekoppeld[LFS]===,===Montado[LFS]===,===ストレージマウント[LFS]===,===Montato[LFS]===
+_L_MOUNTED_FFS,===Mounted[FFS]===,===已挂载[FFS]===,===已掛載[FFS]===,===[FFS]Montado===,===Szerelt[FFS]===,===Speicher [FFS]===,===Monté[FFS]===,===Gekoppeld[FFS]===,===Montado[FFS]===,===ストレージマウント[FFS]===,===Montato[FFS]===
+_L_TOTAL_SPACE,Total,总空间,總空間,Capacidad,Össz.,Gesamt,Total,Totaal,Total,トータル容量,Totale
+_L_AVAILABLE_SPACE,Free,可用空间,可用空間,Libre,Ingyenes,Frei,Libre,Vrij,Livre,空き容量,Libero
+_L_NOT_AMIIBO_FILE,This is not Amiibo file,这不是Amiibo文件,這不是Amiibo檔案,Este no es un archivo\namiibo válido,Ez nem Amiibo Fájl,Keine Amiibo Datei,Ce n'est pas un fichier Amiibo,Dit is geen Amiibo-bestand,Este Não é um Arquivo Amiibo,これはAmiiboファイルではありません,Questo non è un file\nAmiibo valido
+_L_READ_FILE_FAILED,Failed read the file,读取文件失败,讀取檔案失敗,Error al leer archivo,Fájl beolvasása sikerten,Lesen fehlgeschlagen,Échec de la lecture du fichier,Lezen van het bestand is mislukt,Falha na Leitura do Arquivo,ファイルの読み込みに失敗しました,Errore nella lettura del file
+_L_INPUT_FOLDER_NAME,Input Folder Name:,输入文件夹名:,輸入資料夾名稱:,Nombre carpeta:,Bemeneti Mappa Neve:,Ordnername eingeben:,Nom du Dossier D'entrée:,Naam Invoermap:,Nome da Pasta de Entrada:,入力フォルダ名:,Nome cartella:
+_L_INPUT_AMIIBO_NAME,Input Amiibo Name:,输入amiibo名:,輸入amiibo名稱:,Nombre amiibo:,Amiibo Neve:,Amiibo Namen eingeben:,Nom de l'Amiibo D'entrée:,Naam Amiibo Invoeren:,Nome do Amiibo de Entrada:,入力Amiibo名:,Nome Amiibo:
+_L_DELETE,Delete,删除,刪除,Borrar,Töröl,Löschen,Supprimer,Verwijder,Excluir,削除,Elimina
+_L_INPUT_NEW_NAME,Input New Name:,输入新名:,輸入新名稱:,Nuevo nombre:,Új Név Bevitele:,Neuen Namen eingeben:,Nouveau nom D'entrée:,Nieuwe Naam Invoeren:,Novo Nome de Entrada:,新しい名前を入力してください:,Nuovo nome:
+_L_INVALID_INPUT,Invalid Input,无效的输入,無效的輸入,Entrada inválida,Érvénytelen Bemenet,Ungültige Eingabe,Entrée Invalide,Ongeldige Invoer,Entrada Inválida,無効な入力,Input non valido
+_L_CREATE_NEW_FOLDER,Create New Folder..,新建文件夹..,新建資料夾..,Crear carpeta..,Új Mappa Létrehozása..,Neuer Ordner..,Créer un Nouveau Dossier..,Nieuwe Map Maken..,Criar Nova Pasta..,新しいフォルダを作成..,Crea cartella..
+_L_CREATE_NEW_TAG,Create New Tag..,新建标签..,新建標籤..,Crear amiibo..,Új Címke Létrehozása..,Neuer Tag..,Créer une Nouvelle Étiquette..,Nieuwe Tag Aanmaken..,Criar Nova Tag..,新規タグ作成..,Crea Amiibo..
+_L_CREATE_NEW_TAG_BATCH,Batch Create New Tag..,批量创建标签..,批量創建標簽..,Crear amiibo en lote..,Kötegelt Új Címke Létrehozása..,Mehrere Tags erstellen..,Créer de Nouvelles Étiquettes Par Lot..,Nieuwe Tags in een Batch Aanmaken..,Criar Novas Tags em Lote..,新規タグの一括作成..,Crea Amiibo in serie..
+_L_INPUT_TAG_NUM,Input Tag Number:,输入标签数量:,輸入標簽數量:,¿Cuántos?,Beviteli Címke Száma:,Tag Anzahl eingeben:,Saisir le Numéro de l'Étiquette:,Labelnummer Invoeren:,Número da Tag de Entrada:,タグ番号を入力:,Numero di tag:
+_L_CREATE_TOO_MANY_NUM,Only max %d tags created in a batch.,一次最多只能创建%d个标签,一次最多只能創建%d個標簽,Sólo se puede crear %d en lote,Max. létrehozható címke egy kötegben %d,Sie können nur maximal %d Tags auf einmal erstellen.,Seulement %d balises maximum créées dans un lot.,Maximum %d tags aangemaakt in een batch.,Somente no máximo %d tags criadas em um lote.,1つのバッチで作成されるタグの数はは最大 %d までです。,Numero max di %d tag in serie.
+_L_CREATING_TAG_BATCH,Creating tag,创建标签,創建標簽,Creando,Címke létrehozása,Tag erstellen,Création d'une balise,Tag aanmaken,Criando tag,タグの作成,Creazione tag
+_L_CREATING_TAG_FAILED,Create tag %s failed!,写入 %s 标签失败,寫入 %s 標簽失敗,¡Error al crear %s!,Címke létrehozása %s sikertelen!,Erstellen von Tag %s fehlgeschlagen!,La création de la balise %s a échoué!,Aanmaken tag %s mislukt!,Falha ao criar a tag %s!,タグ %s の作成に失敗しました!,Creazione tag %s fallita!
+_L_RENAME,Rename,重命名,重新命名,Renombrar,Átnevezés,Umbenennen,Renommer,Hernoem,Renomear,名前の変更,Rinomina
+_L_OPEN_FOLDER_FAILED,Failed to open folder,打开文件夹失败,開啟資料夾失敗,Fallo al abrir carpeta,Mappa megnyitása sikertelen ,Ordner konnte nicht geöffnet werden,Échec de l'ouverture du dossier,Kan map niet openen,Falha ao abrir a pasta,フォルダを開けませんでした,Errore nell'apertura della cartella
+_L_RENAME_FAILED,Failed to rename\nError code,重命名失败,重新命名失敗,Fallo al renombrar\nCódigo de error,Átnevezés Sikertelen\nHibakód,Umbenennen fehlgeschlagen\nFehlercode,Échec du renommage.\nCode d'Erreur,Hernoemen mislukt.\nFoutcode,Falha ao renomear\nCódigo de erro,名前の変更に失敗しました。\nエラーコード,Errore nella rinomina\nCodice errore
+_L_MAIN_RETURN,[RETURN],[返回],[返回],[Volver],[VISSZA],[Zurück],[RETOUR],[TERUG],[RETORNO],[リターン],[Torna indietro]
+_L_RANDOM_MODE_MANUAL,Randomize (Manual),随机模式(手动),隨機模式(手動),Aleatorio (Manual),Randomizálás (Kézi),Zufällige UUID (Manuell),Randomiser (Manuel),Willekeurig (Handmatig),Randomizar (Manual),ランダム化 (手動),Casuale (Manuale)
+_L_RANDOM_MODE_AUTO,Randomize (Auto),随机模式(自动),隨機模式(自動),Aleatorio (Auto.),Randomizálás (Automat.),Zufällige UUID (Automatisch),Randomiser (Automatique),Willekeurig (Automatisch),Randomizar (Automático),ランダム化(自動),Casuale (Automatico)
+_L_SEQUENCE_MODE,Sequential mode,按序模式,按序模式,Modo Secuencial,Szekvenciális Mód,Sequentieller Modus,Mode Séquentiel,Sequentiële Modus,Modo Sequencial,シーケンシャルモード,Modo sequenziale
+_L_READ_WRITE_MODE,Read-write mode,读写模式,讀寫模式,Modo Lectura/Escrit.,Olvasás-írás Mód,Lese-Schreibmodus,Mode Lecture-Écriture,Lees-Schrijfmodus,Modo de Leitura e Gravação,読み書きモード,Modo lettura/scrittura
+_L_AMIIBOLINK_V1,V1,V1(历史版本),V1(歷史版本),V1,V1,V1,V1,V1,V1,V1,V1
+_L_AMIIBOLINK_V2,V2,V2(最新版本),V2(最新版本),V2,V2,V2,V2,V2,V2,V2,V2
+_L_AMILOOP,AmiLoop,AmiLoop,AmiLoop,AmiLoop,AmiLoop,AmiLoop,AmiLoop,AmiLoop,AmiLoop,AmiLoop,AmiLoop
+_L_MODE,Mode,模式,模式,Modo,Mód,Modus,Mode,Modus,Modo,モード,Modalità
+_L_AUTO_RANDOM,Auto Random.,自动随机,自動隨機,Aleat. autom.,Automat. Randomizálás,Zufällige UUID (Automatisch),Randomisation Automatique,Automatische Randomisatie,Randomização Automática,自動ランダム化,Auto. casuale
+_L_COMPATIBLE_MODE,Compati. Mode,兼容模式,相容模式,Compatibil.,Kompatibilis Mód,Kompabilitäts Modus,Mode Compatible,Compatibiliteitsmodus,Modo Compatível,互換モード,Mod. Compatibilità
+_L_TAG_DETAILS,[Tag Details],[标签详情],[標籤詳情],[Volver a Detalles],[Tag Részletek],[Zurück zu Details],[Détails de l'Étiquette],[Tag Details],[Detalhes da Tag],[タグ詳細],[Torna ai dettagli]
+_L_MAIN_MENU,[Main Menu],[主菜单],[主選單],[Menú Principal],[Főmenü],[Hauptmenü],[Menu Principal],[Hoofdmenu],[Menu Principal],[メインメニュー],[Menu principale]
+_L_MODE_RANDOM,Rand. (Manual),随机(手动),隨機(手動),Aleat. man.,Random (Kézi),Zufällige UUID (Manuell),Aléatoire (Manuel),Willekeurig (Handmatig),Randomização (Manual),ランダム化(手動),Casuale man.
+_L_MODE_CYCLE,Sequential,按序,按序,Secuencial,Szekvenciális,Sequentiell,Séquentiel,Sequentieel,Sequencial,シーケンシャル,Sequenziale
+_L_MODE_NTAG,Read/Write,读写,讀寫,Lect./Escr.,Olvasás/Írás,Lesen/Schreiben,Lecture/Écriture,Lezen/Schrijven,Leitura/gravação,リード/ライト,Lett./Scritt.
+_L_MODE_RANDOM_AUTO_GEN,Rand. (Auto),随机(自动),隨機(自動),Aleat. auto.,Random (Automat.),Zufällig (Auto.),Aléatoire (Automatique),Willekeurig (Automatisch),Randomização (Automática),ランダム化(自動),Auto. casuale
+_L_BLANK_TAG,Blank NFC tag,空标签,空標籤,Amiibo no asignado,Üres NFC Címke,Leerer NFC Tag,Étiquette NFC vierge,Lege NFC-tag,Tag NFC em Branco,ブランクNFCタグ,Amiibo non assegnato
+_L_APP_AMIIDB,Amiibo Database,Amiibo数据库,Amiibo數據庫,Base datos amiibo,Amiibo Adatbázis,Amiibo Datenbank,Base de Données Amiibo,Amiibo-Database,Banco de Dados Amiibo,Amiiboデータベース,Database Amiibo
+_L_APP_AMMIDB_BROWSER,Browser..,查看..,查看..,Explorar..,Böngésző..,Navigieren..,Naviguer..,Browser..,Navegador..,ブラウザ..,Esplora..
+_L_APP_AMIIDB_SEARCH,Search..,搜索..,搜索..,Buscar..,Keresés..,Suche..,Recherche..,Zoeken..,Pesquisar..,検索..,Cerca..
+_L_APP_AMIIDB_MY_FAVORITES,My Favorites..,我的收藏..,我的收藏..,Mis Favoritos..,Kedvencek..,Meine Favoriten..,Mes Favoris..,Mijn Favorieten..,Meus Favoritos..,お気に入り..,I miei preferiti..
+_L_APP_AMIIDB_MY_TAGS,My Amiibo..,我的数据..,我的數據..,Mis amiibo..,Amiiboim..,Meine Amiibo..,Mes Amiibo..,Mijn Amiibo..,Meu Amiibo..,マイAmiibo..,I miei Amiibo..
+_L_APP_AMIIDB_SETTINGS,Settings..,设置..,設置..,Configuraciones..,Beállítások..,Einstellungen..,Paramètres..,Instellingen..,Configurações..,設定..,Impostazioni..
+_L_APP_AMIIDB_EXIT,[Exit],[退出],[退出],[Menú Principal],[Kilépés],[Beenden],[Quitter],[Afsluiten],[Sair],[終了],[Menu principale]
+_L_APP_AMIIDB_BACK,[Back],[返回],[返回],[Volver],[Vissza],[Zurück],[Retour],[Terug],[Retornar],[戻る],[Torna indietro]
+_L_APP_AMIIDB_SETTINGS_AMIIBO_KEY,Keys,密钥文件,密鑰文件,Llaves,Kulcsok,Schlüssel,Touches,Toetsen,Teclas,キー,Chiavi
+_L_APP_AMIIDB_SETTINGS_AMIIBO_KEY_LOADED,Loaded,已加载,已加載,Cargadas,Betöltve,geladen,Chargée,Geladen,Carregado,ロードされました,Caricate
+_L_APP_AMIIDB_SETTINGS_AMIIBO_KEY_NOT_LOADED,NOT Loaded,未加载,未加載,NO cargadas,NINCS betöltve,NICHT geladen,NON Chargée,NIET Geladen,NÃO Carregadas,ロードされていません,NON caricate
+_L_APP_AMIIDB_SETTINGS_SLOT_NUM,Slot Num.,数据槽位,數據槽位,Cant. ranuras,Slot Száma,Steckplatzanzahl,Numéro d'Emplacement,Slotnummer,Número do Slot,スロット番号,Num. slot
+_L_APP_AMIIDB_DETAIL_FAVORITE,Favorite..,收藏..,收藏..,Favorito..,Kedvenc..,Favorit..,Favorite..,Favoriet..,Favorito..,お気に入り..,Preferito..
+_L_APP_AMIIDB_DETAIL_SAVE_AS,Save As..,保存为..,保存爲..,Asignar en..,Mentés Másként..,Speichern unter..,Enregistrer Sous..,Opslaan Als..,Salvar como..,名前を付けて保存..,Assegna a..
+_L_APP_AMIIDB_DETAIL_BACK_DETAIL,[Back to Detail],[返回详情],[返回詳情],[Volver a Detalles],[Vissza a Részletekhez],[Zurück zu Details],[Retour au Détail],[Terug naar Detail],[Voltar Para Detalhes],[詳細に戻る],[Torna ai dettagli]
+_L_APP_AMIIDB_DETAIL_BACK_LIST,[Back to List],[返回列表],[返回列表],[Volver a Lista],[Vissza a Listához],[Zurück zur Liste],[Retour à la Liste],[Terug naar Lijst].,[Voltar Para a Lista],[リストに戻る],[Torna alla lista]
+_L_APP_AMIIDB_SEARCH_HEAD,Search:,搜索:,搜索:,Buscar:,Keresés:,Suche:,Recherche:,Zoeken:,Pesquisar:,検索する:,Cerca:
+_L_APP_AMIIDB_MORE,[More..],[更多],[更多],[Más..],[Bővebben..],[Mehr..],[Plus..],[Meer..],[Mais..],[もっと見る..],[Più..]
+_L_APP_AMIIDB_EMPTY_TAG,,<空标签>,<空標簽>,,<Üres Amiibo>,,,,,,
+_L_APP_AMIIDB_SLOT_DELETE,Reset..,重置..,重置..,Borrar..,Újraindítás..,Zurücksetzen..,Réinitialiser..,Reset..,Reiniciar..,リセット..,Elimina..
+_L_APP_AMIIDB_CONFIRM,Confirm,确认,確認,Confirmar,Megerősítés,Bestätigen,Confirmer,Bevestigen,Confirmar,確認する,Conferma
+_L_APP_AMIIDB_CANCEL,Cancel,取消,取消,Cancelar,Törlés,Abbrechen,Annuler,Annuleren,Cancelar,キャンセルする,Annulla
+_L_APP_AMIIDB_TIPS,Confirm,提示,提示,Confirmar,Megerősítés,Bestätigen,Confirmer,Bevestigen,Confirmar,確認する,Conferma
+_L_APP_AMIIDB_NEW,New..,新建..,新建..,Nueva..,Új..,Neu..,Nouveau..,Nieuw..,Novo..,新規..,Nuovo..
+_L_APP_AMIIDB_EMPTY,Empty..,清空..,清空..,Vaciar..,Üres..,Leeren..,Vider..,Leeg..,Vazio..,空..,Svuota..
+_L_APP_AMIIDB_DELETE,Delete..,删除..,删除..,Borrar..,Törlés..,Löschen..,Supprimer..,Verwijderen..,Excluir..,削除..,Cancella..
+_L_APP_AMIIDB_FAV_NEW_HEAD,New Fav. Folder:,新建收藏夹:,新建收藏夾:,Nueva Carp. Favoritos:,Új Kedvenc Mappa:,Neuer Fav.-Ordner:,Nouveau Dossier Favori:,Nieuwe Favoriete Map:,Nova Pasta de Favoritos:,新しいお気に入りフォルダ:,Nuova cart. preferiti:
+_L_APP_AMIIDB_FAV_EMPTY_MSG,Empty Fav. Folder?,确认清空收藏夹?,確認清空收藏夾?,¿Vaciar Carp. Favoritos?,Üres Kedvenc Mappa?,Fav.-Ordner leeren?,Vider le Dossier Favori?,Favoriete Map Leegmaken?,Esvaziar Pasta de Favoritos?,お気に入りフォルダを空にしますか?,Svuotare cart. preferiti?
+_L_APP_AMIIDB_FAV_DELETE_MSG,Confirm Delete?,确认删除?,確認刪除?,¿Confirma borrado?,Törlés Megerősítése?,Löschen Bestätigen?,Confirmer la Suppression?,Verwijderen Bevestigen?,Confirmar Exclusão?,削除してよろしいですか?,Conferma cancellazione?
+_L_APP_AMIIDB_FAV_SELECT_FOLDER,Select Fav. Folder..,选择收藏夹..,選擇收藏夾..,Selec. carp. favoritos..,Kedvenc Mappa Kiválasztása..,Fav.-Ordner auswählen..,Sélectionner le Dossier Favori..,Selecteer Favoriete Map..,Selecionar Pasta Favorita..,お気に入りフォルダを選択..,Selez. cart. preferiti..
+_L_APP_AMIIDB_FAV_SUCCESS,Favorite Success,收藏成功,收藏成功,¡Favorito correcto!,Kedvenc Sikeres,Favorit erstellt ,Succès du Favori,Favoriet Geslaagd,Favorito Bem-Sucedido,お気に入りに追加されました,Preferito aggiunto!
+_L_APP_AMIIDB_FAV_FAILED,Favorite Failed!,收藏失败,收藏失敗,¡Favorito fallido!,Kedvenc Sikertelen!,Favorisieren fehlgeschlagen!,Échec du Favori!,Favoriet Mislukt!,Favorito Falhou!,お気に入りに追加できませんでした!,Preferito non aggiunto!
+_L_APP_AMIIDB_SLOT_SAVE_SUCCESS,Save Success,保存成功,保存成功,Asignación correcta,Sikeresen Mentve,Speichern erfolgreich,Sauvegarder Succès,Opslaan Succes,Salvar Com Êxito,保存されました,Assegnazione corretta
+_L_APP_AMIIDB_SLOT_SAVE_FAILED,Save Failed!,保存失败,保存失敗,¡Asignación fallida!,Mentés Sikertelen!,Speichern fehlgeschlagen!,Sauvegarde Échouée!,Opslaan Mislukt!,Falha ao Salvar!,保存に失敗しました!,Assegnazione fallita!
+_L_APP_CHAMELEON,Card Emulator,卡模拟器,卡模擬器,Emular Etiqueta RFID,Kártya Emulátor,Karten Emulator,Emulateur de Carte,Kaart Emulator,Emulador de Cartão,カードエミュレータ,Emula tag RFID
+_L_APP_CHAMELEON_TAG_MF1_WRITE_NORMAL,Normal,正常,正常,Normal,Normál,Normal,Normal,Normaal,Normal,通常,Normale
+_L_APP_CHAMELEON_TAG_MF1_WRITE_DENIED,Deny,拒绝,拒絕,Negar,Tagadni,Verweigern,Refuser,Weigeren,Negar,拒否,Nega
+_L_APP_CHAMELEON_TAG_MF1_WRITE_DECEIVE,Ignore,忽略,忽略,Ignorar,Figyelmen Kívül Hagyni,Ignorieren,Ignorer,Negeren,Ignorar,無視,Ignora
+_L_APP_CHAMELEON_TAG_MF1_WRITE_SHADOW,Cache,缓存,緩存,Caché,Elrejt,Cache,Cache,Cache,Cache,キャッシュ,Cache
+_L_APP_CHAMELEON_INITIALIZING,Initializing data ..,"初始化, 请稍后..","初始化, 請稍後..",Inicializando ambiente.\nPor favor espere..,Az adatok inicializálása ..,Daten initialisieren..,Initialisation des données ..,Gegevens Initialiseren ..,Inicialização de Dados ..,データの初期化 ..,Inizializzazione ambiente.\nPer favore attendi..
+_L_APP_CHAMELEON_CARD_SLOT,Slot,卡槽,卡槽,Ranura,Cella,Steckplatz,Fente,Slot,Slot,スロット,Slot
+_L_APP_CHAMELEON_CARD_NICK,Nick,卡名,卡名,Apodo,Becenév,Spitzname,Pseudo,Bijnaam,Apelido,ニックネーム,Nickname
+_L_APP_CHAMELEON_CARD_ID,ID,ID,ID,ID,ID,ID,ID,ID,ID,ID,ID
+_L_APP_CHAMELEON_CARD_TYPE,Type,卡类型,卡類型,Tipo,Típus,Typ,Type de Données,Type,Tipo de Dados,タイプ,Tipo
+_L_APP_CHAMELEON_CARD_DATA,Data..,卡数据..,卡數據..,Datos..,Adatok..,Daten..,Données..,Gegevens..,Dados..,データ..,Dati..
+_L_APP_CHAMELEON_CARD_ADVANCED,Advanced..,卡高级设置..,卡高級設置..,Avanzado..,Fejlett..,Erweitert..,Avancé..,Geavanceerd..,Avançado..,詳細設定..,Avanzato..
+_L_APP_CHAMELEON_CARD_SLOT_SETTINGS,Slots Settings..,卡槽管理..,卡槽管理..,Configuración..,Cella Beállításai..,Steckplatz Einstellungen..,Paramètres des Emplacements..,Slot Instellingen..,Configurações de Slots..,スロット設定..,Impostazioni..
+_L_APP_CHAMELEON_CARD_SLOT_NUM,Slot Num..,卡槽数量..,卡槽數量..,Cant. ranuras..,Cella Száma..,Steckplatz Nummer,Numéro d'Emplacement..,Slotnummer..,Número do Slot..,スロット番号..,Num. slot..
+_L_APP_CHAMELEON_CARD_SET_NICK_SUCCESS,Set Nick Success,设置卡名成功,設置卡名成功,Apodo cambiado.,Becenév Beállítása Sikeres,Spitzname erfolgreich gesetzt,Définir le Pseudo Succès,Bijnaam Instellen Succes,Apelido Definido com Sucesso,ニックネームが設定されました,Cambio nickname riuscito.
+_L_APP_CHAMELEON_CARD_SET_NICK_FAILED,Set Nick Failed!,设置卡名失败,設置卡名失敗,¡Falló cambio apodo!,Becenév Beállítása Sikertelen!,Spitzname setzen fehlgeschlagen!,Définir le Pseudo a Échoué!,Bijnaam Instellen Mislukt!,Falha ao Definir Apelido!,ニックネームが設定できませんでした!,Cambio nickname fallito!
+_L_APP_CHAMELEON_CARD_INPUT_NICK,Input Nick:,输入卡名:,輸入卡名:,Apodo:,Becenév Bevitele:,Spitznamen eingeben:,Entrer le Pseudo:,Voer Bijnaam In:,Insira o Apelido:,ニックネームを入力してください:,Nickname:
+_L_APP_CHAMELEON_CARD_DATA_LOAD,Load..,加载..,加載..,Cargar..,Betöltés..,Laden..,Charger..,Laden..,Carregar..,ロード..,Carica..
+_L_APP_CHAMELEON_CARD_DATA_SAVE,Save..,导出..,導出..,Guardar..,Mentés..,Speichern..,Sauvegarder..,Opslaan..,Salvar..,保存..,Salva..
+_L_APP_CHAMELEON_CARD_DATA_FACTORY,Factory..,重置..,重置..,Inicializar..,Visszaállítás..,Zurücksetzen..,Rétablir Les Valeurs Par Défaut..,Terugzetten Naar Standaard..,Restaurar Padrões..,初期化..,Inizializza..
+_L_APP_CHAMELEON_CARD_DATA_FACTORY_SUCCESS,Data Factory Success,卡片初始化成功,卡片初始化成功,¡Datos inicializados!,Adatok Visszaállítása Sikeres,Daten zurückgesetzt,Réinitialisation des Données Succès,Fabriekgegeven terugzetten Succesvol,Restauração de Dados Bem-Sucedida,初期化成功,Dati inizializzati!
+_L_APP_CHAMELEON_CARD_DATA_LOAD_NOT_FOUND,File Not Found,文件不存在,文件不存在,Archivo no encontrado,Fájl Nem Található,Datei nicht gefunden,Fichier Non Trouvé,Bestand Niet Gevonden,Arquivo Não Encontrado,ファイルが見つかりません,File non trovato
+_L_APP_CHAMELEON_CARD_DATA_LOAD_SIZE_NOT_MATCH,File Size Not Match,文件大小不匹配,文件大小不匹配,Tamaño archivo incorrecto,Fájl Mérete Nem Egyezik,Dateigröße stimmt nicht überein,La Taille du Fichier ne Correspond Pas,Bestandsgrootte Komt Niet Overeen,Tamanho do Arquivo Não Corresponde,ファイルサイズが一致しません,Dimensione file non corretta
+_L_APP_CHAMELEON_CARD_DATA_LOAD_FAILED,Load File Failed,读取文件失败,讀取文件失敗,Falla carga archivo,Fájl betöltése Sikertelen,Laden der Datei fehlgeschlagen,Échec du Chargement du Fichier,Bestand Laden Mislukt,Falha no Carregamento do Arquivo,ファイルの読み込み失敗,Caricamento file fallito
+_L_APP_CHAMELEON_CARD_DATA_LOAD_SUCCESS,Load File Success,加载卡片数据成功,加載卡片數據成功,Carga archivo correcta,Fájl Betöltése Sikeres,Datei erfolgreich geladen,Chargement du Fichier Réussi,Laad Bestand Succesvol,Sucesso no Carregamento do Arquivo,ファイルの読み込みに成功,Caricamento file riuscito
+_L_APP_CHAMELEON_CARD_DATA_SAVE_INPUT_FILE_NAME,Input File Name:,输入文件名,輸入文件名,Nombre archivo:,Bemeneti Fájl Neve:,Datei Namen eingeben:,Saisir le Nom du Fichier:,Bestandsnaam Invoeren:,Nome do Arquivo de Entrada:,入力ファイル名:,Nome file:
+_L_APP_CHAMELEON_CARD_DATA_SAVE_FAILED,Save File Failed!,写入文件失败,寫入文件失敗,¡Error al guardar!,Fájl Mentése Sikertelen!,Datei speichern fehlgeschlagen!,Échec de l'Enregistrement du Fichier!,Bestand Opslaan Mislukt!,Falha ao Salvar o Arquivo!,ファイルの保存に失敗しました!,Errore nel salvataggio!
+_L_APP_CHAMELEON_CARD_DATA_SAVE_SUCCESS,Save File Success,导出卡片数据成功,導出卡片數據成功,Guardado correcto,Fájl Mentése Sikeres,Datei erfolgreich gespeichert,Sauvegarde du Fichier Réussie,Bestand Opslaan Gelukt,Arquivo Salvo com êxito,ファイルが保存されました,Salvataggio riuscito
+_L_APP_CHAMELEON_CARD_ADV_CUSTOM_MODE,Custom Mode,自定义模式,自定義模式,Modo personali.,Egyéni Mód,Benutzerdefinierter Modus,Mode Personnalisé,Aangepaste Modus,Modo Personalizado,カスタムモード,Modalità personalizzata
+_L_APP_CHAMELEON_CARD_GEN1A_MODE,Gen1A Enabled,Gen1A模式,Gen1A模式,Gen1A habilitada,Gen1A Engedélyezve,Gen1A aktiv,Gen1A Activé,Gen1A Ingeschakeld,Gen1A Ativada,Gen1A 有効,Gen1A abilitata
+_L_APP_CHAMELEON_CARD_GENERATE_UID,Rand. UID,生成UID,生成UID,Generar nuevo UID,Véletlen UID,Zufällige UID,Randomiser l'UID,Willekeurige UID,UID Aleatório,UIDのランダム化,Genera nuovo UID
+_L_APP_CHAMELEON_CARD_GENERATE_UID_SUCCESS,UID Generated,UID已生成,UID已生成,UID generado,Generált UID,UID generiert,UID Généré,UID Gegenereerd,UID Gerado,UID 生成,UID generato
+_L_APP_CHAMELEON_CARD_GEN2_MODE,Gen2 Enabled,Gen2模式,Gen2模式,Gen2 habilitada,Gen2 Engedélyezve,Gen2 aktiv,Gen2 Activé,Gen2 Ingeschakeld,Gen2 Ativado,Gen2 有効,Gen2 abilitata
+_L_APP_CHAMELEON_CARD_WRITE_MODE,Write Mode,写入模式,寫入模式,Modo escrit.,Írási Mód,Schreibmodus,Mode d'Écriture,Schrijfmodus,Modo de Gravação,書き込みモード,Modalità scrittura
+_L_APP_CHAMELEON_CARD_ADV_ID_EDIT_INVALID_INPUT,Invalid Input!,无效的输入!,無效的輸入!,¡Entrada inválida!,Érvénytelen bemenet!,Ungültige Eingabe!,Entrée Invalide!,Ongeldige Invoer!,Entrada Inválida!,無効な入力,Input non valido!
+_L_APP_CHAMELEON_CARD_TYPE_FACTORY_DATA_CONFRIM,Card type changed. \nFactory card data?,卡类型已修改\n重置卡数据?,卡類型已修改\n重置卡數據?,Tipo tarjeta modificado\n¿Inicializar tarjeta?,A kártya típusa megváltozott.\nGyári kártyaadatok?,Kartentyp geändert. \nKartendaten zurücksetzen?,Le Type de Carte a Été Modifié. \nRéinitialiser les Données de la Carte?,Kaarttype gewijzigd. \nGegevens terugzetten naar standaard?,O tipo de cartão foi alterado. \nRedefinir dados do cartão?,カードの種類が変更されました。\nカードデータを初期化しますか?,Tipo di carta modificato\nInizializzare carta?
diff --git a/fw/scripts/bdfconv_linux b/fw/scripts/bdfconv_linux
new file mode 100755
index 00000000..363326d1
Binary files /dev/null and b/fw/scripts/bdfconv_linux differ
diff --git a/fw/scripts/bdfconv_macos_universal b/fw/scripts/bdfconv_macos_universal
new file mode 100755
index 00000000..47cb5d62
Binary files /dev/null and b/fw/scripts/bdfconv_macos_universal differ
diff --git a/fw/scripts/font_data_gen.py b/fw/scripts/font_data_gen.py
new file mode 100755
index 00000000..a98a0693
--- /dev/null
+++ b/fw/scripts/font_data_gen.py
@@ -0,0 +1,128 @@
+#!/usr/bin/env python3
+
+import os
+import re
+import subprocess
+import platform
+
+
+# Absolute path to the directories containing the .c files
+current_dir = os.path.dirname(os.path.abspath(__file__))
+source_dirs = [
+ os.path.join(current_dir, "../application/src/i18n"),
+ os.path.join(current_dir, "../application/src/amiidb"),
+]
+
+# Absolute path to the directory where the output file will be saved
+data_dir = os.path.join(current_dir, "../data")
+mui_dir = os.path.join(data_dir, "../application/src/mui")
+
+# Name of the output file
+output_file = "pixjs.txt"
+
+
+def write_to_file(file_path, content):
+ with open(file_path, "w", encoding="utf-8") as f:
+ f.write(content)
+
+
+def extract_non_printable_chars():
+ non_printable_chars = set()
+ for source_dir in source_dirs:
+ for root, _, files in os.walk(source_dir):
+ for file in files:
+ if file.endswith(".c"):
+ with open(os.path.join(root, file), "r", encoding="utf-8") as f:
+ content = f.read()
+ non_printable_chars.update(re.findall(r"[^\x20-\x7E]", content))
+
+ write_to_file(
+ os.path.join(data_dir, output_file), "\n".join(sorted(non_printable_chars))
+ )
+
+
+def convert_and_sort(unicode_strings):
+ return sorted(
+ set(f"${ord(char):04X}," for string in unicode_strings for char in string)
+ )
+
+
+def run_bdfconv(map_path, output_path, bdf_path):
+ # Construct the path to the bdfconv executable relative to the script directory
+ system = platform.system()
+ if system == "Windows":
+ bdfconv_path = os.path.join(current_dir, "bdfconv.exe")
+ elif system == "Darwin":
+ bdfconv_path = os.path.join(current_dir, "bdfconv_macos_universal")
+ elif system == "Linux":
+ bdfconv_path = os.path.join(current_dir, "bdfconv_linux")
+ else:
+ raise OSError("Unsupported operating system")
+
+ # Convert paths to absolute paths
+ abs_map_path = os.path.abspath(map_path)
+ abs_output_path = os.path.abspath(output_path)
+ abs_bdf_path = os.path.abspath(bdf_path)
+
+ cmd = [
+ bdfconv_path,
+ "-b",
+ "0",
+ "-f",
+ "1",
+ "-M",
+ abs_map_path,
+ "-n",
+ "u8g2_font_wqy12_t_gb2312a",
+ "-o",
+ abs_output_path,
+ abs_bdf_path,
+ ]
+ subprocess.run(cmd, check=True)
+
+
+def main():
+ extract_non_printable_chars()
+
+ combined_content = ""
+ for file_name in ["chinese3.txt", "pixjs.txt"]:
+ with open(os.path.join(data_dir, file_name), "r", encoding="utf-8") as file:
+ combined_content += file.read()
+
+ sorted_converted = convert_and_sort(combined_content.splitlines())
+ write_to_file(
+ os.path.join(data_dir, "gb2312a.map"), "32-128,\n" + "\n".join(sorted_converted)
+ )
+
+ run_bdfconv(
+ map_path=os.path.join(data_dir, "gb2312a.map"),
+ output_path=os.path.join(mui_dir, "u8g2_font_wqy12_t_gb2312a_t.c"),
+ bdf_path=os.path.join(data_dir, "wenquanyi_9pt_u8g2.bdf"),
+ )
+
+ # Write to u8g2_font_wqy12_t_gb2312a.c
+ with open(
+ os.path.join(mui_dir, "u8g2_font_wqy12_t_gb2312a.c"), "w+", encoding="utf-8"
+ ) as final_file:
+ final_file.write(
+ """
+#include "mui_u8g2.h"
+
+#include "u8x8.h"
+
+"""
+ )
+
+ # Read the content of the temporary file and append it to the final file
+ temp_file_path = os.path.join(mui_dir, "u8g2_font_wqy12_t_gb2312a_t.c")
+ with open(temp_file_path, "r", encoding="utf-8") as temp_file:
+ final_file.write(temp_file.read())
+
+ # Remove the temporary files
+ os.remove(temp_file_path)
+ os.remove(os.path.join(data_dir, output_file))
+ os.remove(os.path.join(data_dir, "gb2312a.map"))
+
+
+if __name__ == "__main__":
+ main()
diff --git a/fw/scripts/font_data_gen.sh b/fw/scripts/font_data_gen.sh
index 09f764f1..b90954d8 100644
--- a/fw/scripts/font_data_gen.sh
+++ b/fw/scripts/font_data_gen.sh
@@ -1,6 +1,7 @@
#!/bin/bash
cd $(dirname "$0") && cd ..
+echo "Current dir: $(pwd)"
cat application/src/i18n/*.c application/src/amiidb/*.c |grep -Po '".*?"' | tr -d '[:print:]' |sort|uniq > data/pixjs.txt
echo '32-128,' > data/gb2312a.map
cat data/chinese3.txt data/pixjs.txt | iconv -f utf-8 -t c99 | sed 's/\\u\([0-9a-f]\{4\}\)/\$\1,\n/g' | sort | uniq | sed '/^$/d' | tr '/a-f/' '/A-F/' >> data/gb2312a.map
diff --git a/web/src/App.vue b/web/src/App.vue
index 5b7f5483..036fba84 100644
--- a/web/src/App.vue
+++ b/web/src/App.vue
@@ -22,6 +22,9 @@
{{ $t('lang.ru') }}
+
+ {{ $t('lang.de') }}
+
diff --git a/web/src/i18n/de_DE.js b/web/src/i18n/de_DE.js
new file mode 100644
index 00000000..0c23e127
--- /dev/null
+++ b/web/src/i18n/de_DE.js
@@ -0,0 +1,113 @@
+export default {
+ lang: {
+ choose: '语言/Language',
+ zhcn: '简体中文',
+ zhtw: '繁體中文(臺灣)',
+ en: 'English',
+ es: 'Español',
+ ru: 'Русский',
+ de: 'Deutsch',
+ changeok: 'Sprache erfolgreich geändert'
+ },
+ btn: {
+ ok: 'OK',
+ cancel: 'Abbrechen',
+ cont: 'Weiter'
+ },
+ menu: {
+ upload: 'Hochladen',
+ newfolder: 'Neuer Ordner',
+ del: 'Löschen',
+ up: 'Übergeordneter Ordner',
+ refresh: 'Aktualisieren',
+ dfu: 'DFU',
+ },
+ status: {
+ connected: 'Verbunden, Version: ',
+ version: 'Version:',
+ mac: 'MAC Adresse:',
+ loading: 'Lade…',
+ },
+ conn: {
+ connect: 'Vebinden',
+ connecting: 'Verbinde…',
+ disconnect: 'Trenne…',
+ consuccess: 'Erfolgreich mit Pixl.js verbunden!',
+ disconnected: 'Pixl.js wurde getrennt!',
+ connfailed: 'Verbindung mit Pixl.js fehlgeschlagen!'
+ },
+ labels: {
+ name: 'Name',
+ size: 'Größe',
+ type: 'Typ',
+ remark: 'Notiz'
+ },
+ contxmenu: {
+ del: 'Löschen…',
+ rename: 'Umbenennen…',
+ prop: 'Eigenenschaften…',
+ format: 'Formatieren…'
+ },
+ properties: {
+ title: 'Eigenenschaften',
+ remark: 'Notiz',
+ entermsg: 'Bitte Notiz eingeben',
+ attrib: 'Attribute',
+ hide: 'Ausblenden',
+ errupdate: 'Eigenschaften aktualisieren fehlgeschlagen!',
+ remarktoolong: 'Notizen können maximal ist 90 Bytes lang sein! Das entspricht 90 Buchstaben or 30 chinesischen Buchstaben (Aktuell: ',
+ remarktoolongend: ' Bytes)'
+ },
+ upload: {
+ title: 'Hochladen',
+ drag: 'Dateien hier rein ziehen, oder',
+ click: 'klicken zum Hochladen.',
+ maxsize: 'Die Gesamtlänge des Dateipfads darf 63 Bytes nicht überschreiten.',
+ maxname: 'Der Dateiname darf 47 Bytes nicht überschreiten.',
+ closetitle: 'Schließen bestätigen?',
+ closemessage: 'Das Schließen des Hochladen Dialogs bricht das Hochladen ab und leert die Warteschlange.',
+ errupload: 'Hochladen fehlgeschlagen: '
+ },
+ format: {
+ title: 'Formatieren',
+ messrow1a: 'Möchten Sie ',
+ messrow1b: ' formatieren?',
+ messrow2: 'Formatieren löscht alle Daten!',
+ messrow3: 'Formatieren dauert ca. 10 Sekunden, bitte warten.',
+ formatok: 'Formatieren erfolgreich!',
+ formaterr: 'Formatieren fehlgeschlagen!: '
+ },
+ del: {
+ title: 'Löschen',
+ message: 'Dateien: ',
+ messageend: ' löschen?',
+ error: 'Löschen der Datei fehlgeschlagen!: ',
+ deleteok: 'Datei erfolgreich gelöscht!'
+ },
+ dfumode: {
+ title: 'DFU Modus',
+ startconfirm: 'DFU Modus aktivieren?',
+ updateconfirm: 'DFU Modus erfolgreich aktiviert. Möchten Sie die DFU Aktualisierungs Seite aufrufen?',
+ updatetitle: 'DFU Modus akzeptiert'
+ },
+ oldfirm: {
+ title: 'Aktualisierungs Tips',
+ message: 'Die Firmware Version ihres Gerätes ist zu niedrig. Bitte aktualisieren Sie es auf die neueste Firmware, bevor Sie die Hochladen Funktion verwenden.'
+ },
+ newfolder: {
+ title: 'Neuer Ordner',
+ message: 'Bitte geben Sie den Ordner Namen ein',
+ newfoldererr: 'Ordner erstellen fehlgeschlagen!:'
+ },
+ rename: {
+ title: 'Umbennenen',
+ message: 'Bitte geben Sie den neuen Dateinamen ein: ',
+ errrename: 'Umbenennen fehlgeschlagen!: ',
+ nametoolong: 'Die maximale Dateipfadlänge darf 63 Bytes nicht überschreiten',
+ pathtoolong: 'Die maximale Dateinamenlänge darf 47 Bytes nicht überschreiten'
+ },
+ drive: {
+ message: '(Speicher nicht verügbar [Fehler: ',
+ messageend: '])'
+ }
+}
diff --git a/web/src/i18n/es_ES.js b/web/src/i18n/es_ES.js
index 6e9d94b2..485be0e2 100644
--- a/web/src/i18n/es_ES.js
+++ b/web/src/i18n/es_ES.js
@@ -6,6 +6,7 @@ export default {
en: 'English',
es: 'Español',
ru: 'Русский',
+ de: 'Deutsch',
changeok: 'Cambio Idioma Satisfactorio'
},
btn: {
diff --git a/web/src/i18n/index.js b/web/src/i18n/index.js
index 23019b95..88aa677e 100644
--- a/web/src/i18n/index.js
+++ b/web/src/i18n/index.js
@@ -5,11 +5,13 @@ import elementZhCnLocale from 'element-ui/lib/locale/lang/zh-CN'// element-ui la
import elementEsLocale from 'element-ui/lib/locale/lang/es'// element-ui lang
import elementZhTwLocale from 'element-ui/lib/locale/lang/zh-TW'// element-ui lang
import elementRuLocale from 'element-ui/lib/locale/lang/ru-RU'// element-ui lang
+import elementDeLocale from 'element-ui/lib/locale/lang/de' // element-ui lang
import enLocale from './en_US'
import zhTWLocale from './zh_TW'
import zhCNLocale from './zh_Hans'
import esLocale from './es_ES'
import ruLocale from "./ru_RU";
+import deLocale from "./de_DE";
Vue.use(VueI18n)
@@ -34,6 +36,10 @@ const messages = {
ru_RU: {
... ruLocale,
... elementRuLocale
+ },
+ de_DE: {
+ ... deLocale,
+ ... elementDeLocale
}
}
export function getLanguage() {
diff --git a/web/src/i18n/ru_RU.js b/web/src/i18n/ru_RU.js
index 71134018..3cda5253 100644
--- a/web/src/i18n/ru_RU.js
+++ b/web/src/i18n/ru_RU.js
@@ -6,6 +6,7 @@ export default {
en: 'English',
es: 'Español',
ru: 'Русский',
+ de: 'Deutsch',
changeok: 'Язык изменен успешно!',
},
diff --git a/web/src/i18n/zh_Hans.js b/web/src/i18n/zh_Hans.js
index 9eb1c8c0..7478e397 100644
--- a/web/src/i18n/zh_Hans.js
+++ b/web/src/i18n/zh_Hans.js
@@ -6,6 +6,7 @@ export default {
en: 'English',
es: 'Español',
ru: 'Русский',
+ de: 'Deutsch',
changeok: '语言切换成功!'
},
btn: {
diff --git a/web/src/i18n/zh_TW.js b/web/src/i18n/zh_TW.js
index c41fc784..a6aa4bd5 100644
--- a/web/src/i18n/zh_TW.js
+++ b/web/src/i18n/zh_TW.js
@@ -6,6 +6,7 @@ export default {
en: 'English',
es: 'Español',
ru: 'Русский',
+ de: 'Deutsch',
changeok: '語言切換成功!'
},
btn: {