Как работают стандартные контрольные шрифты Delphi 2010 IDE при интернационализации? - PullRequest
3 голосов
/ 01 декабря 2010

Я использую Delphi 2010.

Я написал приложение на английском языке.Я предоставляю TStringGrid, чтобы пользователи могли создавать перекрестные ссылки надписей компонентов с английского на свой язык.

В каждом Create TForm я пересекаю все элементы управления формы (которые имеют уникальные теги), меняя их свойство Caption (или Hint) на предоставленные пользователем переводы.

Это реализовано и работаетПо крайней мере, на нескольких распространенных западных языках, таких как французский, итальянский и т. д. Незначительные проблемы с расположением экрана (более широкие кнопки и т. д.), которые я решаю вручную, по мере их появления.Я не буду использовать сторонний инструмент интернационализации или Delphi, если я не получу очень, ОЧЕНЬ плохие новости в ответах на этот вопрос!:-) В следующий раз, возможно, я буду использовать что-то вроде TsiLang (но не D2010, что слишком тяжело для меня ...)

Когда я добавляю компоненты в IDE, я оставляю шрифт по умолчанию, которыйIDE назначает как есть.(В моем регионе это MS Sans Serif.) Что произойдет, например, когда моя программа будет запущена в Японии?Будет ли Delphi RTL менять шрифты всех стандартных компонентов на локальный шрифт?Будет ли этот шрифт отображать мой текст ASCII по умолчанию для компонентов и , что позволит отображать символы в их локальном шрифте в тех случаях, когда они настроены?Что произойдет, если у меня есть код, который устанавливает значения шрифтов для MS Sans Serif?

Изменяет ли RTL TStringGrid на язык локали?

Если в некоторых случаях переопределить стандартный Sans Serif MS с Arial (так работают греческие математические символы), это будет мешать всему, что происходит наяпонская система?

Я сохраняю все записи перекрестных ссылок пользователей с помощью TStringList.SaveToFile ('Filename', Encoding), используя этот медленный, но достаточно быстрый код:

 if (AllStringsList.Text <> UnicodeString(AnsiString(AllStringsList.Text))) then
    Encoding := TEncoding.UTF8 
 else 
    Encoding.Default

Будет ли это работатьна всех языках?

Я сохраняю другие пользовательские данные в TIniFile.Как он обрабатывает международные символы?

Любые ссылки на обсуждение этого?

Ответы [ 2 ]

0 голосов
/ 01 декабря 2010

Для вашей проблемы ширины компонента (незначительные проблемы с расположением экрана (более широкие кнопки и т. Д.))

w := form1.canvas.TextWidth( yourcomponet.caption) //get the width of your text
yourcomponet.width := w + 30 // use 30 to make enough space

используйте его, если все компоненты вашей формы используют один и тот же шрифт (если не замените form1 на компонент, использующий ваш шрифт)

для решения проблемы справа налево используйте

SysLocale.MiddleEast := true ;

Я думаю, что это все ваша проблема (опять же, Windows автоматически решит проблему с некоторыми шрифтами, но все же лучше использовать шрифт, поддерживаемый юникодом по умолчанию)

дает вашему пользователю возможность указать, будет ли язык слева направо (true или false) в вашей TStringGrid. так что если это ложь используйте SysLocale.MiddleEast := true ;

0 голосов
/ 01 декабря 2010

AFAIK MS Sans Serif не является шрифтом TrueType / OpenType и не поддерживает Unicode.Windows сама сопоставит шрифт с более близким, если тот, который используется, недоступен.В любом случае, если ваше приложение должно поддерживать несколько языков, лучше использовать шрифт, поддерживающий Unicode, особенно при использовании компилятора / библиотеки, которая полностью поддерживает Unicode, например Delphi 2010.

Также я не понимаю, почему выне сохраняйте все в UTF (8 или 16), который будет поддерживать любой язык, и избавляйтесь от языковых проблем.Delphi 2010 и Windows - это UTF-16, переход от ANSI к UTF туда и обратно только замедлит ваш код, произойдет много преобразований.

В любом случае, следует помнить, что правильная локализация приложения выходит далеко за рамки перевода.строки.Возможно, вам придется изменить контрольные размеры для размещения более длинных (или более коротких) строк, вам может потребоваться адаптировать изображения и цвета к целевой культуре (то, что приемлемо в западном, может не быть в других), и вы должны принять во вниманиеразные стандарты (то есть чтение справа налево и ввод).Вот почему большинство инструментов локализации работают на ресурсах, в том числе в Delphi, чтобы полностью локализовать приложение.

То, что вы реализовали, выглядит примерно так: dxGetText .Вы можете посмотреть на эту библиотеку и использовать ее или получить вдохновение от нее о поддержке шрифтов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...