![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
drug007 |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 3.11.2011 Репутация: нет Всего: 1 |
Приложение состоит из нескольких слабосвязанных частей - гуй на кутэ, сетевая часть на буст.асио, логика без использования сторонних библиотек. Локализация в кутэ реализована изначально и меня устраивает, но в остальных частях придется реализовывать самому, так как мешать везде кутэ нельзя. На данный момент я тупо вынес в отдельные файлы декларации и определения используемых строковых констант и везде использую их. Но это менее удобно, чем кутэшная реализация, т.к. если добавляешь константу (а их добавлять полюбому придется) то нужно будет перекомпилировать значительную часть проекта. Использовать же для каждого файла отдельный файл со строковыми константами мне кажется довольно геморрным (хотя вроде так в яве реализовано?).
Как можно лучше кроссплатформенно реализовать локализацию, не завязываясь на громоздкую стороннюю библиотеку/фреймворк (т.е. мелкую в принципе можно заюзать), но и не изобретая свой велосипед? Может ссылки кто подскажет, а то гугл выдает про виндовую локализацию. |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
юзаю sqlite с таблицей в виде:
lng - идентификатор языка. message_id - целочисленные константы определенные в исходниках. message - собственно, текст сообщения для указанного языка и идентификатора сообщения. |
|||
|
||||
drug007 |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 3.11.2011 Репутация: нет Всего: 1 |
А как это в коде выглядит? Мне константы (айди в данном случае) кажутся не очень наглядными. Вот как у меня:
И меня смущают эти длинные имена констант, да и не очень наглядные они. С айди конечно покороче будет, но наглядность потеряется вообще имхо. Локализация у меня осуществляется на этапе линковки - выбором соответствующего .срр файла. Динамическая локализация, конечно, получше будет, но особой заинтересованности в ней у меня нет. Но сделал я это на скорую руку, поэтому советуюсь. Если нужно вывести какое-то значение в сообщении юзают boost.format:
Но смущает, что нужно знать о наличии аргументов у сообщения, чтобы правильно применить. Хотя может это и не страшно. Это сообщение отредактировал(а) drug007 - 22.12.2011, 09:19 |
||||
|
|||||
boostcoder |
|
||||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
идентификаторы я забиваю в неймспейсы. обычно вложенные.
я так и делаю. не нашел "человеческого" решения. Добавлено через 2 минуты и 14 секунд при использовании enum class все выглядит более естественно.
|
||||||
|
|||||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
drug007, ты можешь использовать средства того же Qt. Только объяви свои макросы и создай файл po с помощью gettext (linguist не поддерживает отличные от Qt'шных ключевые слова). Например, очень часто используют макрос _()... Таким образом:
В итоге, твои компоненты не привязаны на уровне исходников к Qt, но в тоже время, нет необходимости подключать еще какие-нибудь модули перевода. |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
||||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
согласись, значительно более логично использовать то, что у тебя и так в проекте есть, чем добавлять еще что-то. Кстати, я бы никогда не догадался использовать реляционную БД для этих целей... Имхо, это сродни полету на вертолете в булочную напротив. |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
использовать куте вообще не логично. просто выбирать особо не из чего.
не удивительно. интересно бы было посмотреть на то, как бы ты обновлял сотни тысяч клиентских программ объемом по 30мб, только из-за того что была исправлена опечатка в сообщении об ошибке. ну да. ваши на такси в булочную не ездят. |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
это производится заменой одного файлика... В твоем случае тоже. Кстати, я впервые слышу об использовании БД в этих целях. Может не спроста никто этого не делает? Скажи, зачем городить огород (неудобный к тому же), когда есть готовые решения? Тот же gettext, boost::localization, Qt... Тем более, что в проекте уже есть (и используется!) одно из перечисленных. |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
всего один вопрос: зачем создавать "этот" файлик, и потом "лечить" последствия его существования? ты повторяешься. раз не слышал - значит не в той отрасли работаешь. представь распределенные системы с сотнями тысяч узлов. ты бы стал по каждому чиху обновлять файлики? умерла бы твоя система, не успев приобрести популярность. Добавлено через 14 минут и 25 секунд это в одном приложении? Это сообщение отредактировал(а) boostcoder - 22.12.2011, 13:53 |
|||
|
||||
bsa |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
я работаю с десктопами и embedded в потребительской сфере.
Если бы ТС написал: "делаю тонкий клиент к сетевой программе работающей удаленно и хочу, чтобы все было локализовано", то я бы может даже вместо sqlite postgres или oracle посоветовал. Но речь идет о другом (по крайней мере, я так понял ТС). И если делать локализацию через удаленную базу, то это усложнит запуск приложения, особенно, с неработающей сетью, а выбор sqlite выглядит вообще странным. Если ты предлагаешь через локальную базу, то чем она отличается от принятых методов локализации? Только тем, что изменения можно вносить путем загрузки только измененной записи БД? Сейчас такая экономия смысла особо не имеет. Никто не умрет, если придется грузить файл объемом 100 КБ (тем более, что это можно автоматизировать). А вот усложнение кода будет налицо. drug007, рассмотри вариант с boost::localization. Возможно, он быстрее Qt будет в твоем случае. |
||||
|
|||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
его файлы не требуют замены, ибо есть UPDATE. это лишнее. я с десктопами не работаю. это в другом отделе. я не говорил о вебе. правда? т.е. если в приложении используется что-либо из куте, то оно становится кутеприложением? ![]()
до свиданья. |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
по правде сказать, я помню последние темы ТС, где он разрабатывал высокопроизводительный сервер. и на автомате, я предположил что куте у него - это клиенты. и того: 1)высокопроизводительный сервер, 2)клиенты = сотни тысяч узлов которые нужно обновлять. |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Базу имеет смысл применять (в данном случае) если она в проекте уже есть. То же касается и всего остального. Если же ничего 'остального' нет, то советую посмотреть в сторону отдельно стоящего gettext (его уже тут упоминали), довольно легкая библиотека
|
|||
|
||||
newbee |
|
|||
![]() Бревно ![]() ![]() Профиль Группа: Участник Сообщений: 703 Регистрация: 24.8.2011 Репутация: 4 Всего: 19 |
Я одна не уловила связи между "сто пицот клиентов" и локальной СУБД?
-------------------- You're face to face With man who sold the world |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |