Change translation defs to specify fonts to use
This commit is contained in:
@@ -1,5 +1,4 @@
|
||||
import functools
|
||||
from typing import Dict
|
||||
from typing import Dict, Final, Tuple
|
||||
|
||||
|
||||
def get_font_map_ascii_basic() -> Dict[str, bytes]:
|
||||
@@ -856,19 +855,20 @@ def get_small_font_map_cyrillic() -> Dict[str, bytes]:
|
||||
return font
|
||||
|
||||
|
||||
@functools.lru_cache(maxsize=None)
|
||||
def get_font_map() -> Dict[str, bytes]:
|
||||
return {
|
||||
**get_font_map_ascii_basic(),
|
||||
**get_font_map_latin_extended(),
|
||||
**get_font_map_cyrillic(),
|
||||
}
|
||||
NAME_ASCII_BASIC: Final = "ascii_basic"
|
||||
NAME_LATIN_EXTENDED: Final = "latin_extended"
|
||||
NAME_CYRILLIC: Final = "cyrillic"
|
||||
NAME_CJK: Final = "cjk"
|
||||
|
||||
|
||||
@functools.lru_cache(maxsize=None)
|
||||
def get_small_font_map() -> Dict[str, bytes]:
|
||||
return {
|
||||
**get_small_font_map_ascii_basic(),
|
||||
**get_small_font_map_latin_extended(),
|
||||
**get_small_font_map_cyrillic(),
|
||||
}
|
||||
def get_font_maps_for_name(
|
||||
font_name: str,
|
||||
) -> Tuple[Dict[str, bytes], Dict[str, bytes]]:
|
||||
if font_name == NAME_ASCII_BASIC:
|
||||
return get_font_map_ascii_basic(), get_small_font_map_ascii_basic()
|
||||
elif font_name == NAME_LATIN_EXTENDED:
|
||||
return get_font_map_latin_extended(), get_small_font_map_latin_extended()
|
||||
elif font_name == NAME_CYRILLIC:
|
||||
return get_font_map_cyrillic(), get_small_font_map_cyrillic()
|
||||
else:
|
||||
raise ValueError("Invalid font name")
|
||||
|
||||
@@ -301,8 +301,89 @@ class FontMap:
|
||||
font06: Dict[str, Optional[bytes]]
|
||||
|
||||
|
||||
@dataclass
|
||||
class FontMapsPerFont:
|
||||
font12_maps: Dict[str, Dict[str, bytes]]
|
||||
font06_maps: Dict[str, Dict[str, Optional[bytes]]]
|
||||
sym_lists: Dict[str, List[str]]
|
||||
|
||||
|
||||
def get_font_map_per_font(text_list: List[str], fonts: List[str]) -> FontMapsPerFont:
|
||||
pending_sym_set = set(text_list)
|
||||
if len(pending_sym_set) != len(text_list):
|
||||
raise ValueError("`text_list` contains duplicated symbols")
|
||||
|
||||
if fonts[0] != font_tables.NAME_ASCII_BASIC:
|
||||
raise ValueError(
|
||||
f'First item in `fonts` must be "{font_tables.NAME_ASCII_BASIC}"'
|
||||
)
|
||||
|
||||
total_symbol_count = len(text_list)
|
||||
# \x00 is for NULL termination and \x01 is for newline, so the maximum
|
||||
# number of symbols allowed is as follow (see also the comments in
|
||||
# `get_bytes_from_font_index`):
|
||||
if total_symbol_count > (0x10 * 0xFF - 15) - 2: # 4063
|
||||
raise ValueError(
|
||||
f"Error, too many used symbols for this version (total {total_symbol_count})"
|
||||
)
|
||||
|
||||
logging.info(f"Generating fonts for {total_symbol_count} symbols")
|
||||
|
||||
# Collect font bitmaps by the defined font order:
|
||||
font12_maps: Dict[str, Dict[str, bytes]] = {}
|
||||
font06_maps: Dict[str, Dict[str, Optional[bytes]]] = {}
|
||||
sym_lists: Dict[str, List[str]] = {}
|
||||
for font in fonts:
|
||||
font12_maps[font] = {}
|
||||
font12_map = font12_maps[font]
|
||||
font06_maps[font] = {}
|
||||
font06_map = font06_maps[font]
|
||||
sym_lists[font] = []
|
||||
sym_list = sym_lists[font]
|
||||
|
||||
if len(pending_sym_set) == 0:
|
||||
logging.warning(
|
||||
f"Font {font} not used because all symbols already have font bitmaps"
|
||||
)
|
||||
continue
|
||||
|
||||
if font == font_tables.NAME_CJK:
|
||||
is_cjk = True
|
||||
else:
|
||||
is_cjk = False
|
||||
font12: Dict[str, bytes]
|
||||
font06: Dict[str, bytes]
|
||||
font12, font06 = font_tables.get_font_maps_for_name(font)
|
||||
|
||||
for sym in text_list:
|
||||
if sym not in pending_sym_set:
|
||||
continue
|
||||
if is_cjk:
|
||||
font12_line = get_cjk_glyph(sym)
|
||||
if font12_line is None:
|
||||
continue
|
||||
font06_line = None
|
||||
else:
|
||||
try:
|
||||
font12_line = font12[sym]
|
||||
font06_line = font06[sym]
|
||||
except KeyError:
|
||||
continue
|
||||
font12_map[sym] = font12_line
|
||||
font06_map[sym] = font06_line
|
||||
sym_list.append(sym)
|
||||
pending_sym_set.remove(sym)
|
||||
|
||||
if len(sym_list) == 0:
|
||||
logging.warning(f"Font {font} not used by any symbols on the list")
|
||||
if len(pending_sym_set) > 0:
|
||||
raise KeyError(f"Symbols not found in specified fonts: {pending_sym_set}")
|
||||
|
||||
return FontMapsPerFont(font12_maps, font06_maps, sym_lists)
|
||||
|
||||
|
||||
def get_font_map_and_table(
|
||||
text_list: List[str],
|
||||
text_list: List[str], fonts: List[str]
|
||||
) -> Tuple[List[str], FontMap, Dict[str, bytes]]:
|
||||
# the text list is sorted
|
||||
# allocate out these in their order as number codes
|
||||
@@ -310,62 +391,38 @@ def get_font_map_and_table(
|
||||
index = 2 # start at 2, as 0= null terminator,1 = new line
|
||||
forced_first_symbols = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
|
||||
|
||||
# Get the font table, which does not include CJK chars
|
||||
font_table: Dict[str, bytes] = font_tables.get_font_map()
|
||||
font_small_table: Dict[str, bytes] = font_tables.get_small_font_map()
|
||||
|
||||
# We want to put all CJK chars after non-CJK ones so that the CJK chars
|
||||
# do not need to be in the small font table to save space.
|
||||
# We assume all symbols not in the font table to be a CJK char.
|
||||
# We also enforce that numbers are first.
|
||||
ordered_normal_sym_list: List[str] = forced_first_symbols + [
|
||||
x for x in text_list if x not in forced_first_symbols and x in font_table
|
||||
]
|
||||
ordered_cjk_sym_list: List[str] = [
|
||||
x for x in text_list if x not in forced_first_symbols and x not in font_table
|
||||
# We enforce that numbers come first.
|
||||
text_list = forced_first_symbols + [
|
||||
x for x in text_list if x not in forced_first_symbols
|
||||
]
|
||||
|
||||
total_symbol_count = len(ordered_normal_sym_list) + len(ordered_cjk_sym_list)
|
||||
# \x00 is for NULL termination and \x01 is for newline, so the maximum
|
||||
# number of symbols allowed is as follow (see also the comments in
|
||||
# `get_bytes_from_font_index`):
|
||||
if total_symbol_count > (0x10 * 0xFF - 15) - 2: # 4063
|
||||
logging.error(
|
||||
f"Error, too many used symbols for this version (total {total_symbol_count})"
|
||||
)
|
||||
sys.exit(1)
|
||||
font_maps = get_font_map_per_font(text_list, fonts)
|
||||
font12_maps = font_maps.font12_maps
|
||||
font06_maps = font_maps.font06_maps
|
||||
|
||||
logging.info(f"Generating fonts for {total_symbol_count} symbols")
|
||||
# Build the full font maps
|
||||
font12_map = {}
|
||||
font06_map = {}
|
||||
for font in fonts:
|
||||
font12_map.update(font12_maps[font])
|
||||
font06_map.update(font06_maps[font])
|
||||
|
||||
sym_list = ordered_normal_sym_list + ordered_cjk_sym_list
|
||||
for sym in sym_list:
|
||||
if sym in symbol_map:
|
||||
raise ValueError("Symbol not found in symbol map")
|
||||
# Collect all symbols by the original symbol order, but also making sure
|
||||
# all symbols with only large font must be placed after all symbols with
|
||||
# both small and large fonts
|
||||
sym_list_both_fonts = []
|
||||
sym_list_large_only = []
|
||||
for sym in text_list:
|
||||
if font06_map[sym] is None:
|
||||
sym_list_large_only.append(sym)
|
||||
else:
|
||||
sym_list_both_fonts.append(sym)
|
||||
sym_list = sym_list_both_fonts + sym_list_large_only
|
||||
|
||||
# Assign symbol bytes by font index
|
||||
for index, sym in enumerate(sym_list, index):
|
||||
assert sym not in symbol_map
|
||||
symbol_map[sym] = get_bytes_from_font_index(index)
|
||||
index += 1
|
||||
|
||||
font12_map: Dict[str, bytes] = {}
|
||||
font06_map: Dict[str, Optional[bytes]] = {}
|
||||
for sym in ordered_normal_sym_list:
|
||||
if sym not in font_table:
|
||||
logging.error(f"Missing Large font element for {sym}")
|
||||
sys.exit(1)
|
||||
font12_map[sym] = font_table[sym]
|
||||
if sym not in font_small_table:
|
||||
logging.error(f"Missing Small font element for {sym}")
|
||||
sys.exit(1)
|
||||
font06_map[sym] = font_small_table[sym]
|
||||
|
||||
for sym in ordered_cjk_sym_list:
|
||||
if sym in font_table:
|
||||
raise ValueError("Symbol already exists in font_table")
|
||||
font_line = get_cjk_glyph(sym)
|
||||
if font_line is None:
|
||||
logging.error(f"Missing Large font element for {sym}")
|
||||
sys.exit(1)
|
||||
font12_map[sym] = font_line
|
||||
# No data to add to the small font table
|
||||
font06_map[sym] = None
|
||||
|
||||
return sym_list, FontMap(font12_map, font06_map), symbol_map
|
||||
|
||||
@@ -438,7 +495,10 @@ def prepare_language(lang: dict, defs: dict, build_version: str) -> LanguageData
|
||||
# Iterate over all of the text to build up the symbols & counts
|
||||
text_list = get_letter_counts(defs, lang, build_version)
|
||||
# From the letter counts, need to make a symbol translator & write out the font
|
||||
sym_list, font_map, symbol_conversion_table = get_font_map_and_table(text_list)
|
||||
fonts = lang["fonts"]
|
||||
sym_list, font_map, symbol_conversion_table = get_font_map_and_table(
|
||||
text_list, fonts
|
||||
)
|
||||
return LanguageData(
|
||||
lang, defs, build_version, sym_list, font_map, symbol_conversion_table
|
||||
)
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
{
|
||||
"languageCode": "BG",
|
||||
"languageLocalName": "Български",
|
||||
"cyrillicGlyphs": true,
|
||||
"fonts": [
|
||||
"ascii_basic",
|
||||
"cyrillic"
|
||||
],
|
||||
"messages": {
|
||||
"SettingsCalibrationDone": "Калибрацията завършена!",
|
||||
"SettingsCalibrationWarning": "Уверете се, че върха на поялника е със стайна температура преди да продължите!",
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
{
|
||||
"languageCode": "CS",
|
||||
"languageLocalName": "Český",
|
||||
"cyrillicGlyphs": false,
|
||||
"fonts": [
|
||||
"ascii_basic",
|
||||
"latin_extended"
|
||||
],
|
||||
"messages": {
|
||||
"SettingsCalibrationDone": "Kalibrace dokončena!",
|
||||
"SettingsCalibrationWarning": "Ujistěte se, že hrot má pokojovou teplotu!",
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
{
|
||||
"languageCode": "DA",
|
||||
"languageLocalName": "Dansk",
|
||||
"cyrillicGlyphs": false,
|
||||
"fonts": [
|
||||
"ascii_basic",
|
||||
"latin_extended"
|
||||
],
|
||||
"messages": {
|
||||
"SettingsCalibrationDone": "Calibration done!",
|
||||
"SettingsCalibrationWarning": "Sørg for at loddespidsen er ved stuetemperatur, inden du fortsætter!",
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
{
|
||||
"languageCode": "DE",
|
||||
"languageLocalName": "Deutsch",
|
||||
"cyrillicGlyphs": false,
|
||||
"fonts": [
|
||||
"ascii_basic",
|
||||
"latin_extended"
|
||||
],
|
||||
"tempUnitFahrenheit": false,
|
||||
"messages": {
|
||||
"SettingsCalibrationDone": "Kalibrierung abgeschlossen!",
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
{
|
||||
"languageCode": "EN",
|
||||
"languageLocalName": "English",
|
||||
"cyrillicGlyphs": false,
|
||||
"fonts": [
|
||||
"ascii_basic"
|
||||
],
|
||||
"tempUnitFahrenheit": true,
|
||||
"messages": {
|
||||
"SettingsCalibrationDone": "Calibration done!",
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
{
|
||||
"languageCode": "ES",
|
||||
"languageLocalName": "Castellano",
|
||||
"cyrillicGlyphs": false,
|
||||
"fonts": [
|
||||
"ascii_basic",
|
||||
"latin_extended"
|
||||
],
|
||||
"messages": {
|
||||
"SettingsCalibrationDone": "¡Calibrada!",
|
||||
"SettingsCalibrationWarning": "¡Asegúrate que la punta esté a temperatura ambiente antes de empezar!",
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
{
|
||||
"languageCode": "FI",
|
||||
"languageLocalName": "Suomi",
|
||||
"cyrillicGlyphs": false,
|
||||
"fonts": [
|
||||
"ascii_basic",
|
||||
"latin_extended"
|
||||
],
|
||||
"messages": {
|
||||
"SettingsCalibrationWarning": "Varmista että kärki on huoneenlämpöinen ennen jatkamista!",
|
||||
"SettingsResetWarning": "Haluatko varmasti palauttaa oletusarvot?",
|
||||
@@ -301,4 +304,4 @@
|
||||
"desc": "Herätyspulssin kesto (x 250ms)"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
{
|
||||
"languageCode": "FR",
|
||||
"languageLocalName": "Français",
|
||||
"cyrillicGlyphs": false,
|
||||
"fonts": [
|
||||
"ascii_basic",
|
||||
"latin_extended"
|
||||
],
|
||||
"messages": {
|
||||
"SettingsCalibrationDone": "Calibration effectuée !",
|
||||
"SettingsCalibrationWarning": "Assurez-vous que la panne soit à température ambiante avant de continuer !",
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
{
|
||||
"languageCode": "HR",
|
||||
"languageLocalName": "Hrvatski",
|
||||
"cyrillicGlyphs": false,
|
||||
"fonts": [
|
||||
"ascii_basic",
|
||||
"latin_extended"
|
||||
],
|
||||
"messages": {
|
||||
"SettingsCalibrationDone": "Kalibracija gotova!",
|
||||
"SettingsCalibrationWarning": "Provjerite da je vršak ohlađen na sobnu temperaturu prije nego što nastavite!",
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
{
|
||||
"languageCode": "HU",
|
||||
"languageLocalName": "Magyar",
|
||||
"cyrillicGlyphs": false,
|
||||
"fonts": [
|
||||
"ascii_basic",
|
||||
"latin_extended"
|
||||
],
|
||||
"messages": {
|
||||
"SettingsCalibrationDone": "Kalibráció befejezve!",
|
||||
"SettingsCalibrationWarning": "Folytatás előtt győződjön meg róla, hogy a páka szobahőmérsékletű!",
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
{
|
||||
"languageCode": "IT",
|
||||
"languageLocalName": "Italiano",
|
||||
"cyrillicGlyphs": false,
|
||||
"fonts": [
|
||||
"ascii_basic",
|
||||
"latin_extended"
|
||||
],
|
||||
"messages": {
|
||||
"SettingsCalibrationDone": "Calibrazione effettuata",
|
||||
"SettingsCalibrationWarning": "Assicurati che la punta si trovi a temperatura ambiente prima di continuare!",
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
{
|
||||
"languageCode": "JA_JP",
|
||||
"languageLocalName": "日本語",
|
||||
"cyrillicGlyphs": false,
|
||||
"fonts": [
|
||||
"ascii_basic",
|
||||
"cjk"
|
||||
],
|
||||
"tempUnitFahrenheit": true,
|
||||
"messages": {
|
||||
"SettingsCalibrationDone": "校正完了",
|
||||
@@ -200,4 +203,4 @@
|
||||
"desc": "電源供給元をオンに保つために使用される、電力パルスの時間長 <x250ms(ミリ秒)>"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
{
|
||||
"languageCode": "LT",
|
||||
"languageLocalName": "Lietuvių",
|
||||
"cyrillicGlyphs": false,
|
||||
"fonts": [
|
||||
"ascii_basic",
|
||||
"latin_extended"
|
||||
],
|
||||
"messages": {
|
||||
"SettingsCalibrationDone": "Kalibravimas atliktas!",
|
||||
"SettingsCalibrationWarning": "Prieš tęsdami įsitikinkite, kad antgalis yra kambario temperatūros!",
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
{
|
||||
"languageCode": "NL",
|
||||
"languageLocalName": "Nederlands",
|
||||
"cyrillicGlyphs": false,
|
||||
"fonts": [
|
||||
"ascii_basic",
|
||||
"latin_extended"
|
||||
],
|
||||
"messages": {
|
||||
"SettingsCalibrationDone": "Calibratie klaar!",
|
||||
"SettingsCalibrationWarning": "Zorg ervoor dat te punt op kamertemperatuur is voor je verder gaat!",
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
{
|
||||
"languageCode": "NL_BE",
|
||||
"languageLocalName": "Vlaams",
|
||||
"cyrillicGlyphs": false,
|
||||
"fonts": [
|
||||
"ascii_basic",
|
||||
"latin_extended"
|
||||
],
|
||||
"messages": {
|
||||
"SettingsCalibrationDone": "Gecalibreerd!",
|
||||
"SettingsCalibrationWarning": "Zorg vooraf dat de punt op kamertemperatuur is!",
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
{
|
||||
"languageCode": "NO",
|
||||
"languageLocalName": "Norsk",
|
||||
"cyrillicGlyphs": false,
|
||||
"fonts": [
|
||||
"ascii_basic",
|
||||
"latin_extended"
|
||||
],
|
||||
"messages": {
|
||||
"SettingsCalibrationDone": "Calibration done!",
|
||||
"SettingsCalibrationWarning": "Sørg for at loddespissen har romtemperatur før du fortsetter!",
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
{
|
||||
"languageCode": "PL",
|
||||
"languageLocalName": "Polski",
|
||||
"cyrillicGlyphs": false,
|
||||
"fonts": [
|
||||
"ascii_basic",
|
||||
"latin_extended"
|
||||
],
|
||||
"tempUnitFahrenheit": false,
|
||||
"messages": {
|
||||
"SettingsCalibrationDone": "Kalibracja udana!",
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
{
|
||||
"languageCode": "PT",
|
||||
"languageLocalName": "Português",
|
||||
"cyrillicGlyphs": false,
|
||||
"fonts": [
|
||||
"ascii_basic",
|
||||
"latin_extended"
|
||||
],
|
||||
"messages": {
|
||||
"SettingsCalibrationDone": "Calibração terminada!",
|
||||
"SettingsCalibrationWarning": "A ponta deve estar à temperatura ambiente antes de continuar!",
|
||||
|
||||
@@ -1,7 +1,11 @@
|
||||
{
|
||||
"languageCode": "RU",
|
||||
"languageLocalName": "Русский",
|
||||
"cyrillicGlyphs": true,
|
||||
"fonts": [
|
||||
"ascii_basic",
|
||||
"latin_extended",
|
||||
"cyrillic"
|
||||
],
|
||||
"messages": {
|
||||
"SettingsCalibrationDone": "Калибровка завершена!",
|
||||
"SettingsCalibrationWarning": "Прежде чем продолжить, пожалуйста, убедитесь, что жало имеет комнатную температуру!",
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
{
|
||||
"languageCode": "SK",
|
||||
"languageLocalName": "Slovenčina",
|
||||
"cyrillicGlyphs": false,
|
||||
"fonts": [
|
||||
"ascii_basic",
|
||||
"latin_extended"
|
||||
],
|
||||
"messages": {
|
||||
"SettingsCalibrationDone": "Kalibrácia hotová!",
|
||||
"SettingsCalibrationWarning": "Najprv sa prosím uistite, že hrot má izbovú teplotu!",
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
{
|
||||
"languageCode": "SL",
|
||||
"languageLocalName": "Slovenščina",
|
||||
"cyrillicGlyphs": false,
|
||||
"fonts": [
|
||||
"ascii_basic",
|
||||
"latin_extended"
|
||||
],
|
||||
"messages": {
|
||||
"SettingsCalibrationDone": "Kalibracija opravljena!",
|
||||
"SettingsCalibrationWarning": "Pred nadaljevanjem mora biti konica segreta na sobno temperaturo!",
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
{
|
||||
"languageCode": "SR_CYRL",
|
||||
"languageLocalName": "Српски",
|
||||
"cyrillicGlyphs": true,
|
||||
"fonts": [
|
||||
"ascii_basic",
|
||||
"cyrillic"
|
||||
],
|
||||
"messages": {
|
||||
"SettingsCalibrationDone": "Калибрација готова",
|
||||
"SettingsCalibrationWarning": "Проверите да ли је врх охлађен на собну температуру пре него што наставите",
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
{
|
||||
"languageCode": "SR_LATN",
|
||||
"languageLocalName": "Srpski",
|
||||
"cyrillicGlyphs": false,
|
||||
"fonts": [
|
||||
"ascii_basic",
|
||||
"latin_extended"
|
||||
],
|
||||
"messages": {
|
||||
"SettingsCalibrationDone": "Kalibracija gotova",
|
||||
"SettingsCalibrationWarning": "Proverite da li je vrh ohlađen na sobnu temperaturu pre nego što nastavite",
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
{
|
||||
"languageCode": "SV",
|
||||
"languageLocalName": "Svenska",
|
||||
"cyrillicGlyphs": false,
|
||||
"fonts": [
|
||||
"ascii_basic",
|
||||
"latin_extended"
|
||||
],
|
||||
"messages": {
|
||||
"SettingsCalibrationDone": "Calibration done!",
|
||||
"SettingsCalibrationWarning": "Please ensure the tip is at room temperature before continuing!",
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
{
|
||||
"languageCode": "TR",
|
||||
"languageLocalName": "Türkçe",
|
||||
"cyrillicGlyphs": false,
|
||||
"fonts": [
|
||||
"ascii_basic",
|
||||
"latin_extended"
|
||||
],
|
||||
"messages": {
|
||||
"SettingsCalibrationDone": "Kalibrasyon tamamlandı!",
|
||||
"SettingsCalibrationWarning": "Lütfen devam etmeden önce ucun oda sıcaklığında olduğunu garantiye alın!",
|
||||
|
||||
@@ -1,7 +1,11 @@
|
||||
{
|
||||
"languageCode": "UK",
|
||||
"languageLocalName": "Українська",
|
||||
"cyrillicGlyphs": true,
|
||||
"fonts": [
|
||||
"ascii_basic",
|
||||
"latin_extended",
|
||||
"cyrillic"
|
||||
],
|
||||
"messages": {
|
||||
"SettingsCalibrationDone": "Калібрування виконане!",
|
||||
"SettingsCalibrationWarning": "Переконайтеся, що жало охололо до кімнатної температури, перш ніж продовжувати!",
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
{
|
||||
"languageCode": "YUE_HK",
|
||||
"languageLocalName": "廣東話 (香港)",
|
||||
"cyrillicGlyphs": false,
|
||||
"fonts": [
|
||||
"ascii_basic",
|
||||
"cjk"
|
||||
],
|
||||
"tempUnitFahrenheit": true,
|
||||
"messages": {
|
||||
"SettingsCalibrationDone": "校正完成!",
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
{
|
||||
"languageCode": "ZH_CN",
|
||||
"languageLocalName": "简体中文",
|
||||
"cyrillicGlyphs": false,
|
||||
"fonts": [
|
||||
"ascii_basic",
|
||||
"cjk"
|
||||
],
|
||||
"tempUnitFahrenheit": true,
|
||||
"messages": {
|
||||
"SettingsCalibrationDone": "校正完成!",
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
{
|
||||
"languageCode": "ZH_TW",
|
||||
"languageLocalName": "正體中文",
|
||||
"cyrillicGlyphs": false,
|
||||
"fonts": [
|
||||
"ascii_basic",
|
||||
"cjk"
|
||||
],
|
||||
"tempUnitFahrenheit": true,
|
||||
"messages": {
|
||||
"SettingsCalibrationDone": "校正完成!",
|
||||
|
||||
Reference in New Issue
Block a user