Особенности дизайна для интернационализации

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

private boolean findProduct(String prodName) {
        return orderItems.stream()
                .map(Optional::ofNullable)
                .anyMatch(o -> o
                        .map(OrderItem::getProduct)
                        .map(Product::getProductName)
                        .map(s -> s.equals(prodName))
                        .isPresent());
}
43
задан Community 23 May 2017 в 12:09
поделиться

11 ответов

Наша игра Gemsweeper была переведена на 8 различных языков. Некоторые вещи я учился во время того процесса:

  • , Если переводчику дают единственные предложения для перевода, удостоверьтесь, что он знает о контексте, что каждое предложение используется в. Иначе он мог бы обеспечить один возможный перевод, но не тот, который Вы имели в виду. Инструменты такой как Babelfish переводит, не понимая контекст, который является, почему результат обычно так плох. Просто попытайтесь перевести любой нетривиальный текст из английского языка немецкому языку и назад и Вы будете видеть то, что я имею в виду.

  • Предложения, которые должны быть переведены, не должны быть повреждены в различные части по той же причине. Поэтому необходимо поддержать контекст (см. предыдущую точку), и потому что некоторые языки могли бы иметь переменные вначале или конец предложения. Используйте заполнителей вместо того, чтобы разбить предложение. Например, вместо [1 121]

"Это - шаг" "нашего учебного руководства с 15 шагами"

Запись что-то как:

"Это - шаг %1 нашего учебного руководства с 15 шагами"

, и замените заполнителя программно.

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

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

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

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

  • знать, что конечные пользователи будут ожидать, что техническая поддержка будет говорить на их языке, если Ваше программное обеспечение будет переведено. Еще раз, Babelfish по всей вероятности не сделает.

Редактирование - еще Некоторые точки

  • Делают переключение между локализациями максимально легким. В Gemsweeper, у нас есть горячая клавиша для переключения между различными языками. Это делает тестирование намного легче.

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

  • не кодируют Вашу собственную платформу локализации. Вы, вероятно, очень более обеспечены с платформой с открытым исходным кодом как Gettext. Gettext поддерживает функции как переменные в предложениях или плюрализации и надежен. Локализованные ресурсы компилируются, таким образом, никто не может вмешаться в них. Плюс, можно использовать инструменты как Poedit для перевода файлов / проверка чужого перевода и удостоверяясь, что все строки правильно переводятся и все еще актуальные в случае, если Вы изменяете базовый исходный код. Я попробовал и прокрутку моего собственного и использующего Gettext вместо этого, и я должен сказать, что Gettext плюс PoEdit были выше путем.

Редактирования - Еще больше Точек

  • Понимает, что различные культуры имеют различные стили числовых форматов и форматов даты. Нумерации только не отличаются на культуру, но также и на цель в той культуре. В EN-США Вы могли бы отформатировать номер '-1234'; '-1 234' или (1,234) в зависимости от того, какова цель числа. Поймите, что другие культуры делают то же самое.

  • Знают, откуда Вы получаете свою информацию глобализации. , Например, Windows имеет настройки для CurrentCulture, UICulture и InvariantCulture. Поймите то, что каждое средство и как оно взаимодействует с Вашей системой (они не так очевидны, как Вы могли бы думать).

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

56
ответ дан 12 revs, 4 users 89% 26 November 2019 в 22:36
поделиться
  • Мои меню и различные списки в приложении отсортированы в алфавитном порядке для каждого языка для более легкого чтения.

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

то же с ярлыками, если у Вас есть кто-либо: не переводят их .

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

11
ответ дан Javier 26 November 2019 в 22:36
поделиться

