Интернационализация в Ваших проектах

44
задан HopelessN00b 10 July 2014 в 21:39
поделиться

11 ответов

Это было некоторое время, таким образом, это не всесторонне.

Наборы символов

Unicode является большим, но Вам не может сойти с рук игнорирование других наборов символов. Набор символов по умолчанию на Windows XP (английский язык) является Cp1252. В сети Вы не знаете то, что браузер отправит Вам (хотя, надо надеяться, Ваш контейнер обработает большую часть из этого). И не удивляйтесь, когда существуют ошибки в любой реализации, Вы используете. Наборы символов могут иметь интересные взаимодействия с именами файлов, когда они перемещаются в между машинами.

Строки Перевода

Переводчики, вообще говоря, не кодеры. Если Вы отправите исходный файл в переводчика, они повредят его. Строки должны быть извлечены к файлам ресурсов (например, файлы свойств в Java или ресурсе DLLs в Visual C++). Переводчикам нужно дать файлы, которые трудно повредить и инструменты, которые не позволяют им повредить их.

Переводчики не знают, куда строки прибывают из в продукте. Трудно перевести строку без контекста. Если Вы не дадите представление, качество перевода пострадает.

, В то время как на предмет контекста, можно видеть, та же строка "нечто" неожиданно возникает в многократно и думает, что было бы более эффективно иметь все экземпляры в точке UI к тому же ресурсу. Это - плохая идея. Слова могут быть очень контекстно-зависимыми на некоторых языках.

строки Перевода стоит денег. При выпуске новой версии продукта имеет смысл восстанавливать старые версии. Имейте инструменты для восстановления строк со старых файлов ресурсов.

Конкатенация строк и ручное управление строками должны быть минимизированы. Используйте функции формата когда это применимо.

Переводчики должны быть в состоянии изменить горячие клавиши. Ctrl + P является печатью на английском языке; немцы используют Ctrl + D .

, Если у Вас есть процесс перевода, который требует, чтобы кто-то вручную вырезал и вставил строки в любое время, Вы напрашиваетесь на неприятности.

Даты, Времена, Календари, Валюта, Числовые форматы, Часовые пояса

Они могут все варьироваться от страны к стране. Запятая может использоваться для обозначения десятичных разрядов. Времена могут быть в 24-часовой нотации. Не все используют Григорианский календарь. Необходимо быть однозначными, также. Если Вы заботитесь для отображения дат как MM/DD/YYYY для США и DD/MM/YYYY для Великобритании на веб-сайте, даты неоднозначны, если пользователь не знает, что Вы сделали его.

Особенно Валюта

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

Пользовательские интерфейсы

Расположение должно быть динамичным. Мало того, что строки, вероятно, удвоятся в длине на переводе, весь UI, возможно, должен быть инвертирован (иврит; арабский язык) так, чтобы средства управления, выполненные справа налево. И это - прежде чем мы доберемся до Азии.

Тестирование До Перевода

  • статический анализ Использования Вашего кода для определения местоположения проблем. Как минимум усильте инструменты, встроенные в Ваш IDE. (Пользователи Eclipse могут перейти к Окну> Предпочтения> Java> Компилятор> Ошибки/Предупреждения и проверка на неизвлеченные строки.)
  • Испытание с помощью дыма путем моделирования перевода. Не трудно проанализировать файл ресурсов и строки замены с псевдопереведенной версией, которая удваивает длину и вставляет броские символы. Вы не должны говорить на языке для использования внешней операционной системы. Современные системы должны позволить Вам войти в систему как внешний пользователь с переведенными строками и внешняя локаль. Если Вы знакомы со своей ОС, можно выяснить то, что делает что, не зная отдельного слова языка.
  • карты Клавиатуры и ссылки набора символов очень полезны.
  • Виртуализация была бы очень полезна здесь.

Нетехнические вопросы

