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