Необходимо сделать программу на VC++ на 2-х языках с возможностью выбора между языками. Раньше я делал так: выносил все ресурсы, например русские, в отдельную ДЛЛ, а потом если пользователь хочет выбрать русский язык подгружал эту длл и вызывал AfxSetResourceHandle(hDll); это заставляет программу использовать все ресурсы из длл, но у этого подхода есть минусы: 1. надо в длл помещать _все_ ресурсы включая картинки, что ее раздувает 2. если в длл не будет нужного ресурса прога просто вылетит Еще я знаю есть вариант - дополнительные ресурсы зашиваются в туже прогу, но под разными языками, и винда выбирает согласно своему языку нужные ресурсы, но этим процессом пользователь не сможет управлять, тоесть ели у меня винда англ. то русских ресурсов я не увижу. Если бы вторая схема позволяла больше управление, это было бы оптимально. Кто может помочь по данному вопросу ?
сделать каталог languages, в котором будут файлики ini или xml , что больше по душе. я xml советую. по определенным тегам прочитал все строковые ресурсы и используешь. очень распространенный подход. плюсы: - не нужно заморачиваться с дллками - если пользователь захочет - переведет на свой язык спокойно.
Не было печали.. Посмотрите на текущий офис, на его размеры. HRSRC FindResourceEx( HMODULE hModule, LPCTSTR lpType, LPCTSTR lpName, WORD wLanguage ); Передавая явно язык, управляешь локализацией. Удобства, конечно, теряются, но се ля ви. Если не брать в расчет фреймворки, то придётся повозиться.
Почитал в msdn что в Windows 2000 и более поздних вторая описанная мной схема работает некорректно, и майкрософт ее не рекомендует. рекомендуется использовать дллки с ресурсами, что я скорее всего и сделаю.
Я делал, файлы со строками, и при создание окон вводил тексты с этого файла (сделал процедуру, суёшь номер получаешь ссылку на строку), говорят на си проще через ini файлы т.к. в винде есть функции для работы с ними, (насколько я понял надо дать одну строку и получить другую) Пример ini файла языка [ Код (Text): TFrmOptions02Fonts] GroupBox.Caption=Шрифты и цвета: Edit.Text=Текст мессаги TreeView.Items=#Alex,"Новая линия","Новая линия",Alex# [TFrmOptions03Sounds] GroupBox.Caption=Звуки: TreeView.Items=#"Юзать только, если чат не является активным"#
Да, это выход. Но если в приложении больше 10-ти далоговых окон и больше 100 контролов, перелопачивать это все как-то нет желания. Я скопом все ресурсы загрузил в прогу RCLocalize, перевел, и теперь думаю как это оптимальнее всего впихнуть обратно.