Иногда необходимо быть чувствительны к культурным различиям (преступление, или непонимание может закончиться). Ошибка, которую Вы часто видите, является использованием флагов как визуальный индикатор, выбирая язык веб-сайта или географию. Если Вы не хотите, чтобы Ваше программное обеспечение объявило стороны в глобальной политике, это - плохая идея. Если Вы были французами и предложили опцию для английского языка с флагом Св. Георгия (флагом Англии является Красный Крест на белом поле), это могло бы привести к беспорядку для многих англоговорящих - предполагают, что подобные проблемы возникнут с иностранными языками и странами. Значки должны исследоваться для культурной уместности. Что делает ползунки или зеленую среднюю галочку? Язык должен быть относительно нейтральным - обращение к пользователям конкретным способом может быть приемлемым в одном регионе, но рассмотренное грубым в другом.

Ресурсы

C++ и программисты Java могут найти веб-сайт ICU полезным: http://www.icu-project.org/

47
ответ дан Naveed S 26 November 2019 в 22:04
поделиться

Некоторые забавные вещи:

  1. Наличие PHP и MySQL Application, который работает хорошо с немецким и французским языком, но теперь должен поддерживать русский язык и китайский язык. Я думаю, что перемещаю это в .net, поскольку поддержка Unicode PHP - по-моему - не действительно хороша. Несомненно, переставление с utf8_de/encode или mbstring-функциями является забавой. Почти как забава как наличие Freddy KrГјger посещают Вас ночью...

  2. Понимание, что некоторые языки являются НАМНОГО Более подробными, чем другие. Немецкий язык обычно является НАМНОГО более подробным, чем английский язык, и видящий, как немецкая Версия уничтожает Пользовательский интерфейс, потому что слишком мало места было выделено, не была забава. Некоторые продукты получили некоторую известность из-за своих творческих способов работать вокруг этого с "Schw Забвения. Tr.d. Le. En. W." будучи незабываемым:-)

  3. Игра вокруг с форматами даты, woohoo! Да, СУЩЕСТВУЮТ на самом деле люди в мире, которые используют форматы даты, куда день проходит в середине. Sooooo много забавы, пытающейся узнать, что 02.07.2008, как предполагается, означает, просто потому что некоторые пользователи могли бы верить ему, мог быть 2 июля... Но с другой стороны, Вы парни по водоему могут верить тому же о пользователях, которые поместили месяц в середине:-P, особенно потому что на английском языке, 2 июля звуки, намного лучше, чем 2-го июля, что-то, что не обязательно относится к другим языкам (т.е. на немецком языке, Вы никогда не говорили бы Juli 2, но всегда Zweiter Juli). Я использую 07.02.2008, когда это возможно. Ясно, что это означает 7 февраля, и это сортирует правильно, но dd/mm по сравнению с mm/dd может быть действительно хитрой проблемой.

  4. вещь забавы Anoter, Числовые форматы ! 10.000,50 по сравнению с 10 000,50 по сравнению с 10 000,50 по сравнению с 10'000,50... Это - мой самый большой кошмар прямо сейчас, имея необходимость поддерживать относящийся к разным культурам environent, но не имея никакого способа надежно знать, какой числовой формат пользователь будет использовать.

  5. Формальный или Неофициальный. На некотором языке существует два способа обратиться к людям, формальному пути и более неофициальному пути. На английском языке Вы просто говорите "Вас", но на немецком языке необходимо решить между формальным "Sie" и неофициальным "Du", тем же для французского Tu/Vous. Это обычно - безопасная ставка для выбора формального пути, но это легко пропущено.

  6. Календари. В Европе первый день Недели является понедельником, тогда как в США это - воскресенье. Календарные Виджеты хороши. Показ Календаря с воскресеньем слева и в субботу справа европейскому пользователю не так хорош, это путает их.

15
ответ дан Community 26 November 2019 в 22:04
поделиться