Когда мы работали над i18n/l10n проблемами Dreamfall и Age Conan, мы столкнулись с несколькими проблемами, которые стоит иметь в виду. Некоторые из них, которые мы решили, некоторые были решены для нас и некоторых, которые мы работали вокруг. Некоторые мы никогда не решали...

  • Удостоверяются, все Ваши инструменты и весь Ваш код поддерживают все наборы символов, Вы хотите использовать, и проверить то предположение дважды дважды в ходе проекта и еще несколько раз быть уверенными.

  • Удостоверяются, что Вы используете шрифт, который поддерживает все языки, которые Вы хотите использовать. Большинство шрифтов, которые утверждают, что были unicode, только unicode в том смысле, что символы, которые он имеет, в корректной кодовой точке. Это не означает, что это имеет применимые символы для всех кодовых точек.

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

  • множественное число Обработки правильно хитро в легких случаях и проклятое трудно в жестких чехлах. Удостоверьтесь, что Вы знаете достаточно о языках, которые Вы будете использовать, чтобы быть в состоянии написать код для обработки множественной проблемы правильно. Следует иметь в виду, что английский язык (и другие "западные" языки среди легких.

  • Никогда предложения повреждения и строки сборки с ними для установки переменной, поскольку переменная могла бы быть помещена в другое место в предложении на другом языке. Используйте заполнителей.

  • Имеют в виду, что для некоторых языков, значение заполнителя могло бы измениться, как записать предложение. Грамматика тверда. Удостоверьтесь, что у Вас есть план относительно контакта с ним. (А именно, удостоверьтесь, что у Вас есть способ классифицировать значения, которые Вы используете в заполнителях согласно полу, время, и т.д.).

11
ответ дан Epcylon 26 November 2019 в 22:36
поделиться

Я хотел бы сделать следующие комментарии - это из некоторых инструкций компании, где продукты класса 1 переводятся в [1 113] 31 различные локали. После этих инструкций дал нам (наша группа разработчиков, а не целая компания) самую большую производительность в переводе.

  • не пытаются снова использовать отрывки сообщений об ошибках. Например, не думайте, что, потому что у Вас есть эти две ошибки "You selected the wrong menu item" и "That menu item is not yet available", можно извлечь "menu item" в отдельный объект и использовать его в обоих местах. Весь сообщения должны быть сам содержавшие, поскольку их переводы могут измениться на основе контекста.

  • Использование профессиональный переводчик хорошо осведомленный о технологии. Если Вы идете около сервиса как BabelFish, Вы собираетесь получить все, чего Вы заслуживаете. Например, "Microsoft Windows" "Microsoft Windows" везде на планете, это не становится "Microsoft Fenster" в Германии.

  • Попытка не к встроенным переменным в [1 116] Ваши сообщения (такой как "The %1 has failed", где %1 изменения динамично) начиная с положений и, действительно, пол может измениться: "La table est rubbish" по сравнению с "L'Homme est drunk", или "The red table" по сравнению с [1 111]. Лучше использовать универсальное существительное с добавленными параметрами: "The item has failed [%1]".

  • Только переводят вещи, которые пользователь ожидается к [1 117], посмотрите. Журнал обменивается сообщениями в файле журнала (что только Вы будете использовать), должен быть на английском языке (или Ваш родной язык), не переведен во что-то как суахили, которого Вы не могли читать так или иначе.

  • Меню должны быть отсортированы по функциональности, не сопоставив порядок.

  • Переводимые единицы должны быть сохранены внешний к коду и загружены в во времени выполнения. Это делает перевод проблемой из просто отправки внешнего файла, не пробуя к изменениям рожка для обуви в середину кода. Это также делает добавление других языков легче в будущем.

Это достаточно на данный момент. Лучше для остановки перед отключением:-)

8
ответ дан paxdiablo 26 November 2019 в 22:36
поделиться

Вещь о числах: на английском языке, как я понимаю, Вы просто используете исключительное с 1 и множественное число с 2 или больше. Как: “You имеют 1 message”; “2 messages”; “3... messages”. На русском языке эти вещи становятся более сложными. Вы используете исключительный для 1, 21, 31, 41... 101, 121 (так, для всего заканчивающегося 1 кроме тех случаев, когда это заканчивается 11). Тогда Вы используете исключительный родительный падеж для 2, 3, 4; 22, 23, 24; 32, 33, 34... 102, 103, 104; 122, 123, 124. И во всех других случаях Вы используете множественный родительный падеж .

It’s не действительно трудно для реализации. Что является твердо, хотя должен реализовать что-то, что будет знать, как иметь дело с любым априорным неизвестным языком со всей его странностью:-)

И that’s просто числа:-)

7
ответ дан Ilya Birman 26 November 2019 в 22:36
поделиться

Я не имею много для добавления к большим ответам до сих пор, но здесь являюсь несколькими вещами рассмотреть и проверить.

  • Не делайте предположения. Это - выгода все правило. Легко принять вещи, которые являются регионом или конкретным языком, и трудно заметить эти предположения.
  • Будьте очень осторожны со сравнениями строк. Существуют некоторые языки, такие как турецкие языки, которые имеют буквы, которые подобны другим визуально, но которые отличаются.
  • Используйте псевдо перевод в качестве испытания с помощью дыма. Если Вы читаете свои переведенные строки из файла ресурсов, создаете псевдо переведенную версию файла, который все еще понятен Вам, но который подчеркивает способность и возможность каждой переводимой строки в приложении. Например, увеличьте строку как "Отмена" с чем-то как "CancelXXXX!" так, чтобы это было столь же широко как Ваш допуск на переведенные строки. Затем можно протестировать, чтобы проверить, что каждая строка отобразится полностью. Дополнительный кредит на то, чтобы также всунуть самый сложный символ, вероятно, чтобы быть представленным, чтобы проверить, что это отображается правильно во всех местах.
  • Не делайте предположения о раскладках клавиатуры. "ASDW" может быть большим набором управления клавиш направления для QWERTY-клавиатур, но трудно кодирование, которое делает его недружелюбным, если не невозможный, для использования для людей с другими раскладками клавиатуры.
  • Протестируйте различные настройки даты, затем протестируйте их снова. Я видел проблемы из-за чего-то как маленькие, поскольку другой формат для "/PM" в региональных настройках. mm/dd/yyyy по сравнению с dd/mm/yyyy также подходит много, но каждая установка здесь может иметь значение.
  • Протестируйте различные числовые форматы, затем протестируйте их снова. Вы не хотите зависеть от десятичного числа или тысяч разделителей, например.
  • Тест с и без пользователя вошел в систему сервера. Это может быть большим количеством конкретного Windows, но очень легко получить компонент на сервере, настроенном таким образом, что это использует региональные настройки зарегистрированного пользователя, в то время как пользователь зарегистрирован и региональная настройка по умолчанию, когда пользователь не зарегистрирован. Это может вызвать странное, неустойчивое поведение.
  • Тест с региональным различным и настройки языка. Как пример, мало того, что Windows имеет региональным и настройки языка, но и IE имеет свою собственную установку языка. Поведение клиента IE с en-us, перечисленным сначала, не может всегда совпадать с один с en-nz, перечисленным сначала, например.
  • Удостоверьтесь, что Ваш переводчик понимает бизнес и языки, затем перепроверьте с кем-то еще. Будьте очень осторожны любое время, Вы используете специализированную терминологию. Если Ваша программа использует определенные слова для значения чего-то специального в приложении, удостоверьтесь, что они переводятся похожим способом в каждом экземпляре, включая в тексте справки. Если у Вас есть определенные цели языка, Вы могли бы даже пойти, насколько перевести такие слова заранее и удостовериться, что они не переводят плохо на выходных языках. Это - больше вещи исследования продукта, но это может иметь значение в том, какие слова используются в интерфейсе, и легче на всех, если те слова существуют с начала. Вы также хотите избежать идиом, которые не могут перевести хорошо.

Хорошо, я имел больше для высказывания, чем я думал...

6
ответ дан Malachi 26 November 2019 в 22:36
поделиться

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

, например, вместо того, чтобы назвать файл 'sample-database.txt' называют английскую версию 'sample-database-loc-en.txt', итальянская версия 'sample-database-loc-it.txt

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

Мой первый ответ в StackOverflow, таким образом простите, если некоторые глупые были сказаны.

На основе моего опыта:

  • PHP: gettext был чрезвычайно полезен;
  • незападные языки : UTF-8 везде (код, DB) и до сих пор мы преуспеваем;
  • там какие-либо определенные глюки, которые Вы испытали на практике? Повреждающиеся длинные абзацы для i18n в различные предложения могут быть менее дорогими для перевода, если строка повторяется несколько раз в сайте, только необходимо было перевести его однажды. Но, будьте осторожны при фрагментации текста слишком много, переводчики потеряют контекст;
  • я видел много проектов, и сайты позволяют своим сообществам обеспечить перевод для их приложений и содержания. Вы рекомендуете это и каковы некоторые хорошие стратегии обеспечения, чтобы у Вас был хороший перевод? , Если у Вас есть очень большое количество волонтеров, идут для него, но в зависимости от того, сколько текста Вы имеете, Вам, возможно, действительно понадобилась бы тонна волонтеров. Всегда удостоверяйтесь также, что у Вас есть кто-то, кого Вы доверяете быть лидером проекта языка быть корректором, управляющим точностью перевода.
4
ответ дан Danilo OpenID 26 November 2019 в 22:36
поделиться

Да, это крупно предмет. Разбирание в нем является очень большой работой.

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

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

Что касается времен и дат... снова, это намного более сложно, чем Вы могли бы думать, но не делаете дескриптора PHP это для Вас? (Я не знаю, я - парень C++...)

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

PHP представляет строки внутренне как потоки байтов и принимает iso-8859-1 для случаев, где кодирование имеет значение. По большей части можно просто использовать UTF-8 повсеместно, и Вы будете в порядке. Один глюк, если Ваш сайт берет вход от своих пользователей, то, что Вы никогда не можете быть на 100% уверены, что они отправляют содержание в надлежащем кодировании. Вы могли бы хотеть использовать mb_detect_encoding проверить вход или использовать скрытое поле с "экзотическими" символами для проверки против.

Знайте, что все связанные со строкой функции в PHP, что работа на символьном основании, принимают тот символ = байт. Это означает, что Вы обычно не можете доверять строковым функциям. Взгляните на эту страницу для получения дополнительной информации.

Другой хороший ресурс для PHP, cheatsheet Nick Nettleton.

Предметом, который очень тесно связан с наборами символов/кодировкой, является сопоставление. Вам нужны Ваши сопоставления для соответствия языку/культуре, с которым Вы работаете. По крайней мере, в MySql (вероятно, в другом RDBMS'es также), можно указать сопоставление на разных уровнях, такой как для каждой базы данных, на таблицу, для каждого столбца и даже в самом запросе.

1
ответ дан troelskn 26 November 2019 в 22:36
поделиться
  • Правила сортировки / сортировки могут сильно отличаться для разных языков: ä сортируется по-немецки иначе, чем по-шведски. Таким образом, сортировка должна быть специфичной для культуры.
  • Верхний / нижний регистр может содержать сюрпризы: немецкий «острый S» символ ß не имеет заглавной версии и либо преобразуется в «SS», либо остается строчным, если важна точность , Турецкий язык имеет строчную букву i без точки и прописную букву I.
  • Для многоязычных веб-приложений тщательно продумайте, как решить, какую версию показывать и как включить ее в URL-адрес. Пользователь всегда должен иметь возможность вручную выбирать язык, и вы хотите, чтобы поисковые системы находили версии на разных языках по разным URL-адресам.
  • Некоторые восточноазиатские языки (а именно японский и китайский, может быть, другие) не имеют пробелов между словами
  • Японский (может быть, и другие) имеет отдельные версии ( "полная ширина") арабских цифр и пробела, и даже две версии некоторых своих собственных символов (половинная ширина и полная ширина катакана).
3
ответ дан 26 November 2019 в 22:36
поделиться
Другие вопросы по тегам:

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