> ## Documentation Index
> Fetch the complete documentation index at: https://ayakaleaf-pro.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Bản địa hóa

### Cấu hình i18n cho Overleaf

<Info>
  Tài liệu này mô tả cách cấu hình quốc tế hóa (i18n) cho một phiên bản **Overleaf** tự triển khai.
</Info>

Overleaf đã được dịch sang nhiều ngôn ngữ. Với cấu hình phù hợp, bạn có thể:

* Chạy phiên bản Overleaf của mình với **một ngôn ngữ cố định duy nhất**, hoặc
* Bật **nhiều ngôn ngữ**, cho phép người dùng chuyển đổi ngôn ngữ một cách linh hoạt, tương tự như `www.overleaf.com`.

***

#### Cấu hình một ngôn ngữ

Ngôn ngữ của trang được cấu hình bằng biến môi trường `OVERLEAF_SITE_LANGUAGE` (hoặc `SHARELATEX_SITE_LANGUAGE` đối với Overleaf **phiên bản 4.x trở về trước**).

Các mã ngôn ngữ được hỗ trợ bao gồm:

* `en` - Tiếng Anh (mặc định)
* `es` - Tiếng Tây Ban Nha
* `pt` - Tiếng Bồ Đào Nha
* `de` - Tiếng Đức
* `fr` - Tiếng Pháp
* `cs` - Tiếng Séc
* `nl` - Tiếng Hà Lan
* `sv` - Tiếng Thụy Điển
* `it` - Tiếng Ý
* `tr` - Tiếng Thổ Nhĩ Kỳ
* `zh-CN` - Tiếng Trung (giản thể)
* `no` - Tiếng Na Uy
* `da` - Tiếng Đan Mạch
* `ru` - Tiếng Nga
* `ko` - Tiếng Hàn
* `ja` - Tiếng Nhật
* `pl` - Tiếng Ba Lan
* `fi` - Tiếng Phần Lan

Tiếng Anh là ngôn ngữ mặc định. Để thay đổi ngôn ngữ giao diện (ví dụ: sang tiếng Trung giản thể), hãy thêm dòng sau vào `config/variables.env`:

```bash title="config/variables.env" theme={null}
OVERLEAF_SITE_LANGUAGE=zh-CN
```

Sau đó áp dụng cấu hình:

```bash theme={null}
bin/up
```

Sau khi các dịch vụ khởi động lại, ngôn ngữ giao diện trong các menu của web UI sẽ phản ánh thiết lập mới.

#### Cấu hình nhiều ngôn ngữ

Để cho phép người dùng **chuyển đổi ngôn ngữ mà không cần đăng xuất**, phiên bản Overleaf của bạn phải được cấu hình để phục vụ các ngôn ngữ khác nhau dựa trên tên miền.

Phần này giả định rằng:

* Tên miền chính của bạn là `overleaftest.com`
* Bạn có một **chứng chỉ TLS wildcard** (ví dụ: `*.overleaftest.com`)
* Bạn **không sử dụng `localhost`** (vì nó không hỗ trợ định tuyến ngôn ngữ dựa trên tên miền con)

Để kiểm thử cục bộ, bạn có thể dùng một tên miền như `dev-overleaf.com`.

<Steps>
  <Step title="Cấu hình TLS Proxy (Nginx)">
    TLS reverse proxy của bạn phải chuyển tiếp header `Host` gốc để Overleaf có thể xác định người dùng đã truy cập tên miền ngôn ngữ nào.

    Hãy đảm bảo có chỉ thị sau:

    ```nginx theme={null}
    proxy_set_header Host $host;
    ```

    Dưới đây là một ví dụ cấu hình Nginx:

    ```nginx theme={null}
    server {
        listen 443 ssl;
        server_name    _; # Catch all, see http://nginx.org/en/docs/http/server_names.html
        server_name *.overleaftest.com;
        ssl_certificate /etc/nginx/ssl/nginx.crt;
        ssl_certificate_key /etc/nginx/ssl/nginx.key;
        ssl_protocols               TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers   on;
        # used cloudflares ciphers https://github.com/cloudflare/sslconfig/blob/master/conf
        ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;

        # config to enable HSTS(HTTP Strict Transport Security) https://developer.mozilla.org/en-US/docs/Security/HTTP_Strict_Transport_Security
        # to avoid ssl stripping https://en.wikipedia.org/wiki/SSL_stripping#SSL_stripping	
        add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;";
        server_tokens off;
        add_header X-Frame-Options SAMEORIGIN;
        add_header X-Content-Type-Options nosniff;
        client_max_body_size 50M;

        location / {
            proxy_pass http://localhost:5000; # change to whatever host/port the docker container is listening on.
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_read_timeout 3m;
            proxy_send_timeout 3m;
            
            # add this to your nginx conf
            proxy_set_header Host $host;
        }
    }
    ```
  </Step>

  <Step title="Cấu hình Cookie Domain">
    Để tránh việc người dùng bị đăng xuất khi chuyển đổi ngôn ngữ, cookie phải được chia sẻ giữa các tên miền con ngôn ngữ.

    Thêm dòng sau vào `config/variables.env`:

    ```env title="config/variables.env" theme={null}
    # Note the leading dot
    COOKIE_DOMAIN=.overleaftest.com
    ```

    Điều này đảm bảo rằng cookie xác thực có hiệu lực cho tất cả các tên miền con thuộc `overleaftest.com`.
  </Step>

  <Step title="Ánh xạ ngôn ngữ – tên miền">
    Tiếp theo, xác định cách các mã ngôn ngữ được ánh xạ tới tên miền con bằng\
    `OVERLEAF_LANG_DOMAIN_MAPPING`.

    #### Ví dụ cấu hình

    ```dotenv title="config/variables.env" wrap theme={null}
    OVERLEAF_LANG_DOMAIN_MAPPING='{"www": {"lngCode": "en","url": "https:\/\/www.overleaftest.com"},"cn": {"lngCode": "zh-CN","url": "https:\/\/cn.overleaftest.com"}}'
    ```

    Với cấu hình này:

    * `https://www.overleaftest.com` → Giao diện tiếng Anh
    * `https://cn.overleaftest.com` → Giao diện tiếng Trung giản thể

    Bạn có thể mở rộng ánh xạ này với các ngôn ngữ và tên miền con bổ sung khi cần.
  </Step>

  <Step title="Chuyển hướng tên miền gốc (apex)">
    Cuối cùng, chuyển hướng tên miền gốc (`overleaftest.com`) đến tên miền ngôn ngữ mặc định (`www.overleaftest.com`).

    ```nginx theme={null}
    server{
        listen 80;
        server_name overleaftest.com;
        return 301 https://www.overleaftest.com$request_uri;
    }

    server {
        listen 443 ssl http2;
        server_name overleaftest.com;
        ssl_certificate     /path/to/fullchain.cer;
        ssl_certificate_key /path/to/overleaftest.com.key;
        return 301 https://www.overleaftest.com$request_uri;
    }
    ```
  </Step>
</Steps>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.