Переключите локаль приложения Angular, работающего на NGINX, в контейнере Docker

#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 { … }?