2008-11-06 1 views
16

Таким образом, мы уверены, что будем принимать наш продукт на международном уровне и в конечном итоге должны его интернационализировать. Насколько интернационализация вы бы порекомендовали нам, когда мы идем?Интернационализация настольных приложений в течение нескольких лет ... Что нам теперь делать?

Я думаю, другими словами, есть ли какая-либо интернационализация, которая сейчас легка, но может быть намного хуже, если мы позволим базе кода созреть, и это не сильно замедлит нас, если мы захотим начать делать это сейчас?

Технология используется: C#, WPF, WinForms

ответ

32

Готовят его сейчас, прежде чем писать все строки в самом коде.

Все будет уже поздно. Сейчас или никогда!

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

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

Проверьте эти рекомендации и убедитесь сами, почему лучше начать сейчас и подготовить все.

  1. Developing world ready applications

  2. Best practices for developing world ready applications

Маленький экстракт:

  1. Переместить все локализуемые ресурсы для отдельных ресурсов только библиотеки DLL. Локализуемые ресурсы включают элементы пользовательского интерфейса, такие как строки, сообщения об ошибках, диалоговые окна, меню и ресурсы встроенных объектов. (Перемещение ресурсов в DLL впоследствии будет больно)
  2. Не печатайте строки или ресурсы пользовательского интерфейса. (Если вы не подготовили, вы знаете, что будете строчить строки)
  3. Не помещайте нелокализуемые ресурсы в библиотеки ресурсов. Это вызывает путаницу для переводчиков.
  4. Не используйте композитные строки, которые создаются во время выполнения из конкатенированных фраз. Композитные строки трудно локализовать, потому что они часто предполагают английский грамматический порядок, который не распространяется на все языки. (После того, как дизайн интерфейса изменится, фразы усложняются)
  5. Избегайте неоднозначных конструкций, таких как «Пустая папка», где строки могут быть переведены по-разному в зависимости от грамматических ролей компонентов строк. Например, «пустой» может быть либо глаголом, либо прилагательным, и это может привести к различным переводам на таких языках, как итальянский или французский. (Same issue)
  6. Избегайте использования изображений и значков, содержащих текст в приложении. Они дороги для локализации. (Используйте текст, изображенный на картинке)
  7. Достаточно места для расширения строк в пользовательском интерфейсе. На некоторых языках фразы могут потребовать на 50-75 процентов больше места.(Тот же вопрос, если вы не планируете его сейчас, редизайн стоит дороже)
  8. Используйте класс System.Resources.ResourceManager для извлечения ресурсов на основе культуры.
  9. Используйте Microsoft Visual Studio .NET для создания диалоговых окон Windows Forms, чтобы их можно было локализовать с помощью редактора ресурсов Windows Forms (Winres.exe). Не копируйте диалоговые окна Windows Forms вручную.
3

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

Я работал над двумя проектами, которые делали интернационализацию: приложение C# ASP.NET (существовало до того, как я присоединился к проекту) и приложение PHP (самодельный мой собственный метод с использованием бесплатного элемента управления интернационализацией и моего собственного приложения управления).

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

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

Я обезжиренное над МС документы по этой теме: http://www.microsoft.com/globaldev/getwr/dotneti18n.mspx

Некоторые основные вещи, чтобы избежать:

  • никогда не когда-либо использовать программное обеспечение для перевода, нанять профессионала или стажера, принимая этот язык в местный колледж
  • никогда не пытайтесь создать текст, добавив две существующие записи, поскольку грамматика сильно отличается на каждом языке, это никогда не будет работать. Поэтому, если у вас есть строка с надписью «Нажмите» и хотите, чтобы она говорила «Нажмите сейчас», не пытайтесь создать установку, которая объединяет две записи или во время перевода, скопируйте слово для щелчка и переведите слово сейчас. Рассматривайте каждую строку как совершенно новый перевод с нуля.
+0

Что касается YAGNI ... да, я так думаю о многом. Это одна из областей, где я был забит ею. Интернационализация - это распространенный способ расширить базу пользователей вашего продукта, чтобы вы могли убедиться, что сможете это сделать. Один проект, над которым я работал, буквально не мог.Это было плохо. – 2008-11-07 01:13:43

2

Я добавлю, чтобы хранить и обрабатывать строковые данные как Unicode (NVARCHAR в MS SQL).

0

Если вы используете тестовые данные, используйте неанглийские (например, русские, польские, норвежские и т. Д.) Строки. Кодирование заглядывает в маленькую уродливую голову на каждом углу. Если не в ваших собственных библиотеках, то во внешних.

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

+0

странно! сделал такую ​​же опечатку три раза. Даже на моем родном языке это не написано. И другие языки, которые я написал правильно. Иногда я обманываю даже себя – 2008-12-29 13:45:02

0

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

  1. Поддержка международных символов - использование только типов данных Unicode в файлах и базах данных.
  2. Поддержка международных форматов даты, времени и числа - используйте CultureInfo.InvariantCulture, когда вы храните данные в файловом или машиночитаемом хранилище, используйте CultureInfo.CurrentCulture при отображении данных или разборе пользовательского ввода, никогда не выполняйте собственный анализ, никогда не используйте какие-либо другие объекты культуры ,
  3. текстовые данные, введенные пользователем, должны рассматриваться как черный ящик, не пытайтесь разбить его на слова или буквы, особенно при отображении его пользователю - на разных языках действуют правила дифракции, а ОС знает, как отображать слева вправо, вы этого не делаете.

Локализация - это перевод программного обеспечения на разные языки, это сложно и дорого, хороший старт - никогда не строчить строки кода и никогда не создавать предложения из меньших строк.

1

Некоторые вопросы к думает о ...

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

Вы по-прежнему будете торговать, если вы не получите денежный поток от доставки английской версии быстро?

Как вы получите пользовательский интерфейс, если вы не получите обратную связь быстро от некоторых клиентов?

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

Вы, английские клиенты, хотите иметь возможность настраивать строки в пользовательском интерфейсе, например. не каждый называет «отгрузочной запиской» то же самое.

Как большая часть боли интернационализации, убедитесь, что вы не нарушаете английскую версию, автоматизированное системное тестирование пользовательского интерфейса - лучшая инвестиция?

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

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

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