forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Основной форум (http://forum.boolean.name/forumdisplay.php?f=49)
-   -   Текстовые сообщения интерфейса - в виде массива строк? (http://forum.boolean.name/showthread.php?t=6386)

Skythrone 20.09.2008 16:55

Текстовые сообщения интерфейса - в виде массива строк?
 
Добрый день, коллеги!

Хочу поднять тему для обсуждения вопроса наиболее грамотной реализации текстового интерфейса, т.е. набора текстовых сообщений, выдываемых пользователю.

Если тупо загружать всё в переменные внутри проги, то сообщения интерфейса неудобно переводить на другие языки - нужно перекомпилировать весь проект.

Я сейчас сделал так - всё вынес в текстовый ресурсный файл, кодировка win1251. Данный файл я считываю построчно, конвертирую в UTF8, а затем записываю в массив.

Но, к сожалению, данный подход работает весьма медленно. На среднестатистическом телефоне SE K-700 загрузка 200 строк занимает около 8-10 секунд.
Но я видел реальные мидлеты, которые делают это мгновенно на этом же телефоне при таком же подходе к хранению интерфейсных сообщений.

Вопрос - как быть?
Что посоветуют знатоки, чтобы соблюсти следующие условия:
- быстрая загрузка
- минимизация занимаемой памяти (heap)
- возможность перевода на другой язык без пересборки (но это не столь критично, если что, то уж могу и пересобрать.)

odd 21.09.2008 08:09

Ответ: Текстовые сообщения интерфейса - в виде массива строк?
 
Подход правильный. По-моему легче создать пару файлов с разными языками. Тут просто нужна либа для ускорения чтения/перекодировки строки WIN/UTF.

Phantom 25.09.2008 21:43

Ответ: Текстовые сообщения интерфейса - в виде массива строк?
 
Объясните мне, как в char могут храниться символы в utf-8? Ведь в utf-8 каждый символ занимает от 1 до 4 байт, а тип char имеет размер 1 байт. Я чего-то непонимаю и мне это покоя не даёт. В MySQL также, если ставить кодировку utf-8, то все поля всё равно имеют прежний размер, как и при однобайтовых кодировках текста. Не понимаю...

Kurdt 25.09.2008 21:47

Re: Текстовые сообщения интерфейса - в виде массива строк?
 
чтото не так делаешь, у меня все в мгновение грузится

Skythrone 25.09.2008 22:24

Ответ: Текстовые сообщения интерфейса - в виде массива строк?
 
Цитата:

Сообщение от Phantom_wc (Сообщение 86852)
Объясните мне, как в char могут храниться символы в utf-8? Ведь в utf-8 каждый символ занимает от 1 до 4 байт, а тип char имеет размер 1 байт. Я чего-то непонимаю и мне это покоя не даёт. В MySQL также, если ставить кодировку utf-8, то все поля всё равно имеют прежний размер, как и при однобайтовых кодировках текста. Не понимаю...

ИМХО, в utf8 максимальный размер символа - 2 байта, но я могу и ошибаться.

Вопрос о том, сколько реально байт занимает символ, принимает сама система. Если это символ с номером до 255 (латиница и пр.), то один байт.
Если от 256 до 65535 - то 2 байта.

Но вообще это дело мутное. :)

Skythrone 25.09.2008 22:25

Ответ: Re: Текстовые сообщения интерфейса - в виде массива строк?
 
Цитата:

Сообщение от Kurdt (Сообщение 86853)
чтото не так делаешь, у меня все в мгновение грузится

А можешь дать пример кода и ресурсного файла?

Phantom 26.09.2008 00:18

Ответ: Текстовые сообщения интерфейса - в виде массива строк?
 
Один символ в UTF-8 может занимать от одного до 6 байт. В настоящее время используются символы от 1 до 4 байт. 6-и байтовые не используют. [источник]
- - -
Я просто не понимаю, если char - это тип данных, размером в один байт (0-255), то как он вообще принципиально может хранить в себе больше дозволенного? О_о
- - -
Вот что нашёл:
Цитата:

Большинство программ могут работать с UTF-8 как с традиционными однобайтными кодировками, не обращая внимания на то, что символ представляется как несколько последовательных байт. Для работы с отдельными символами строки обычно перекодируются в UCS-4, так что каждому символу соответствует машинное слово.

Одной из первых успешных коммерческих реализаций Юникода стала среда программирования Java. В ней принципиально отказались от 8-битного представления символов в пользу 16-битного. Сейчас большинство языков программирования поддерживают строки Юникода, хотя их представление может различаться в зависимости от реализации.
[источник]
- - -
Любопытно... Значит char = 1 байт - это только условность...
P.S: А Java рулит ;)


Часовой пояс GMT +4, время: 13:18.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot