Может ли одна локальная строка .resx ссылаться на другую локальную строку .resx? - PullRequest
3 голосов
/ 19 июня 2010

Я пытаюсь определить, возможно ли добавить объединенную строку в один из моих локальных файлов .resx.Этот пример должен прояснить:

Допустим, у меня есть простая веб-страница ASP.NET, состоящая из (1) метки, текст которой является важным ключевым словом (2) ввода с обязательной проверкой поля и (3)кнопка, которая вызывает проверку:

(lblMyInput)
(txtMyInput)
(rfvMyInput)
(btnSubmit)

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

PSEUDOCODE: myPage.resx

(1) lblMyInput.Text = "Name"
(2) rfvMyInput.ErrorMessage = "The " + lblMyInput.Text + " field may not be left blank."
(3) btnSubmit.Text = "Submit/Validate"

Есть ли способ осуществить этот тип объединения одной строки файла ресурсов в другую строку в том же файле?

Спасибо!

Ответы [ 2 ]

4 голосов
/ 19 июня 2010

Один из способов сделать это - иметь две строки resx и работать так:

Resource1: "Hello, this is a {0}" Resource2: "Cookie"

И используйте анализатор строк для добавления Resource2 в Resource1. Стандартное решение, но не очень хорошее, поскольку оно требует, чтобы разработчик знал о {0}. Это также приводит к проблемам с локализацией, если она когда-либо переходит на перевод. Не все языки имеют слова в том же порядке, что и английский.

1 голос
/ 05 июня 2012

Вы должны использовать метод GetGlobalResourceObject внутри кода .aspx или в коде позади и сохранить строковый ресурс способом

Поле {0} не может быть пустым.

Например, в коде .aspx вы можете попробовать:

<asp:RequiredFieldValidator ruant="server" ID="rfvMyInput" ErrorMessage="<%= String.Format((string)GetGlobalResourceObject("GlobalResourceBaseName", "GlobalResourceKey"), lblMyInput.Text) %>" />

или в коде:

rfvMyInput.ErrorMessage=String.Format((string)GetGlobalResourceObject("GlobalResourceBaseName", "GlobalResourceKey"), lblMyInput.Text);

Изменяя строки GlobalResourceBaseName и GlobalResourceKey, но те, которые вы используете.

...