Где я могу найти хорошее введение в локали - PullRequest
3 голосов
/ 06 декабря 2010

Мне нужно написать код, работающий с локалями. Есть хорошее введение в предмет, чтобы начать меня?

1 Ответ

2 голосов
/ 06 декабря 2010

Впервые опубликовано на Все, что вам нужно знать о локалях

Давным-давно, когда я был старшим разработчиком в группе Windows в Microsoft, меня отправили на Дальний Восток, чтобы помочь доставить версию Windows 3.1 для F.E. Это было мое введение в локализацию программного обеспечения - в основном меня толкали в глубокий конец бассейна и говорили, чтобы научиться плавать. Именно здесь я узнал, что локализация - это намного больше, чем перевод.

Примечание: одна интересная вещь, которую мы ударили - печально известный Синий Экран Смерти, переключил экран в текстовый режим. Вы не можете отображать азиатские языки в текстовом режиме. Таким образом, мы (и я имею в виду меня) придумали систему, в которой мы переводим экран в режим VGA, сохраняя 12 pt. растровое изображение courier с разрешением только для символов, используемых в сообщениях BSoD, и обработано таким образом. У вас, дети, сегодня так просто J.

Имейте в виду, что учет локали может привести к очень неожиданной работе.

Язык

Хорошо, так что ждем сегодня. Что такое локаль и что вам нужно знать? Язык - это язык и страна, в которой работает программа. (В страну также может быть добавлен вариант, но его использование встречается крайне редко.) Языковой стандарт - это комбинация, но у вас может быть любая комбинация этих двух частей. Например, гражданин Испании в Германии установит es_DE так, чтобы его пользовательский интерфейс был на испанском (ых) языке, а настройки страны - на немецком (DE). Не предполагайте местоположение в зависимости от языка или наоборот.

Языковая часть локали очень проста - вот на каком языке вы хотите отображать текст в своем приложении. Если пользователь говорит по-испански, вы хотите отобразить весь текст на испанском языке. Но какой диалект испанского - в Испании и Мексике он совсем другой (точно так же, как в Америке мы пишем цвет, а в Англии - цвет). Таким образом, страна может влиять на используемый язык в зависимости от комбинации.

Все языки, которые поддерживают специфичные для локали ресурсы (а это почти все из них сегодня), используют резервную систему. Сначала они будут искать ресурс для комбинации language_country. Хотя es_DE, вероятно, никогда не было сделано, часто есть es_MX и es_ES. Таким образом, для языкового стандарта, установленного в es_MX, он сначала будет искать ресурс es_MX. Если он не найден, он ищет ресурс es. Это ресурс для этого языка, но не специфический для любой страны. Обычно это копируется из самой большой страны (экономически) для этого языка. Если он не найден, он переходит к «общему» ресурсу, который почти всегда является родным языком, на котором написана программа.

Теория, лежащая в основе этого запасного варианта, заключается в том, что вам нужно только определить разные ресурсы для более конкретных ресурсов - и это очень полезно. Но что еще более важно, когда создаются новые части пользовательского интерфейса и вы хотите отправить бета-копии или выпустить их до того, как сможете перевести все, хорошо, тогда переведенные части находятся в локализованных, но непереведенные части все еще отображаются - но на английском. Это раздражает сопливых пользователей в других странах, но это делает их программой быстрее. (Примечание: мы используем Sisulizer для перевода наших ресурсов - хороший продукт.)

Вторая половина страны. Это используется в основном для настройки числа и даты / времени. Это охватывает гамму от того, что представляют собой символы десятичного разделителя и тысяч разделителей (12 345,67 в США - 12 345,67 в России), до того, какой календарь используется. Способ справиться с этим - использовать классы времени выполнения, доступные для всех операций над этими элементами при взаимодействии с пользователем. Существуют классы как для анализа введенных пользователем значений, так и для их отображения.

Держите четкое различие между значениями, которые пользователь вводит или отображает для пользователя, и значениями, хранящимися как данные.Число - это строка в файле XML, но в файле XML это будет «12345.67» (если кто-то не сделал что-то очень глупое).Держите ваши данные строго типизированными и выполняйте только конкретные языковые преобразования при отображении или разборе текста пользователю.Хранение данных в формате, соответствующем локали, рано или поздно укусит вас в задницу.

