2013-03-12 1 views
1

Я работаю на стороне сервера REST.Как обрабатывать динамическую строку ошибок на стороне клиента для интернационализации

Я буду обновлять error_code и error_message в заголовках HTTP при ответе на клиента. Это нормально, пока error_message не статичен.

e.g. error_code : PC_USER_007 
    error_message : You are logged out! 

на стороне клиента будет смотреть на error_code(PC_USER_007); в соответствующих свойствах, и они будут выполнять локализацию. Итак, теперь GUI покажет вам тот же error_message на китайском, если пользователь принадлежит Китаю.

Если это динамическая строка ошибки, как показано ниже,

e.g. error_code : PC_USER_008 
    error_message : You have tried 2 attempts; only 1 attempts is remaining. 
Here 2, 1 are dynamic values.. 

Теперь GUI сторона, как мы можем преобразовать это сообщение об ошибке на другой язык.

Любые рамки (стойки, пружины ...), уже поддерживающие такую ​​локализацию?

Это как раз напротив вопрос How to replace a set of tokens in a Java String?

стороне сервера я затем ссылку выше; теперь я хочу противоположный случай на стороне клиента.

+0

вы могли бы использовать ANTLR и написать какое-то грамматика на основе всех возможных сообщений об ошибках «Dynamic». если я правильно понял, сообщения об ошибках всегда бывают на английском языке. Тогда вам просто нужно написать грамматику, которая улавливает такие вещи, как «Пробовали попытки« числа », останутся только попытки« числа »». то с помощью antlr вы можете получить доступ к этим номерам после шага синтаксического анализа и создать новую локализованную строку. – ITroubs

+2

Передача полного error_message довольно странная. Обычно сервер передает error_code и набор значений. Затем на стороне клиента у вас есть шаблоны для этого кода ошибки на многих языках, похожих на «Это аргумент {1} и arg {2}", "Ceci est argument {1} et arg {2}" и т. Д. ... и вы заменяете {1} ... {n} с полученными значениями. –

+0

+1 @BGR Теперь у меня есть свет здесь –

ответ

6

Передача полного сообщения об ошибке error_message не подходит.

Обычно сервер передает error_code и набор значений ошибок. например

error_code: PC_USER_008 
error_values: "42", "a value" 

Клиент имеет шаблоны для этого Error_Code на многих языках похожего

"This is argument {1} and arg {2}" 
"Ceci est argument {1} et arg {2}" 

и т.д ..

тогда клиент выполняет простую замену строки заполнителей {1} ... { n} с полученными значениями

0

Обычно, если вы имеете дело с многоязычными приложениями, вы должны использовать идентификатор, чтобы идентифицировать ваши тексты на сервере и в графическом интерфейсе и лет u должен использовать в поле error_message идентификатор текста. Существуют некоторые рамки, которые используют в качестве идентификатора английский текст.

1

Если бы я был вами, я бы сначала переместил коды ошибок из заголовков HTTP в структуру в контенте ответа (скажем, json). Заголовки не являются иерархическими и не имеют структуры. Вам лучше включить их в ответ с соответствующим кодом состояния.

Что касается локализованных сообщений и их шаблонов, я не сталкивался с какой-либо службой REST, которая возвращает ответ об ошибке без сообщения об ошибке. Посмотрите на zoho, django (REST API), например S3. Все они возвращают коды и сообщения.

  1. Проблема с возвратом сообщения заключается в том, что ваш клиент никогда не узнает, в чем проблема. Это делает более сложной отладку .
  2. У клиентов также не будет доступа к новым кодам ошибок, которые вы вводите в свой код сервера позже, что усиливает # 1.
  3. Устаревшие коды ошибок или изменение их сообщений об ошибках больше не находятся под вашим контролем.

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

0

Неправильная практика отправки всего сообщения об ошибке в заголовках ответов. Вы можете отправить код ошибки и реализовать специальные сообщения для этих кодов.

в javascript после запроса на успех используйте методы обратного вызова для отслеживания кода ответа об отказе. создайте пакет для чтения другого файла свойств для конкретного пользователя локали и прочитайте значение ключа и покажите правильное сообщение об ошибке.

например:

Properties file/ JS file 
1. EnglishLabels.properties 
2. MexicanLabels.properties 
3. JapaneseLabels.properties 

var bundle = read the specific property file and save the map (key : 0001 , value : Invalid Login) 

позже после того, как запрос на успех, используйте метод обратного вызова, чтобы показать конкретное сообщение об ошибке локали.

С уважением Punith

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