mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-01-19 00:37:25 +01:00
[apps/i18n] Default message ("") has index 0
This commit is contained in:
90
apps/i18n.py
90
apps/i18n.py
@@ -80,39 +80,36 @@ def parse_files(files):
|
||||
def print_header(data, path, locales):
|
||||
f = open(path, 'w')
|
||||
f.write("#ifndef APPS_I18N_H\n")
|
||||
f.write("#define APPS_I18N_H\n")
|
||||
f.write("\n")
|
||||
f.write("// This file is auto-generated by i18n.py\n")
|
||||
f.write("\n")
|
||||
f.write("#include <escher.h>\n")
|
||||
f.write("\n")
|
||||
f.write("namespace I18n {\n")
|
||||
f.write("\n")
|
||||
f.write("constexpr static int NumberOfLanguages = %d;\n" % len(locales))
|
||||
f.write("\n")
|
||||
f.write("#define APPS_I18N_H\n\n")
|
||||
f.write("// This file is auto-generated by i18n.py\n\n")
|
||||
f.write("#include <escher.h>\n\n")
|
||||
f.write("namespace I18n {\n\n")
|
||||
f.write("constexpr static int NumberOfLanguages = %d;\n\n" % len(locales))
|
||||
|
||||
# Messages enumeration
|
||||
f.write("enum class Message : uint16_t {\n")
|
||||
for message in data["messages"]:
|
||||
f.write(" " + message + ",\n")
|
||||
f.write("\n")
|
||||
f.write(" UniversalMessageMarker,\n")
|
||||
f.write("\n")
|
||||
f.write(" Default = 0,\n")
|
||||
for message in data["universal_messages"]:
|
||||
f.write(" " + message + ",\n")
|
||||
f.write("};\n")
|
||||
f.write("\n")
|
||||
f.write(" LocalizedMessageMarker,\n\n")
|
||||
for message in data["messages"]:
|
||||
f.write(" " + message + ",\n")
|
||||
f.write("};\n\n")
|
||||
|
||||
# Languages enumeration
|
||||
f.write("enum class Language : uint16_t {\n")
|
||||
f.write(" Default = 0,\n")
|
||||
for locale in locales:
|
||||
f.write(" " + locale.upper() + ",\n")
|
||||
f.write("};\n")
|
||||
f.write("\n")
|
||||
f.write("};\n\n")
|
||||
|
||||
# Language names
|
||||
f.write("constexpr const Message LanguageNames[NumberOfLanguages] = {\n");
|
||||
for locale in locales:
|
||||
f.write(" Message::Language" + locale.upper() + ",\n")
|
||||
f.write("};\n")
|
||||
f.write("\n")
|
||||
f.write("}\n")
|
||||
f.write("\n")
|
||||
f.write("};\n\n")
|
||||
f.write("}\n\n")
|
||||
f.write("#endif\n")
|
||||
f.close()
|
||||
|
||||
@@ -120,10 +117,22 @@ def print_implementation(data, path, locales):
|
||||
f = open(path, 'w')
|
||||
f.write("#include \"i18n.h\"\n")
|
||||
f.write("#include \"global_preferences.h\"\n")
|
||||
f.write("#include <assert.h>\n");
|
||||
f.write("\n")
|
||||
f.write("namespace I18n {\n")
|
||||
f.write("#include <assert.h>\n\n");
|
||||
f.write("namespace I18n {\n\n")
|
||||
|
||||
# Write the default message
|
||||
f.write("constexpr static char universalDefault[] = {0};\n")
|
||||
# Write the universal messages
|
||||
for message in data["universal_messages"]:
|
||||
f.write("constexpr static char universal" + message + "[] = " + data["data"]["universal"][message] + ";\n")
|
||||
f.write("\n")
|
||||
f.write("constexpr static const char * universalMessages[%d] = {\n" % (len(data["universal_messages"])+1))
|
||||
f.write(" universalDefault,\n")
|
||||
for message in data["universal_messages"]:
|
||||
f.write(" universal" + message + ",\n")
|
||||
f.write("};\n\n")
|
||||
|
||||
# Write the localized messages
|
||||
for message in data["messages"]:
|
||||
for locale in locales:
|
||||
if not locale in data["data"]:
|
||||
@@ -140,32 +149,25 @@ def print_implementation(data, path, locales):
|
||||
for locale in locales:
|
||||
f.write(locale + message + ", ")
|
||||
f.write("},\n")
|
||||
f.write("};\n")
|
||||
f.write("\n")
|
||||
for message in data["universal_messages"]:
|
||||
f.write("constexpr static char universal" + message + "[] = " + data["data"]["universal"][message] + ";\n")
|
||||
f.write("\n")
|
||||
f.write("constexpr static const char * universalMessages[%d] = {\n" % len(data["universal_messages"]))
|
||||
for message in data["universal_messages"]:
|
||||
f.write(" universal" + message + ",\n")
|
||||
f.write("};\n")
|
||||
f.write("\n")
|
||||
f.write("};\n\n")
|
||||
|
||||
# Write the translate method
|
||||
f.write("const char * translate(Message m, Language l) {\n")
|
||||
f.write(" assert(m != Message::UniversalMessageMarker);\n")
|
||||
f.write(" int universalMessageOffset = (int)Message::UniversalMessageMarker+1;\n")
|
||||
f.write(" if ((int)m >= universalMessageOffset) {\n")
|
||||
f.write(" assert(universalMessages[(int)m - universalMessageOffset] != nullptr);\n")
|
||||
f.write(" return universalMessages[(int)m - universalMessageOffset];\n")
|
||||
f.write(" assert(m != Message::LocalizedMessageMarker);\n")
|
||||
f.write(" int localizedMessageOffset = (int)Message::LocalizedMessageMarker+1;\n")
|
||||
f.write(" if ((int)m < localizedMessageOffset) {\n")
|
||||
f.write(" assert(universalMessages[(int)m] != nullptr);\n")
|
||||
f.write(" return universalMessages[(int)m];\n")
|
||||
f.write(" }\n")
|
||||
f.write(" int languageIndex = (int)l;\n")
|
||||
f.write(" if (l == Language::Default) {\n")
|
||||
f.write(" languageIndex = (int) GlobalPreferences::sharedGlobalPreferences()->language();\n")
|
||||
f.write(" }\n")
|
||||
f.write(" assert(languageIndex > 0);\n")
|
||||
f.write(" assert(((int)m*NumberOfLanguages+languageIndex-1)*sizeof(char *) < sizeof(messages));\n")
|
||||
f.write(" return messages[(int)m][languageIndex-1];\n")
|
||||
f.write("}\n")
|
||||
f.write("\n")
|
||||
f.write(" int messageIndex = (int)m - localizedMessageOffset;\n")
|
||||
f.write(" assert((messageIndex*NumberOfLanguages+languageIndex-1)*sizeof(char *) < sizeof(messages));\n")
|
||||
f.write(" return messages[messageIndex][languageIndex-1];\n")
|
||||
f.write("}\n\n")
|
||||
f.write("}\n")
|
||||
f.close()
|
||||
|
||||
|
||||
@@ -16,7 +16,6 @@ ConfidenceCommandWithArg = "confidence(f,n)"
|
||||
ConjCommandWithArg = "conj(z)"
|
||||
CoshCommandWithArg = "cosh(x)"
|
||||
D = "d"
|
||||
Default = ""
|
||||
DeterminantCommandWithArg = "det(M)"
|
||||
DiffCommandWithArg = "diff(f(x),x,a)"
|
||||
DimensionCommandWithArg = "dim(M)"
|
||||
|
||||
Reference in New Issue
Block a user