Китайский

В китайском языке нет алфавита, но вместо него есть набор глифов.Китайская Народная Республика несколько десятилетий назад значительно пересмотрела, как рисовать глифы, и это называется упрощенным.Китайские глифы, использованные в других местах, продолжали с оригинала, и это называется традиционным.Это точно такой же набор символов, но они нарисованы по-разному.Это похоже на то, что у нас есть и текст А, и сценарий А. Они оба означают одно и то же, но нарисованы совершенно по-разному.

Это скорее проблема шрифта, чем проблема перевода, за исключением того, что формулировка и использованиенемного разошлись, частично из-за различий в подходах между традиционным и упрощенным китайским языками.В результате вы, как правило, хотите иметь два ресурса на китайском языке, один zh_CN (PRC) и один zh_TW (Тайвань).Относительно того, каким должен быть ресурс zh - это главный геополитический вопрос, и вы сами по себе (но имейте в виду, что в КНР есть ядерное оружие - а у вас его нет).

Строки с замещеннымизначения

Таким образом, вам необходимо отобразить сообщение Дисплей («В операции произошла ошибка: + сообщение»);Нет нет нет!Потому что на другом языке правильное использование может быть Display («Ошибка:« + msg + »была вызвана операцией»);Каждая современная библиотека времени выполнения имеет конструкцию, в которой вы можете иметь строковый ресурс «Операция с ошибкой: {0}», а затем подставить в сообщение в {0}.(Некоторые используют синтаксис, отличный от {0}, {1},…)

Эти строки хранятся в файле ресурсов, который можно локализовать.Затем, когда вам нужно отобразить сообщение, вы загружаете его из ресурсов, подставляете в переменные и отображаете его.Сочетание этого, а также числовые и форматирующие дату и время позволяют легко создавать эти строки.И как только вы привыкнете к ним, вы обнаружите, что это проще, чем старый подход.(Если вы используете Visual Studio - загрузите и установите ResourceRefactoringTool, чтобы сделать это тривиальным.)

Арабский, иврит и сложные скрипты.

Арабский и иврит называются b-направленный, потому что его части расположены справа налево, а другие части слева направо.Текст на арабском / иврите написан и читается справа налево.Но когда вы переходите к латинскому тексту или числам, вы затем переходите к самой левой части и читаете слева направо, затем возвращаетесь туда, где это началось, и снова читаете справа налево.И затем есть знаки препинания и другие не буквенные символы, где правила зависят от того, где они используются.

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

Сложные скрипты, такие как индийские скрипты, имеют другую проблему.Хотя они читаются слева направо, могут быть случаи, когда некоторые комбинации букв располагаются одна над другой, поэтому строка не становится шире на экране при добавлении второй буквы.Это обычно требует осторожности при перемещении каретки, но не более того.

У нас даже есть случаи, подобные этому на английском языке, где ae иногда отображается как символ æ.(Когда человеческая раса изобрела языки, они не думали, что они дружат с компьютером.)

Не переоценивайте это

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

И если вы небольшая компания, рассмотрите возможность предоставления бесплатной копии для людей, которые переводятваш продукт.Когда я создал «Стадию», я предложил бесплатную копию (цена по прейскуранту 79,95 долл. США) для ее перевода и получил 28 переводов.Я также встретил некоторых очень хороших людей онлайн в процессе.Для продукта корпоративного уровня много раз VAR в другой стране будет переводить его для вас по сниженной ставке или даже бесплатно, если они видят хороший рыночный потенциал.Но в этих случаях, сделайте первый внутренний перевод, чтобы проработать изломы.

Один ресурс, который я считаю очень полезным, - это языковой портал Microsoft, где вы можете вставить текст на английском языке, и если этот текстлюбой из продуктов Microsoft, он предоставит вам перевод, используемый Microsoft для данного языка.Это может дать вам быстрый высококачественный перевод до 80% вашей программы во многих случаях.

Удачи!(Удачи)

...