-
Notifications
You must be signed in to change notification settings - Fork 5
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Yboichuk/sdk/language localization module #76
base: main
Are you sure you want to change the base?
Conversation
e17861d
to
d9904e9
Compare
Ідея хороша, але робити це в ран-таймі не дає ніяких переваг. |
Можна ще спробувати підключити якусь лібу для цього, яка б була сумісна з, скажімо, gettext |
Ось варіант, як можна мінімізувати час пошуку перекладу і переконатись, що ніхто не забуде перекласти якусь стрінгу: // lilka/i18n.h
#include <stdio.h>
#define TR(KEY) (lang == UA) ? HELLO_UA : HELLO_EN
typedef enum {
UA,
EN,
} lang_t;
lang_t lang = UA;
void setLang(lang_t newLang) {
lang = newLang;
} // myapp.h
#define HELLO_UA "Привіт!"
#define HELLO_EN "Hello!"
// myapp.cpp
void foo() {
printf("%s\n", TR(HELLO));
setLang(EN);
printf("%s\n", TR(HELLO));
return 0;
} // otherapp.h
#define GOODBYE_UA "Бувай!"
#define GOODBYE_EN "Goodbye!"
// otherapp.cpp
void bar() {
printf("%s\n", TR(GOODBYE));
return 0;
} В результаті, всі стрінги будуть визначені на етапі компіляції, а їх вибір буде здійснюватись тернарним оператором в ран-таймі (макро |
В моєму випадку можлива підтримка любої кількості мов і розробка додатків з підтримкою тих мов які ти знаєш з можливим доповненням в подальшому. В твоєму випадку ми прив'язані що обов'язково має бути переклад на дві мови. Можна попередити що стягування "мовного пакету" варто(не обов'язково) робити тільки при ініціалізації апки, а не в циклі |
(на жаль, не маю зараз змоги приєднатися до проекту, хіба оце трохи своїх міркувань додати) #define GOODBYE_UA "Бувай!"
#define GOODBYE_EN GOODBY_UA і доперекласти пізніше. p.s. Мабуть, малося на увазі #define TR(KEY) ((lang == UA) ? KEY ## _UA : KEY ## _EN) // Якщо хочемо за умовчанням EN |
4563cc8
to
14a952c
Compare
add support for multi language on keira os
` // Initialize the Localization object
lilka::Localization localization;
// Add some localized strings
localization.addString(lilka::Language_Code::EN, "greeting", "Hello");
localization.addString(lilka::Language_Code::UA, "greeting", "Привіт");
// Get the greeting message in English
String greetingEn = localization.getString(lilka::Language_Code::EN, "greeting");
Serial.begin(9600);
Serial.println(greetingEn);
// Get the greeting message in Ukrainian
String greetingUa = localization.getString(lilka::Language_Code::UA, "greeting");
Serial.println(greetingUa);
`