28.03.2012, 17:46
По просьбе трудящихся описываю свой метод хранения текстов на сервере.
"Все гениальное просто." © Геббельс
Предыстория.
Была поставлена задача:
Была куча идей по реализации, но практически во всех идеях возникали свои недостатки. Основной проблемой была скорость, следующей по значимости была проблема переводов, и наконец немаловажная проблема наглядности и читаемости текстов, сюда же попадает и простота редактирования.
Реализация.
Долго думая и оценивая все системы, я пришел к одному мнения, точнее не я пришел, а пришли до меня, просто я понял что оно мне подходит. А именно, идею я почерпнул, как ни странно звучит, в Joomla. У неё была сделана гениальная и до ужаса простейшая система хранения всех шаблонных фраз.
Структура до боли простая, это массив строк, ключ это короткий текст на английском языке в верхнем регистре, значение искомый текст. Для мультиязычности добавлен ещё один уровень, ключи в котором банальные цифры.
Итак что же получилось в итоге:
Данный код у меня в отдельном инклуде, и я всегда его могу редактировать и расширять не думая о поиски текстов в коде.
Обращение к тестам до неприличного просто:
Я думаю многие скажут что рано или поздно массив разрастется до чудовищных размеров и компилятор начнет ругаться. Согласен, но с другой стороны, чтение тестов из файла или мускула - медленно. Хардкодить тексты это гарантированно отказываться от переводов, если конечно не изобретать дублирующий код, и мучится последующим поиском и редактированием. А если учесть что работа с памятью, для серверной машины, не составляет никакого труда, то я решил пренебречь размером занимаемой памяти.
PS если вам не нужны переводы удалите первый уровень массива.
"Все гениальное просто." © Геббельс
Предыстория.
Была поставлена задача:
- создать простую систему текстов
- которая бы не являлась набором функций
- была наглядно понятна
- имела возможность легкого перевода на любой язык
- легко определялся смысл текста внутри кода
- высокая скорость работы
Была куча идей по реализации, но практически во всех идеях возникали свои недостатки. Основной проблемой была скорость, следующей по значимости была проблема переводов, и наконец немаловажная проблема наглядности и читаемости текстов, сюда же попадает и простота редактирования.
Реализация.
Долго думая и оценивая все системы, я пришел к одному мнения, точнее не я пришел, а пришли до меня, просто я понял что оно мне подходит. А именно, идею я почерпнул, как ни странно звучит, в Joomla. У неё была сделана гениальная и до ужаса простейшая система хранения всех шаблонных фраз.
Структура до боли простая, это массив строк, ключ это короткий текст на английском языке в верхнем регистре, значение искомый текст. Для мультиязычности добавлен ещё один уровень, ключи в котором банальные цифры.
Итак что же получилось в итоге:
pawn Код:
#define DEFAULT_LANGUAGE 0
#define LANGUAGE_RU 0
#define LANGUAGE_EN 1
enum languageDataEnum
{
HELLO_WORLD[16],
TEST[8],
}
new languageData[][languageDataEnum] = {
{
"~g~Привет мир",
"-Тест-"
},
{
"~g~Hello world!",
"-Test-"
}
};
Обращение к тестам до неприличного просто:
pawn Код:
GameTextForPlayer(playerid, languageData[DEFAULT_LANGUAGE][HELLO_WORLD], 4000, 1);
print(languageData[LANGUAGE_EN][TEST]);
PS если вам не нужны переводы удалите первый уровень массива.