Как включить переменные в локализованные строки?
Я пытаюсь отобразить сообщение пользователю по строкам:
"Пользователь 5 не может быть добавлен"
Но как добавить переменные в строку, помещенную в файл .resx? Я пытаюсь найти такие вещи, как "Переменные в локализации", "Глобализация с переменными" и т.д., Но придумал сухую.
Если бы я не был локализован, я бы написал:
Console.Write("User " + userNum + " could not be added");
Как это можно сделать с помощью ресурсов?
Ответы
Ответ 1
В командах, где я делал интернационализацию, мы также создали ресурс для строки формата, например USER_COULD_NOT_BE_ADDED_FORMAT, и назвали String.Format(или эквивалент вашей среды), передав это значение ресурса в качестве шаблона формата.
Затем вы сделаете Console.Write(String.Format(resourceManager.GetString("USER_COULD_NOT_BE_ADDED_FORMAT"), userNum));
Большинство локализаторов либо проходят обучение в строках формата, используемых системой, которую они локализуют, либо им предоставляется руководство в наборе локализации, который вы им предоставляете. Таким образом, это не так, например, как высокий барьер, поскольку они непосредственно изменяют код.
Обычно вам нужно добавить комментарий loc к идентификатору ресурса, чтобы объяснить позиционные параметры.
Ответ 2
Вы не можете сделать это напрямую.
Что вы можете сделать, это разместить токен - определенную строку, которая может быть заменена на string.Replace
значением переменной.
Хорошим кандидатом для этого будет встроенное форматирование строк:
Console.Write(string.Format("User {0} could not be added", userNum));
Предполагая, что userNum
имеет значение 5
, результатом будет:
User 5 could not be added
Вы можете локализовать эту строку с помощью спецификаторов композитного формата.
Ответ 3
Используйте Composite Formatting так:
Console.Write("User {0} could not be added", userNum);
Таким образом, вы можете локализовать "User {0} could not be added"
.
Ответ 4
Я бы использовал string.Format
http://msdn.microsoft.com/en-us/library/system.string.format.aspx
Console.Write(string.Format("User {0} could not be added", userNum));
Ответ 5
вы можете сделать это просто
![введите описание изображения здесь]()
new позволяет видеть, как
String.Format(Resource_en.PhoneNumberForEmployeeAlreadyExist,letterForm.EmployeeName[i])
это даст мне динамическое сообщение каждый раз
кстати, я использую ResXManager