#angular #docker #nginx #internationalization
Вопрос:
В моем приложении Angular есть раскрывающийся список с двумя вариантами: en и en-US. Поэтому выберите en с URL-адресом http://localhost:4200/en-US/Test/schedules#restore следует повторно отобразить страницу со следующим URL-адресом в строке расположения: http://localhost:4200/en/Test/schedules#restore
Мои неудачные попытки настроить NGINX:
#1)
server {
...
root /usr/share/nginx/html;
# Fallback to default language if no preference defined by browser
# if ($accept_language ~ "^$") {
set $accept_language "en-US";
# }
location ~ ^/en-US {
rewrite ^/en-US/(.*) /en-US/$1 last;
}
location ~ ^/en {
rewrite ^/en/(.*) /en/$1 last;
}
location ~ ^/(en|en-US) {
try_files $uri /$1/index.html?$args;
}
location / {
try_files $uri $uri/ /$accept_language/index.html =404;
}
}
Сообщение об ошибке:
:4200/en-US/активы/i18n/en-US.json:1 Не удалось загрузить ресурс: сервер ответил со статусом 500 (Внутренняя ошибка сервера)
Неудачная попытка № 2:
server {
...
root /usr/share/nginx/html;
# Fallback to default language if no preference defined by browser
# if ($accept_language ~ "^$") {
set $accept_language "en-US";
# }
location ~ ^/en-US {
try_files $uri /en-US/index.html?$args;
}
location ~ ^/en {
try_files $uri /en/index.html?$args;
}
location ~ ^/(en|en-US) {
try_files $uri /$1/index.html?$args;
}
location / {
try_files $uri $uri/ /$accept_language/index.html =404;
}
}
Результат: это может переключаться между index.html из en и en-US, но не подпространства, как /en-US/Тест/расписания#восстановление
QUESTION A) How do I get the redirect work as per the requirement outlined at the beginning of this post?
I am using the following image:
FROM docker.io/library/nginx:1.20.0-alpine AS build
which has its own http section at /etc/nginx/nginx.conf
so I CANNOT modify the http {… } section to add the following without introducing manual steps to my deployment.
map $http_accept_language $accept_language {
~*^en-US en-US;
~*^en en;
}
QUESTION B)
I can only modify NGINX config within server { … } tag. So how do I change the $accept_language without using map under http { … }?