#1
05 июля 2011 в 04:43
Придумал как сделать поддержку национальных языков. Вот краткий набросок алгоритма, реализацией займусь позже.<br /><br />1. Вводим цвар: Language, по умолчанию пусто (""), хранимый, если определён, то содержит название языка (что угодно, например "1251" или "Russian"). Далее по тексту - <language>.<br />Движок при инициализации читает соответствующие файлы шрифта и перевода. Об этом ниже.<br />2. В папку (ID1 | BaseQ2 | BaseQ3)/Translation кладём национальный шрифт:<br /><language>.tga (аналог conchars.tga для Quake2).<br />3. Туда же кидаем <language>.txt в формате обычного текста:<br />"оригинальный англ.текст" "перевод", например:<br />"%s was gunned down by a %s" "%s был застрелен %s"<br />4. При инициализации парсим <language>.txt, создавая таблицу:<br />hashValue (хэш-код оригинального текста englistText для быстрого поиска)<br />englistText<br />translatedText<br />Если всё успешно, устанавливаем признак инициализации поддержки языка.<br />5. В печатающие функции (Printf и пр.) добавляем алгоритм:<br />- если поддержка языка не инициализирована, печатаем как обычно.<br />- создаём хэш-код по входящему тексту (до обработки вставок %s, %i и т.п.)<br />- ищем по хэшу в таблице, и если не находим, то печатаем как обычно.<br /> - если находим, то сравниваем входной текст и englistText (это нужно сделать, т.к. есть теоретическая очень малая вероятность что разные строки будут имет один хэш-код).<br /> - и если сравнение удачно, то вместо входного текста подставляем translatedText и печатаем, используя национальный шрифт <language>.tga.<br /><br />Идея что то подозрительно проста ;) Уважаемые девелоперы, у кого какие мысли, замечания, дополнения?<br /><br />Дополнение № 1: ;D Для облегчения процесса перевода:<br />Можно добавить цвар gatherTexts (значение <language>) по умолчанию пусто "", не хранимый, сохраняет все новые тексты, проходящие через печатающие функции в файл "Translation/<language>.txt", чтобы в последствии можно было легко добавить перевод.<br /><br />Дополнение № 2:<br />строки, по которым невозможно определить падеж и т.п. наклонения, просто убираем из <language>.txt, например "Makron", т.к. он может быть переведен как Макрон, Макрону, Макроном, в зависимости от контекста.