Как делается переключение языка?
- Войдите на сайт для отправки комментариев
Втр, 19/03/2019 - 18:40
Есть дисплей (SPI ILI9341), хочется сделать возможность переключать язык (англ, русс, потом ещё и другие добавлю).
Помогите понять логику правильной/оптимальной реализации переключения языка, пожалуйста.
Можно просто что-то типа такого:
if (language == 1) { tft.print(utf8rus("Молоко"); // это роботает, см. ниже } else { tft.print("Milk"); }
Но фраз будет много - громоздко получится, если делать такую проверку (if) прямо в коде вывода фразы на экран.
Как же лучше сделать?
=======
Кому интересно, вот функция обработки кириллических символов:
String utf8rus(String source) // Функция для конвертации русских символов из двубайтовой кодировки в однобайтовую { int i,k; String target; unsigned char n; char m[2] = { '0', '\0' }; k = source.length(); i = 0; while (i < k) { n = source[i]; i++; if (n >= 0xBF){ switch (n) { case 0xD0: { n = source[i]; i++; if (n == 0x81) { n = 0xA8; break; } if (n >= 0x90 && n <= 0xBF) n = n + 0x2F; break; } case 0xD1: { n = source[i]; i++; if (n == 0x91) { n = 0xB7; break; } if (n >= 0x80 && n <= 0x8F) n = n + 0x6F; break; } } } m[0] = n; target = target + String(m); } return target; }
Вариант - организуете все строчки на одном языке в массив. Потом делаете полную копию первого массива. но уже на другом языке.
Теперь, когда вам надо сменить язык - просто подменяете один массив другим.
Тут требуется крепко подумать вот над чем: нужны ли эти строки в RAM , а если нет, то будет ли перекодировать ваша функция, если ей скормить PROGMEM-ресурс.
... Теперь, когда вам надо сменить язык - просто подменяете один массив другим.
Тут требуется крепко подумать вот над чем: нужны ли эти строки в RAM , а если нет, то будет ли перекодировать ваша функция, если ей скормить PROGMEM-ресурс.
:)
Я предлагаю подумать, как и написал ранее... А подмена делается через указатель в одно движение.
Я предлагаю подумать, как и написал ранее... А подмена делается через указатель в одно движение.
:)) ......... (ждите - "а что такое указатель?")
Дак мне не жалко указателей отсыпать...
:)) ......... (ждите - "а что такое указатель?")
:)) ......... (ждите - "а что такое указатель?")
Вангую, это был не xDriver.))))
:)) ......... (ждите - "а что такое указатель?")
Вангую, это был не xDriver.))))
Наверно, чтобы новичек, выучил терминологию.))) Хотя, ладно, брюзжу, по стариковски. Но плюсик, в противовес, ему добавил.
будет ли перекодировать ваша функция, если ей скормить PROGMEM-ресурс
Функция utf8rus() теперь может и с PROGMEM-строками работать (пост #405): http://arduino.ru/forum/programmirovanie/rusifikatsiya-biblioteki-adafru...
Кому интересно, вот функция обработки кириллических символов
Кому интересно :) могут пример для дисплея 9341 в посте #46 посмотреть: http://arduino.ru/forum/programmirovanie/rusifikatsiya-biblioteki-adafru...
Спасибо, буду пробовать. Что именно означает команда "display.cp437(true);"?
Спасибо, буду пробовать. Что именно означает команда "display.cp437(true);"?
Пост #15: http://arduino.ru/forum/programmirovanie/rusifikatsiya-biblioteki-adafru...