2012-06-08 2 views
11

Я пытаюсь отобразить сообщение пользователя по линиям:Как включить переменные в локализованные строки?

«Пользователь 5 не может быть добавлен»

Но как я могу добавить переменные в строку, размещаемая в. resx файл? Я пытаюсь найти такие вещи, как «Переменные в локализации», «Глобализация с переменными» и т. Д., Но придумал сухую.

Если бы я не локализовать я бы написать:

Console.Write("User " + userNum + " could not be added"); 

Как это может быть достигнуто с ресурсами?

+0

Вы не должны конструировать/печатать строку с + в любом случае. String.Format гораздо проще работать с ... –

ответ

8

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

Тогда вы будете делать Console.Write(String.Format(resourceManager.GetString("USER_COULD_NOT_BE_ADDED_FORMAT"), userNum));

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

Обычно вам необходимо добавить комментарий loc к идентификатору ресурса, чтобы объяснить позиционные параметры.

+1

Не могли бы вы немного углубиться в то, как я могу добавить такой «loc comment to resource ID»? Или укажите мне ссылку, чтобы узнать больше? Благодаря! :) –

+0

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

+1

Предполагая, что вы используете формат .resx, комментарий о локализации представляет собой «комментарий» в пользовательском интерфейсе редактора resx или '' в xml сразу после ' элемент. – JasonTrue

11

Вы не можете сделать это напрямую.

Что вы можете сделать, это разместить маркер - конкретную строку, которая может быть заменена с string.Replace со значением переменной.

Хороший кандидат на это будет встроенный в строке форматирования:

Console.Write(string.Format("User {0} could not be added", userNum)); 

Предполагая userNum имеет значение 5, результат будет:

User 5 could not be added 

Вы можете локализовать эту строку с спецификаторы композитного формата.

5

Использование Composite Formatting так:

Console.Write("User {0} could not be added", userNum); 

Таким образом, вы бы локализовать "User {0} could not be added".

0

вы можете сделать ее простой enter image description here

новым позволяет увидеть, как

String.Format(Resource_en.PhoneNumberForEmployeeAlreadyExist,letterForm.EmployeeName[i]) 

это будет дала мне динамическое сообщение каждый раз, когда

самых Я использую g ResXManager

Смежные вопросы