powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Локализация REST приложений
12 сообщений из 12, страница 1 из 1
Локализация REST приложений
    #38847235
eduard93
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть REST веб-приложение.
Хотелось бы, чтобы язык сессии устанавливался автоматически в зависимости от значения хэдера Accept-Language (как написано в документации ) Однако вне зависимости он того, какой хэдер я посылаю (например: Accept-Language: en-US,en;q=0.5 или Accept-Language:ru) ответ приходет на языке установленном в портале управления системой для данного пользователя. Как вариант можно самому брать значение хэдера и устанавливать язык сессии, но нет ли варианта проще?

Прилагаю брокер с 2мя методами:
/test выводит текущую локаль и сообщение в ней
/testmanual устанавливает английскую локаль и сообщение в ней

Создание веб-приложения: do ##class(REST.Broker).CreateWebApp("/name")
...
Рейтинг: 0 / 0
Локализация REST приложений
    #38847240
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eduard93Прилагаю брокер с 2мя методами:Где именно прилагаете?
...
Рейтинг: 0 / 0
Локализация REST приложений
    #38847253
eduard93
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servit,

Вот. Был уверен что загрузил его в первый раз.
...
Рейтинг: 0 / 0
Локализация REST приложений
    #38847268
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Показывайте как Вы передаёте Accept-Language : у меня всё работает как положено.
Class REST.test Extends %CSP.REST
{

/// The default domain for csp:text, span and div tags.  This parameter is
/// used to specify the subset of localized messages to be used on this page.
Parameter DOMAIN = "MyDomain";

XData UrlMap [ XMLNamespace = " http://www.intersystems.com/urlmap"  ]
{
<Routes>
  <Route Url="/test" Method="GET" Call="Test"/>
</Routes>
}

ClassMethod Test() As %Status
{
  w "$$$SessionLanguage: ",$$$SessionLanguage," ",$$$Text("Язык"),!
  f i="en","fr" {
    s $$$SessionLanguageNode=i
    w "$$$SessionLanguage: ",$$$SessionLanguage," ",$$$Text("Язык"),!
  }
  q $$$OK
}

}
Результат:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
USER>!curl -s  http://localhost/csp/rest/test 

$$$SessionLanguage: ru Язык
$$$SessionLanguage: en Language
$$$SessionLanguage: fr Langue
USER>!curl -s -H "Accept-Language:ru"  http://localhost/csp/rest/test 

$$$SessionLanguage: ru Язык
$$$SessionLanguage: en Language
$$$SessionLanguage: fr Langue
USER>!curl -s -H "Accept-Language:en"  http://localhost/csp/rest/test 

$$$SessionLanguage: en Language
$$$SessionLanguage: en Language
$$$SessionLanguage: fr Langue
USER>!curl -s -H "Accept-Language:fr"  http://localhost/csp/rest/test 

$$$SessionLanguage: fr Langue
$$$SessionLanguage: en Language
$$$SessionLanguage: fr Langue
...
Рейтинг: 0 / 0
Локализация REST приложений
    #38847285
Александр Коблов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eduard93 , а $zv напиши, пожалуйста.
...
Рейтинг: 0 / 0
Локализация REST приложений
    #38847306
eduard93
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр Коблов, Cache for Windows (x86-64) 2015.1 (Build 256U) Fri Oct 3 2014 00:16:45 EDT

servit передаю следующие запросы:

Код: l
1.
2.
3.
4.
5.
6.
7.
GET /lc/test HTTP/1.1
Host: localhost:57772
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en
Accept-Encoding: gzip, deflate
DNT: 1
Connection: keep-alive


Код: l
1.
2.
3.
4.
5.
6.
7.
GET /lc/test HTTP/1.1
Host: localhost:57772
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru
Accept-Encoding: gzip, deflate
DNT: 1
Connection: keep-alive


Код: l
1.
2.
3.
4.
5.
6.
7.
GET /lc/test HTTP/1.1
Host: localhost:57772
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Connection: keep-alive


На любой из них получаю ответ:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
HTTP/1.1 200 OK
Date: Wed, 31 Dec 2014 16:44:32 GMT
Server: Apache
CACHE-CONTROL: no-cache
EXPIRES: Thu, 29 Oct 1998 17:04:19 GMT
PRAGMA: no-cache
CONTENT-ENCODING: gzip
CONTENT-LENGTH: 83
Keep-Alive: timeout=120
Connection: Keep-Alive
Content-Type: text/html; charset=utf-8

$$$SessionLanguage: ru<br>Имя пользователя
...
Рейтинг: 0 / 0
Локализация REST приложений
    #38847330
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр Коблов eduard93 , а $zv напиши, пожалуйста.Из приложенного XML:
Cache for UNIX (SUSE Linux Enterprise Server for x86-64) 2015.1 (Build 419U)
...
Рейтинг: 0 / 0
Локализация REST приложений
    #38847348
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eduard93 ,

Если использовать curl, проблема наблюдается?

