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

голоса
44

Как бы вы реализовали Интернационализация (i18n) в реальных проектах вы работали?

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

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

Задан 04/08/2008 в 01:08
источник пользователем
На других языках...                            


11 ответов

голоса
8

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

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

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

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

Вместо этого, вы должны использовать что-то вроде

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

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

Ответил 04/08/2008 в 01:23
источник пользователем

голоса
15

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

  1. Имея PHP и MySQL приложение, который хорошо работает с немецким и французскими языками, но теперь должен поддерживать русские и китайские. Я думаю, что я двигаюсь это к .NET, поскольку поддержка Unicode в PHP есть - на мой взгляд - не очень хорошо. Конечно, жонглирование вокруг с utf8_de / закодировать или MBstring-функций удовольствие. Почти так же весело, как имеющий Фредди Крюгер посетить вас в ночное время ...

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

  3. Игра вокруг с форматами дата, Woohoo! Да, есть на самом деле люди в мире, которые используют формат даты, где день проходит посередине. Sooooo много удовольствия, пытаясь выяснить, что 07/02/2008 должен иметь в виду, только потому, что некоторые пользователи могут поверить, это может быть 2 июля ... Но опять же, вы, ребята, над прудом, может что то же о пользователях, которые Помещенный месяц в среднем :-P, особенно потому, что на английском языке, 2 июля звучит намного лучше, чем 2-го июля, то, что не распространяется на провайдер блокирует другие языки (например, на немецком языке, вы бы никогда не сказал Juli 2, но всегда Zweiter Juli). Я использую 2008-02-07, когда это возможно. Понятно, что это означает, что 7 февраля и сортирует правильно, но дд / мм против дд / мм может быть очень сложным проблема.

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

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

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

Ответил 04/08/2008 в 01:35
источник пользователем

голоса
5

Я просто слушал подкаст от Скотта Hanselman сегодня утром, когда он говорит о интернационализации, особенно действительно сложные вещи, как турецкий (с его четыре я) , и тайский. Кроме того , Джефф Этвуд был пост :

Ответил 04/08/2008 в 16:04
источник пользователем

голоса
48

Это было в то время, так что это не является исчерпывающим.

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

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

Перевод строк

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

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

Хотя на эту тему контекста, вы можете увидеть ту же строку «Foo» обнажаться в несколько раз, и думаю, что было бы более эффективным, чтобы иметь все экземпляры в точке пользовательского интерфейса к этому ресурсу. Это плохая идея. Слова могут быть очень контекстно-зависимая на некоторых языках.

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

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

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

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

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

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

Особенно валюты

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

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

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

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

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

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

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

Ресурсы

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

Ответил 04/08/2008 в 18:58
источник пользователем

голоса
0

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

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

Ответил 10/09/2008 в 16:12
источник пользователем

голоса
1

Я думаю, что все, кто работает в интернационализации должны быть знакомы с Common Locale Data Repository, который в настоящее время является суб-проект Unicode:

Общий Repository Locale Data

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

Ответил 18/09/2008 в 20:25
источник пользователем

голоса
3

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

  • пункт 1
  • пункт 2
  • пункт 3

должен быть

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

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

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

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

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

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

Ответил 22/09/2008 в 00:44
источник пользователем

голоса
0

Одна вещь, которую никто не упомянул еще есть строки с некоторой warying части, как и в «Аппарат arive через 5 дней» или «В понедельник что-то происходит.» где 5 и понедельник будет меняться в зависимости от состояния. Это не очень хорошая идея, чтобы разделить те в два и объединить их. С одной только меняющейся части и хорошей документацией, вы можете уйти с ним, с двумя различными частями будет некоторый язык, preferes изменить порядок их.

Ответил 07/10/2008 в 11:56
источник пользователем

голоса
2

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

Ответил 14/10/2008 в 13:39
источник пользователем

голоса
1

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

Ответил 27/12/2008 в 05:05
источник пользователем

голоса
1

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

Ответил 27/12/2008 в 07:48
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more