Автор Тема: Кракозяблы  (Прочитано 10255 раз)

Оффлайн MrSMiT

  • Новичок
  • *
  • Сообщений: 6
Кракозяблы
« : 08 Марта 2014, 15:19:03 »
Прога тащит строки из mdb. Есть инглиш, китай, корея, польша. Любой из них пытаюсь перевести - кракозяблы. Подмена кодовой страницы помогает, но хотелось бы более изящьного решения. Фонт редактировать - не вариант.
http://yadi.sk/d/wlec1DGoK7Zui

Оффлайн миха04

  • Модератор
  • Старожил
  • *****
  • Сообщений: 374
    • http://
Кракозяблы
« Ответ #1 : 08 Марта 2014, 23:15:54 »
MrSMiT, никакой проблемы с переводом не заметил. Делал его в MO Access 2007. Заменял слова в языковой строке English_USA.
« Последнее редактирование: 08 Марта 2014, 23:16:17 от миха04 »

Оффлайн leserg73

  • Постоялец
  • ***
  • Сообщений: 105
    • Wylek.ru
Кракозяблы
« Ответ #2 : 09 Марта 2014, 16:20:39 »
MrSMiT прав, на оригинальной системе Windows, где НЕ была сделана подмена кодовых страниц и шрифтов в реестре, текст в интерфейсе программы действительно отображается кракозябрами. миха04, то что у вас отображается корректно, говорит о том, что в реестре вашей системы были сделаны правки. Сама программа использует шрифт Tahoma. Это задано в базе данных сообщений (файл MessageData_X.mdb):



Для шрифта Tahoma в реестре Windows (оригинальная установка, не сборка, не патченная и т.д.) в разделе

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes

отсутствует переопределение набора символов для русского языка, т.е. по умолчанию используется набор ANSI. Чтобы Windows автоматически выполняла подмену символов ANSI на кириллицу (справка MSDN), в этот раздел необходимо добавить запись:

"Tahoma,0"="Tahoma,204"

Это безопасная мера и предусмотрена спецификациями Windows. Чтобы изменения вступили в силу, ПК необходимо перегрузить.

Если вы не хотите что-либо делать с реестром на системе пользователя (или у пользователя в системе ограниченные права), то тогда (и это самый приемлемый вариант) необходимо изменить шрифт, заданный в самой программе, в файле MessageData_X.mdb. Для выбранного языка, строки которого вы переводите, укажите шрифт, который поддерживает кириллицу, например Arial CYR (на рисунке ниже показана замена для строк польского языка):



Конечно, могут быть ещё нюансы, например не все строки будут корректными, но это необходимо решать в индивидуальном порядке. А сам шрифт Arial CYR присутствует во всех Windows в оригинальной поставке.



Если вы просмотрите этот список, то заметите, что еще можно выбрать шрифт Courier New CYR или Times New Roman CYR. Все, больше вариантов нет.
Небольшое отступление: обратите внимание на запись MS Shell Dlg 2 = Tahoma. При программировании приложений в визуальной среде разработки, по умолчанию шрифт для всех элементов управления задан как MS Shell Dlg 2. Это означает, что в системе Windows он автоматически будет заменен на Tahoma. А как вы могли уже заметить, для шрифта Tahoma в системе по умолчанию используется набор символов ANSI, который не поддерживает кириллицы. Поэтому, при переводе нужно или менять шрифт, или добавлять в реестр запись "Tahoma,0"="Tahoma,204" для подмены набора символов. В некоторых программах можно увидеть свойство, заданное для шрифта, Font.Charset (набор символов). Если программист грамотный, то он укажет данное свойство как DEFAULT_CHARSET (набор символов по умолчанию, согласно региональным настройкам языка в Windows). Но во многих случаях свойство указано - ANSI_CHARSET. При переводе это свойство необходимо заменить на DEFAULT_CHARSET или RUSSIAN_CHARSET у всех элементов управления, иначе пользователь увидит кракозябры.(Конец отступления)

А вот подмена кодовых страниц в ключе реестра

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage

например, "1252"="c_1251.nls" - это уже самый крайний случай, когда действительно ничего нельзя сделать. Кстати такая кардинальная подмена - это самая распространённая ошибка русификаторщиков. На их системе локализованная программа будет выглядеть корректно, но на системе рядового пользователя, у которого установлена оригинальная Windows, - уже с кракозябрами. Совет: при локализации программ используйте оригинальные настройки реестра касательно шрифтов. В большинстве случаев проблему кракозябров можно решить правкой самой программы и её ресурсов.

Оффлайн MrSMiT

  • Новичок
  • *
  • Сообщений: 6
Кракозяблы
« Ответ #3 : 10 Марта 2014, 12:10:17 »
Цитата: leserg73
укажите шрифт, который поддерживает кириллицу, например Arial CYR
Благодарю!
Не очень внимательно таблицы просмотрел, так бы сам допёр.