Также проверьте, есть ли в домене %Utility нужные языки, в противном случае предпочтительный язык из HTTP_ACCEPT_LANGUAGE для сессии не установится.

Проверил прямо из IE и Opera, меняя приоритеты языков - проблем нет (Cache for Windows (x86-64) 2015.1 (Build 419U)).
ClassMethod Test() As %Status
{
  w %request.UserAgent,"<br>",!
  w "HTTP_ACCEPT_LANGUAGE: ",%request.GetCgiEnv("HTTP_ACCEPT_LANGUAGE"),"<br>",!
  w "$$$SessionLanguage: ",$$$SessionLanguage,"<br>",!
  w $$$Text("Language"),"<br>",!
  q $$$OK
}


Результаты:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko
HTTP_ACCEPT_LANGUAGE: en-US,en;q=0.7,ru;q=0.3
$$$SessionLanguage: en
Language

Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko
HTTP_ACCEPT_LANGUAGE: ru,en-US;q=0.7,en;q=0.3
$$$SessionLanguage: ru
Язык

Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko
HTTP_ACCEPT_LANGUAGE: fr-FR,fr;q=0.8,ru;q=0.6,en-US;q=0.4,en;q=0.2
$$$SessionLanguage: fr
Langue

Opera/9.80 (Windows NT 6.2; WOW64) Presto/2.12.388 Version/12.17
HTTP_ACCEPT_LANGUAGE: ru-RU,ru;q=0.9,en;q=0.8
$$$SessionLanguage: ru
Язык

Opera/9.80 (Windows NT 6.2; WOW64) Presto/2.12.388 Version/12.17
HTTP_ACCEPT_LANGUAGE: en,ru-RU;q=0.9,ru;q=0.8
$$$SessionLanguage: en
Language

Opera/9.80 (Windows NT 6.2; WOW64) Presto/2.12.388 Version/12.17
HTTP_ACCEPT_LANGUAGE: fr,ru-RU;q=0.9,ru;q=0.8,en;q=0.7
$$$SessionLanguage: fr
Langue
...
Рейтинг: 0 / 0
Локализация REST приложений
    #38847410
eduard93
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servit,

servitИз приложенного XML:
Cache for UNIX (SUSE Linux Enterprise Server for x86-64) 2015.1 (Build 419U) Там я тоже пробовал с такими же результатами.

servitЕсли использовать curl, проблема наблюдается?Наблюдается.


servitТакже проверьте, есть ли в домене %Utility нужные языки,
На скриншоте проверил. Да и к тому же это системный домен, он по умолчанию есть.

servitПроверил прямо из IE и Opera, меняя приоритеты языков - проблем нет
В Opera 12 оно настраивается в: Opera -> Меню -> Настройки -> Общие настройки -> Укажите языковые предпочтения для интерфейса Opera и веб-страниц -> Настройки -> Предпочитаемые языки для веб-страниц? Установил там только английский, также реакции никакой нет.
...
Рейтинг: 0 / 0
Локализация REST приложений
    #38847415
eduard93
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильный скриншот



curl -s -v -H "Accept-Language:en" http://localhost:57772/lc/test
* Hostname was NOT found in DNS cache
* Trying ::1...
* Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 57772 (#0)
> GET /lc/test HTTP/1.1
> User-Agent: curl/7.39.0
> Host: localhost:57772
> Accept: */*
> Accept-Language:en
>
< HTTP/1.1 200 OK
< Date: Thu, 01 Jan 2015 10:07:57 GMT
< Server: Apache
< CACHE-CONTROL: no-cache
< EXPIRES: Thu, 29 Oct 1998 17:04:19 GMT
< PRAGMA: no-cache
< CONTENT-LENGTH: 57
< Content-Type: text/html; charset=utf-8
<
$$$SessionLanguage: ru<br>Имя пользователя* Failed writing body (42 != 57)
* Closing connection 0
...
Рейтинг: 0 / 0
Локализация REST приложений
    #38847502
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eduard93 , Проблема из-за использования системного домена, который начинается с "%". Похоже на баг: Вы нашли, Вам и заводить проблему в WRC. Обходных путей несколько:
  • не использовать системный домен
  • переопределить метод DispatchRequest, добавив перед $zobjclassmethod строку s %response.Language=$$MatchLanguage^%occMessages(%request.GetCgiEnv("HTTP_ACCEPT_LANGUAGE"),..#DOMAIN,$s($e(..#DOMAIN)="%":"+s",1:"-s"))
  • создать языковые заглушки в ^CacheMsg, например:
  • Код: plaintext
    1.
    2.
    3.
    4.
    5.
    USER>zw ^CacheMsg("%Utility")
    ^CacheMsg("%Utility")="en"
    ^CacheMsg("%Utility","en")=""
    ^CacheMsg("%Utility","fr")=""
    ...
    ^CacheMsg("%Utility","ru")=""
...
Рейтинг: 0 / 0
Локализация REST приложений
    #38847505
eduard93
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servit, спасибо, заведу.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Локализация REST приложений
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]