2010-06-18 6 views
3

Я пытаюсь определить, можно ли добавить конкатенированную строку в один из моих локальных файлов .resx. В этом примере должны быть уточнены:Может ли одна локальная строка .resx ссылаться на другую локальную строку .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" 

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

Спасибо!

+0

Файлы resx - это только файлы xml и не имеют этой сложной возможности, afaik. – Greg

ответ

3

Один из способов сделать это было бы, чтобы ваши две Resx строки и работать таким образом:

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

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

+1

+1, вот как я это делаю. Просто обратите внимание, что если он отправит небольшое объяснение в переводческую компанию, что {0} в основном является заполнителем (и пусть они знают, для чего нужен заполнитель), они должны иметь возможность обходиться довольно легко. – Brandon

+0

Ха-ха, я не могу поверить, что не думал об этом. Хорошая точка зрения. –

+0

Не могли бы вы уточнить, как используется синтаксический анализатор строк? Вы справляетесь с этим на странице codebehind или на странице .aspx? Или это неотъемлемое поведение, вызванное последовательной схемой именования «Resource1 ... Resource2»? – Buffalo

0

Вы должны использовать метод 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 строку, но те, ты используешь.