Как я лучше всего локализую целое приложение на многие различные языки?

К сожалению, @Html.DropDownListFor() ведет себя несколько иначе, чем другие помощники при рендеринге элементов управления в цикле. Об этом ранее сообщалось как о проблеме с CodePlex (не уверен, что ее ошибка или просто ограничение)

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

Вариант 1 (с использованием EditorTemplate)

Создайте пользовательский EditorTemplate для типа в коллекции. Создайте парциальное значение в /Views/Shared/EditorTemplates/AggregationLevelConfiguration.cshtml (обратите внимание, что имя должно соответствовать имени типа

@model yourAssembly.AggregationLevelConfiguration
@Html.DropDownListFor(m => m.HelperCodeType, (SelectList)ViewData["CodeTypeItems"])
.... // other properties of AggregationLevelConfiguration

, а затем в главном представлении передать SelectList в EditorTemplate как additionalViewData

@using (Html.BeginForm())
{
  ...
  @Html.EditorFor(m => m.Configurations , new { CodeTypeItems = Model.CodeTypeItems })
  ...

Вариант 2 (сгенерируйте новую SelectList на каждой итерации и установите selectedValue)

В этом параметре ваше свойство CodeTypeItems должно быть IEnumerable<GenericIdNameType>, а не SelectList (или просто сделать codeTypes общедоступным свойством). Затем в главном представлении

@Html.DropDownListFor(m => m.Configurations[0].HelperCodeType, new SelectList(Model.CodeTypeItems, "Id", "Name", Model.Configurations[0].HelperCodeType)

Сторона примечания: нет необходимости использовать new { id = "Configurations[0].HelperCodeType" - метод DropDownListFor() уже сгенерированный атрибут id

6
задан Mansfield 7 June 2012 в 02:39
поделиться

5 ответов

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

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

http://msdn.microsoft.com/en-us/library/y99d1cd3 (По сравнению с 80) .aspx, кажется, хорошее начало хотя, если Вы имеете дело с Windows Forms.

3
ответ дан 10 December 2019 в 02:56
поделиться

Рекомендуемый подход Microsoft должен использовать сборки-сателлиты, как описано в Упаковке и Развертывании Ресурсов. При использовании ResourceManager для загрузки ресурсов.NET загрузит корректные ресурсы для CurrentUICulture. Это принимает значение по умолчанию к текущей установке языка UI пользователя в Windows.

Возможно локализовать Windows Forms или через Visual Studio или через внешний инструмент, WinRes.exe. Эта статья описывает WinRes и как использовать Visual Studio для локализации формы.

1
ответ дан 10 December 2019 в 02:56
поделиться

Классический рецепт: разработайте приложение без родного языка, но средства локализации, и разработайте инициализацию на один язык (например, английский язык). Таким образом, Вы создаете приложение и локализуете его на английский язык каждую ночь; без шага локализации это не было бы применимо. Сделайте это хорошо, и ресурсы для начальной демонстрационной локализации могут быть заменены ресурсами для любого другого языка. Примите во внимание неримские сценарии с начала. Это намного более чисто, чтобы иметь приложение без языков, которое всегда требует локализации, а не определенного для языка приложения, которому нужно было вычесть его родной язык и добавленную замену.

3
ответ дан 10 December 2019 в 02:56
поделиться

Определенно необходимо использовать ResourceManager.NET и resx файл xml формат, однако существует много подходов к использованию этого.

Это действительно зависит от того, чего Вы желаете достигнуть. Для меня я хотел единственный xml файл ресурсов (для каждого поддерживаемого языка), который мог быть изменен любым. Я создал класс помощника, который загрузил глобальный файл ресурсов в ResourceManager (однажды только), и я сделал, чтобы помощник функционировал, который дает мне необходимый ресурс для имени. Единственный недостаток в этом подходе был то, что я не мог усилить динамическое связывание ресурсов к свойствам.

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

1
ответ дан 10 December 2019 в 02:56
поделиться

Для строк необходимо просто разделить строки от кода (имеющий XML/DLL, который преобразует идентификаторы строки к реальным строкам, один способ пойти). Однако действительно необходимо удостовериться, что Вы поддерживаете двухбайтовые символы для некоторых языков (это релевантно при использовании C/C++).

Для входных данных, что Вы хотите, должен иметь другую локаль. В Java это относительно легко, и если Вы используете C#, это, вероятно, довольно легко также. В C/C++ я действительно не знаю. Основная идея состоит в том, что входные синтаксические анализаторы должны отличаться на основе локали, выбранной в то время. Таким образом, каждое поле (текстовое поле, текстовое поле, и т.д.) должно иметь абстрактный синтаксический анализатор, который затем реализован другим классом в зависимости от локали (справа налево, двухбайтовый, и т.д.).

Проверьте реализацию Java на детали о том, как они сделали это. Это довольно функционально.

1
ответ дан 10 December 2019 в 02:56
поделиться
Другие вопросы по тегам:

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