Я работал над проектом для своего предыдущего работодателя, который использовал.NET, и был созданный в формате .resx, который мы использовали. У нас в основном был файл, который имел все переводы в .resx файле, и затем нескольких файлах с различными переводами. Последствие этого - то, что необходимо быть очень прилежными об обеспечении, что все строки, видимые в приложении, хранятся в .resx, и каждый раз, когда каждый изменяется, необходимо обновить все языки, которые Вы поддерживаете.

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

Еще одно примечание, очень строго постарайтесь не связывать видимые строки непосредственно, такой как

String message = "The " + item + " is on sale!";

Вместо этого необходимо использовать что-то как

String message = String.Format("The {0} is on sale!", item);

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

8
ответ дан Andrew Barber 26 November 2019 в 22:04
поделиться

Я просто слушал Подкаст от Scott Hanselman этим утром, где он говорит об интернационализации, особенно действительно хитрые вещи, как турецкий язык (с, он четыре, я), и тайский язык. Кроме того, Jeff Atwood имел сообщение :

5
ответ дан Andrew Barber 26 November 2019 в 22:04
поделиться

Помимо всех предыдущих подсказок, помните, что i18n, он примерно не изменяет слова для их эквивалента на других языках, специально для нелатинских алфавитов языков (корейский, арабский язык), которым записанный справа налево, таким образом, целый UI должен будет соответствовать, как

  • объект 1
  • объект 2
  • , объект 3

должен был бы быть

арабский текст 1 -

арабский текст 2 -

арабский текст 3 -

(инвертированный маркированный список, кажется, не работает: P)

, который может быть кошмаром UI, если Ваша система должна применить изменения динамично, как только пользователь изменяет используемый язык.

Другая очень твердая вещь состоит в том, чтобы протестировать различные языки, не только для правильности слова, но и так как языки как корейский язык обычно имеют больший тип шрифта для своих символов, это может привести к языку определенные ошибки (как текст "СОХРАНЕНИЯ" на кнопке, являющейся больше, чем сама кнопка для некоторого языка).

3
ответ дан Decio Lira 26 November 2019 в 22:04
поделиться

Одна из более забавных вещей обнаружить: курсив и полужирный текст makrup не работают с символами CJK (Chinese/Japanese/Korean). Они просто становятся нечитабельными. (Хорошо, я не мог действительно считать их прежде также, но особенно выделение полужирным просто создает пятна чернил)

2
ответ дан Andrew Barber 26 November 2019 в 22:04
поделиться

Я думаю, что все работающие в интернационализации должны быть знакомы с Общим Репозиторием данных Локали, который является теперь подпроектом Unicode:

Общий Репозиторий данных Локали

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

1
ответ дан 26 November 2019 в 22:04
поделиться

Я предлагаю использовать что-то как 99translations.com для поддержания переводов. Иначе Вы не будете в состоянии сказать то, что из своих переводов актуально на каждом языке.

1
ответ дан user43685 26 November 2019 в 22:04
поделиться

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

1
ответ дан TokenMacGuy 26 November 2019 в 22:04
поделиться

Один веб-сайт, который я использую, имеет метод перевода вызовы владельца "Wiki + машинный перевод". Это - основанный на сообществе сайт, так очевидно отличается от потребностей компаний.

http://blog.bookmooch.com/2007/09/23/how-bookmooch-does-its-translations/

0
ответ дан 8128 26 November 2019 в 22:04
поделиться

Одной вещью, которую никто не упомянул еще, являются строки с некоторой переменной частью, когда в "Единице прибудет через 5 дней" или "В понедельник что-то происходит". где 5 и понедельник изменится в зависимости от состояния. Это не хорошая идея разделить тех в два и связать их. Только с одной переменной частью и хорошей документацией Вы могли бы выйти сухим из воды, с двумя переменными частями будет некоторый язык что предварительные друзья для изменения порядка их.

0
ответ дан 26 November 2019 в 22:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: