![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Dreamer_0x01 |
|
|||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: нет Всего: 12 |
Здравствуйте.
Уже не в первый раз сталкиваюсь с такой проблемой, когда имеется код с кучей символьных констант на русском или английском языке. И требуется сделать так, чтобы прогамма "знала" несколько языков. По сути, операция эта примитивная, разделяется на этапы: 1. Выношу все встреченные символьные константы в отдельную структуру. 2. В коде, где упоминаются эти символьные константы, меняю их на соответствующие поля структуры. 3. Делаю ровно столько инициализаций структуры, сколько требуется языков в программе. 4. Добавляю опцию "выбор языка", где при смене языка происходит новая инициализация структуры. Проделав это уже в нескольких программах, задумался - есть ли какое-то автоматизированное средство, которе проанализирует код, выделит символьные константы, предложит их заменить нужными именами, заменит и создаст соответствующие файлики с нужной инициализацией? -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
| Sartorius |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1568 Регистрация: 18.7.2006 Где: Ivory tower Репутация: 8 Всего: 37 |
Обычно для поддержки нескольких языков создают несколько dll-ек, содержащих нужные константы, и потом подгружают подходящую. Пользоваться автопереводчиками не советую. А то я как то наблюдал вместо "clear cookies" - "ясное печенье"
|
|||
|
||||
| Dreamer_0x01 |
|
|||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: нет Всего: 12 |
Вы немножко меня не поняли. Переводить слова буду я сам. Но вот искать встречаемые в коде строковые константы, выводить мне их список, в виде таблички, в которую будут вноситься слова на нескольких языках, делать соответствующие замены в коде - программа. -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
| djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 8 Всего: 39 |
Ну и сделайте grep по исходнику для ловли строк и sed для замены. А вообще, раз уж не впервой этим занимаетесь, пора бы догадаться, что лучше изначально подходить к i18n.
-------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
| cutwater |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 592 Регистрация: 24.6.2008 Репутация: 1 Всего: 10 |
Dreamer_0x01, смотреть в сторону gettext или если используете Qt то встроенными средствами.
|
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
Если используешь Qt, то можно в любом текстовом редакторе с regex'ами заменить "*" на tr( "*" ) и далее как сказал cutwater.
На самом деле там regex посложнее, но думаю разберёшься -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| Dreamer_0x01 |
|
||||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: нет Всего: 12 |
Я не использую QT и пишу вообще не под персоналку, а под микроконтроллеры.
И у меня не плюсы, а обычный С.
Что это?
Так и делаю. Но часто приходится править чужие исходники, где такого не сделано. -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
||||
|
|||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Переводить автоматически ВСЕ строки в программе черевато - не все строки пойдут пользователю. Еще может быть масса строк с внутренними данными самой программы, их явно переводить не нужно (например имена файлов, строки инициализации всякой аппаратуры и пр)
|
|||
|
||||
| bsa |
|
||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
гугль рулит
Странно, "так и делаешь", но при этом про gettext и не слышал... Что-то не сходится. |
||||||||
|
|||||||||
| Dreamer_0x01 |
|
|||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: нет Всего: 12 |
Делаю все связанное с переводом вручную. Потому и спросил. Добавлено через 12 минут и 21 секунду Не очень понял, что появляется на выходе после работы gettext - какие-то "свои" файлы, по одному на каждый язык? Мне такое не подойдет, так как языковые раскладки должны быть вкомпилины в код. Использование файловой системы недопустимо, так как ее нет ;) -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Dreamer_0x01, почитай про gettext. Не обязательно именно его использовать. Там просто хорошая идея используется. Напиши свой аналог.
|
|||
|
||||
| Dreamer_0x01 |
|
||||||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: нет Всего: 12 |
Идея заключения константа в обертку (_("")) мне понравилась. А на вопос:
Я так понимаю, самое разуное решение вот это?
-------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
||||||
|
|||||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Dreamer_0x01, и не только поэтому. gettext входит в состав glibc, а у нее лицензия LGPL - линковать статически без открытия кода нельзя.
Кстати, ты можешь сделать поддержку в совместимом формате и пользоваться уже готовыми утилитами для перевода и его компиляции. Тебе останется только подлинковать файл скомпилированного перевода. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |