(internationalisation)=
# 국제화
```{contents}
---
local:
depth: 3
---
```
(multi_language_content)=
## 다국어 콘텐츠
### 개요
기본적으로 Wagtail은 모든 콘텐츠가 단일 언어로 작성된다고 가정합니다.
이 문서는 여러 언어로 콘텐츠를 작성하도록 Wagtail을 구성하는 방법을 설명합니다.
```{note}
Wagtail은 여러 언어로 콘텐츠를 생성하고 제공하기 위한 인프라를 제공합니다.
관리 인터페이스에서 다른 언어 간의 번역을 관리하는 두 가지 옵션이 있습니다:
[wagtail.contrib.simple_translation](simple_translation) 또는 더 고급인 [wagtail-localize](https://github.com/wagtail/wagtail-localize) (타사 패키지).
```
이 문서는 Wagtail이 관리하는 콘텐츠의 국제화만 다룹니다.
템플릿 파일, JavaScript 코드 등의 정적 콘텐츠를 번역하는 방법에 대한 정보는
[Django 국제화 문서](inv:django#topics/i18n/translation)를 참조하십시오.
또는 헤드리스 사이트를 구축하는 경우 사용 중인 프런트엔드 프레임워크의 문서를 참조하십시오.
### Wagtail의 다국어 콘텐츠 접근 방식
이 섹션에서는 Wagtail의 국제화 접근 방식에 대한 설명을 제공합니다.
급하다면 [](Configuration)으로 건너뛸 수 있습니다.
요약하자면:
- Wagtail은 각 로케일에 대해 별도의 페이지 트리에 콘텐츠를 저장합니다.
- 내장된 `Locale` 모델이 있으며 모든 페이지는 `locale` 외래 키 필드를 사용하여 `Locale` 에 연결됩니다.
- `translation_key` 필드에 저장된 공유 UUID를 사용하여 서로 번역된 페이지를 기록합니다.
- 사이트 홈페이지의 번역을 통해 요청을 자동으로 라우팅합니다.
- 언어 감지를 위해 Django의 `i18n_patterns` 및 `LocaleMiddleware` 를 사용합니다.
#### 페이지 구조
Wagtail은 각 로케일에 대해 별도의 페이지 트리에 콘텐츠를 저장합니다.
예를 들어, 두 로케일에 두 개의 사이트가 있는 경우 탐색기에서 페이지 계층 구조의 최상위 수준에 네 개의 홈페이지가 표시됩니다.
이 접근 방식은 편집자 경험에도 몇 가지 이점이 있습니다.
- 편집을 위한 기본 언어가 없으므로 콘텐츠를 어떤 언어로든 작성한 다음 다른 언어로 번역할 수 있습니다.
- 페이지의 번역은 별도의 페이지이므로 다른 시간에 게시할 수 있습니다.
- 편집자에게 한 로케일의 콘텐츠를 편집할 수 있는 권한을 부여하고 다른 로케일의 콘텐츠는 편집할 수 없도록 할 수 있습니다.
#### 로케일 및 번역이 데이터베이스에 기록되는 방식
모든 페이지(및 번역이 활성화된 모든 스니펫)에는 `locale` 및 `translation_key` 필드가 있습니다.
- `locale` 은 `Locale` 모델에 대한 외래 키입니다.
- `translation_key` 는 콘텐츠의 번역을 찾는 데 사용되는 UUID입니다.
동일한 페이지/스니펫의 번역은 이 필드에 동일한 값을 공유합니다.
이 두 필드에는 '고유 제약 조건'이 있으므로 동일한 로케일에 두 개 이상의 번역을 가질 수 없습니다.
#### 번역된 홈페이지
Wagtail에서 사이트를 설정할 때 '루트 페이지' 필드에서 사이트의 홈페이지를 선택하면 해당 사이트의 루트 URL에 대한 모든 요청이 해당 페이지로 라우팅됩니다.
다국어 사이트에는 페이지 트리에서 형제로 존재하는 각 로케일에 대한 별도의 홈페이지가 있습니다. Wagtail은 사이트의 '루트 페이지' 번역을 찾아 다른 홈페이지를 찾습니다.
이는 사이트를 다른 로케일에서 사용할 수 있도록 하려면 해당 새 로케일에서 홈페이지를 번역하고 게시하기만 하면 된다는 의미입니다.
Wagtail이 사용자 언어와 일치하는 홈페이지를 찾을 수 없는 경우 사이트 레코드에서 '루트 페이지'로 선택된 페이지로 대체되므로 이 필드를 사용하여 사이트의 기본 언어를 지정할 수 있습니다.
#### 언어 감지 및 라우팅
사용자 언어를 감지하고 URL에 접두사(`/en/`, `/fr-fr/` 등)를 추가하기 위해 Wagtail은 Django의 내장 국제화 유틸리티(예: `i18n_patterns` 및 `LocaleMiddleware`)와 함께 작동하도록 설계되었습니다. 이는 Wagtail이 사이트의 다른 국제화된 Django 애플리케이션과 원활하게 작동해야 함을 의미합니다.
#### 로케일
사이트에서 활성화된 로케일은 `wagtailcore` 의 `Locale` 모델에 기록됩니다. 이 모델에는 ID와 `language_code` 라는 두 개의 필드만 있으며, 이 필드는 이 로케일을 나타내는 [BCP-47 언어 태그](https://en.wikipedia.org/wiki/IETF_language_tag)를 저장합니다.
로케일 레코드는 [선택적 관리 UI](enabling_locale_management)로 설정하거나 셸에서 생성할 수 있습니다. `language_code` 필드의 가능한 값은 `WAGTAIL_CONTENT_LANGUAGES` 설정에 의해 제어됩니다.
```{note}
국제화를 활성화하기 전에 ``LANGUAGE_CODE`` 를 변경한 경우 이 내용을 읽으십시오.
초기 마이그레이션 시 Wagtail은 마이그레이션이 실행될 때 ``LANGUAGE_CODE`` 설정에 설정된 언어에 대한 ``Locale`` 레코드를 생성합니다. Wagtail의 국제화가 비활성화되면 모든 페이지가 이 ``Locale`` 에 할당됩니다.
Wagtail 2.11로 업데이트한 이후 ``LANGUAGE_CODE`` 설정을 변경한 경우, 국제화를 활성화하기 전에 ``Locale`` 모델의 레코드도 수동으로 업데이트해야 합니다. 기존 콘텐츠가 이전 코드로 할당되기 때문입니다.
```
(configuration)=
### 구성
이 섹션에서는 여러 언어로 콘텐츠를 작성할 수 있도록 하는 데 필요한 최소 구성을 살펴봅니다.
```{contents}
---
local:
depth: 1
---
```
(enabling_internationalisation)=
#### 국제화 활성화
Django와 Wagtail 모두에서 국제화를 활성화하려면 다음 설정을 `True` 로 설정하십시오.
```python
# my_project/settings.py
USE_I18N = True
WAGTAIL_I18N_ENABLED = True
```
또한 Django의 지역화 지원을 활성화할 수도 있습니다. 이렇게 하면 날짜와 숫자가 사용자의 로컬 형식으로 표시됩니다.
```python
# my_project/settings.py
USE_L10N = True
```
(configuring_available_languages)=
#### 사용 가능한 언어 구성
다음으로 사용 가능한 언어를 구성해야 합니다. 이를 위한 두 가지 설정이 있으며 각각 다른 목적으로 사용됩니다.
- `LANGUAGES` - 사이트의 프런트엔드에서 사용할 수 있는 언어를 설정합니다.
- `WAGTAIL_CONTENT_LANGUAGES` - Wagtail 콘텐츠를 작성할 수 있는 언어를 설정합니다.
이 두 설정을 정확히 동일한 값으로 설정할 수 있습니다. 예를 들어, 영어, 프랑스어, 스페인어를 활성화하려면:
```python
# my_project/settings.py
WAGTAIL_CONTENT_LANGUAGES = LANGUAGES = [
('en', "English"),
('fr', "French"),
('es', "Spanish"),
]
```
```{note}
``WAGTAIL_CONTENT_LANGUAGES`` 가 변경될 때마다 ``Locale`` 모델도 일치하도록 업데이트해야 합니다.
이는 데이터 마이그레이션을 통해 수행하거나 다음 섹션에 설명된 선택적 로케일 관리 UI를 통해 수행할 수 있습니다.
```
이들을 다른 값으로 설정할 수도 있습니다. 예를 들어, 일부 프로그래밍 방식의 지역화(예: 날짜 형식 또는 통화)를 원하지만 여러 지역에서 동일한 Wagtail 콘텐츠를 사용하려는 경우 이렇게 할 수 있습니다.
```python
# my_project/settings.py
LANGUAGES = [
('en-GB', "English (Great Britain)"),
('en-US', "English (United States)"),
('en-CA', "English (Canada)"),
('fr-FR', "French (France)"),
('fr-CA', "French (Canada)"),
]
WAGTAIL_CONTENT_LANGUAGES = [
('en-GB', "English"),
('fr-FR', "French"),
]
```
이렇게 구성하면 사이트는 첫 번째 목록의 모든 다른 로케일에서 사용할 수 있지만 Wagtail에는 두 개의 언어 트리만 있습니다.
모든 `en-` 로케일은 "영어" 언어 트리를 사용하고, `fr-` 로케일은 "프랑스어" 언어 트리를 사용합니다. 언어의 각 로케일 간의 차이는 프로그래밍 방식일 수 있습니다. 예를 들어, 사용할 날짜/숫자 형식 및 가격을 표시할 통화입니다.
(enabling_locale_management)=
#### 로케일 관리 UI 활성화 (선택 사항)
Wagtail 관리자가 Wagtail 관리 인터페이스에서 로케일을 설정할 수 있도록 하는 선택적 로케일 관리 앱이 있습니다.
활성화하려면 `wagtail.locales` 를 `INSTALLED_APPS` 에 추가하십시오.
```python
# my_project/settings.py
INSTALLED_APPS = [
# ...
'wagtail.locales',
# ...
]
```
#### URL에 언어 접두사 추가
모든 페이지 트리가 동일한 도메인에서 제공되도록 하려면 각 언어에 대한 URL 접두사를 추가해야 합니다.
이를 구현하기 위해 Django의 내장
{func}`~django.conf.urls.i18n.i18n_patterns`
함수를 사용할 수 있습니다. 이 함수는 전달된 모든 URL 패턴에 언어 접두사를 추가합니다.
이렇게 하면 URL에 지정된 언어 코드가 활성화되고 Wagtail은 요청을 라우팅하는 방법을 결정할 때 이를 고려합니다.
프로젝트의 `urls.py` 에 Wagtail의 핵심 URL(및 번역하려는 다른 URL)을 `i18n_patterns` 블록에 추가하십시오.
```python
# /my_project/urls.py
# ...
from django.conf.urls.i18n import i18n_patterns
# 번역 불가능한 URL
# 참고: Wagtail API 또는 사이트맵을 사용하는 경우,
# 이들도 `i18n_patterns` 에 추가해서는 안 됩니다.
urlpatterns = [
path('django-admin/', admin.site.urls),
path('admin/', include(wagtailadmin_urls)),
path('documents/', include(wagtaildocs_urls)),
]
# 번역 가능한 URL
# 이들은 언어 코드 접두사 아래에서 사용할 수 있습니다. 예를 들어 /en/search/
urlpatterns += i18n_patterns(
path('search/', search_views.search, name='search'),
path("", include(wagtail_urls)),
)
```
##### 기본 언어에 대한 언어 접두사 우회
기본 언어의 URL이 언어 접두사 없이 정상적으로 해결되도록 하려면
`i18n_patterns` 의 `prefix_default_language` 매개변수를 `False` 로 설정할 수 있습니다.
예를 들어, 언어가 다음과 같이 구성된 경우:
```python
# myproject/settings.py
# ...
LANGUAGE_CODE = 'en'
WAGTAIL_CONTENT_LANGUAGES = LANGUAGES = [
('en', "English"),
('fr', "French"),
]
# ...
```
그리고 `urls.py` 가 다음과 같이 구성된 경우:
```python
# myproject/urls.py
# ...
# 이 URL은 LANGUAGE_CODE에서 기본값으로 설정되지 않은 언어에 대해서만 언어 코드 접두사 아래에서 사용할 수 있습니다.
urlpatterns += i18n_patterns(
path('search/', search_views.search, name='search'),
path("", include(wagtail_urls)),
prefix_default_language=False,
)
```
이제 URL은 웹사이트의 프랑스어 버전에 대해서만 접두사가 붙습니다. 예를 들어:
```
- /search/
- /fr/search/
```
#### 사용자 언어 자동 감지
`i18n_patterns` 로 URL 패턴을 래핑한 후 사이트는 이제
URL 접두사에 응답합니다. 그러나 이제 루트 경로에는 응답하지 않습니다.
이를 해결하려면 사용자의 브라우저 언어를 감지하고
가장 적합한 언어 접두사로 리디렉션해야 합니다. 이를 수행하는 권장 방법은
Django의 `LocaleMiddleware` 를 사용하는 것입니다.
```python
# my_project/settings.py
MIDDLEWARE = [
# ...
'django.middleware.locale.LocaleMiddleware',
# ...
]
```
#### 사용자 정의 라우팅/언어 감지
이를 위해 `i18n_patterns` 또는 `LocaleMiddleware` 를 반드시 사용해야 하는 것은 아니며
필요한 경우 자체 로직을 작성할 수 있습니다.
Wagtail에 필요한 것은 `wagtail.views.serve` 뷰가 호출되기 전에
언어가 활성화되는 것입니다(Django의 `django.utils.translation.activate` 함수 사용).
### 국제화된 사이트를 위한 레시피
#### 언어/지역 선택기
아마도 사이트에 추가할 수 있는 국제화 관련 UI 중 가장 중요한 부분은
사용자가 다른 언어 간에 전환할 수 있도록 하는 선택기일 것입니다.
이것이 필요하다고 확신하지 못한다면, 몇 가지 근거에 대해 [https://www.w3.org/International/questions/qa-site-conneg#stickiness](https://www.w3.org/International/questions/qa-site-conneg#stickiness)를 살펴보십시오.
(i18n_basic_example)=
##### 기본 예제
다음은 페이지 번역 간에 링크를 추가하는 방법에 대한 기본 예제입니다.
그러나 이 예제는 `WAGTAIL_CONTENT_LANGUAGES` 에 정의된 언어만 포함하고
`LANGUAGES` 에 정의될 수 있는 추가 언어는 포함하지 않습니다. 이 두 설정의 의미에 대한 자세한 내용은
[사용 가능한 언어 구성](configuring_available_languages)을 참조하십시오.
두 설정이 동일한 값으로 설정된 경우 이 예제는 잘 작동할 것입니다.
그렇지 않으면 이를 고려하는 더 복잡한 예제가 있는 다음 섹션으로 건너뛰십시오.
```html+django
{# 이들이 파일 맨 위에 있는지 확인하십시오 #}
{% load wagtailcore_tags %}
{% if page %}
{% for translation in page.get_translations.live %}
{{ translation.locale.language_name_local }}
{% endfor %}
{% endif %}
```
이를 분석해 봅시다.
```html+django
{% if page %}
...
{% endif %}
```
이것이 공유 기본 템플릿의 일부인 경우 404 오류 응답과 같이 페이지 개체를 사용할 수 없는 상황에서 사용될 수 있으므로 진행하기 전에 페이지가 있는지 확인하십시오.
```html+django
{% for translation in page.get_translations.live %}
...
{% endfor %}
```
이 `for` 블록은 현재 페이지의 게시된 모든 번역을 반복합니다.
```html+django
{{ translation.locale.language_name_local }}
```
이것은 번역에 대한 링크를 추가합니다. `{{ translation.locale.language_name_local }}` 을 사용하여
로케일의 이름을 해당 언어로 표시합니다. 또한 SEO를 위해 `` 태그에 `rel` 및 `hreflang` 속성을 추가합니다.
`translation.locale` 은 [Locale 모델](locale_model_ref)의 인스턴스입니다.
또는 Django의 내장 태그를 사용하여 번역 언어에 대한 정보를 가져올 수 있습니다.
자세한 내용은 [Django 문서의 `{% get_language_info %}`](inv:django:std:templatetag#get_language_info)를 참조하십시오.
```html+django
{% load i18n %}
{% get_language_info for translation.locale.language_code as lang %}
```
##### 콘텐츠를 공유하는 로케일 처리
페이지를 반복하는 대신 이 예제는 구성된 모든 언어를 반복하고 각 언어에 대한 페이지를 찾습니다. 이는 [기본 예제](i18n_basic_example)보다 더 잘 작동합니다.
위의 예제는 동일한 Wagtail 콘텐츠를 공유하는 추가 Django `LANGUAGES` 가 있는 사이트에서 더 잘 작동합니다.
이 예제가 작동하려면 먼저 Django의
[`django.template.context_processors.i18n`](django.template.context_processors.i18n)
컨텍스트 프로세서를 `TEMPLATES` 설정에 추가해야 합니다.
```python
# myproject/settings.py
TEMPLATES = [
{
# ...
'OPTIONS': {
'context_processors': [
# ...
'django.template.context_processors.i18n',
],
},
},
]
```
이제 예제 자체입니다.
```html+Django
{% for language_code, language_name in LANGUAGES %}
{% get_language_info for language_code as lang %}
{% language language_code %}
{{ lang.name_local }}
{% endlanguage %}
{% endfor %}
```
이것도 분석해 봅시다.
```html+Django
{% for language_code, language_name in LANGUAGES %}
...
{% endfor %}
```
이 `for` 블록은 사이트에 구성된 모든 언어를 반복합니다.
`LANGUAGES` 변수는 `django.template.context_processors.i18n`
컨텍스트 프로세서에서 가져옵니다.
```html+Django
{% get_language_info for language_code as lang %}
```
이전 예제와 정확히 동일하게 작동합니다.
```html+Django
{% language language_code %}
...
{% endlanguage %}
```
이 `language` 태그는 Django의 `i18n` 태그 라이브러리에서 가져옵니다.
이 태그는 내부에 포함된 코드에 대해서만 활성 언어를 변경합니다.
```html+Django
{{ lang.name_local }}
```
여기서 `` 태그와 이전 예제의 `` 태그의 유일한 차이점은
페이지의 URL을 가져오는 방법입니다: `{% pageurl page.localized %}`.
Wagtail의 모든 페이지 인스턴스에는 현재 활성 언어로 페이지의 번역을 가져오는 `.localized` 속성이 있습니다. 이것이 이전에 언어를 활성화한 이유입니다.
또 다른 차이점은 동일하게 번역된 페이지가 두 로케일에서 공유되는 경우 Wagtail이 현재 활성 로케일을 기반으로 페이지에 대한 올바른 URL을 생성한다는 것입니다. 이것이 이 예제와 이전 예제의 주요 차이점입니다. 이전 예제는 기본 로케일에서만 페이지의 URL을 가져올 수 있기 때문입니다.
#### 헤드리스 사이트를 위한 API 필터
헤드리스 사이트의 경우 Wagtail API는 국제화된 사이트에 대해 두 가지 추가 필터를 지원합니다.
- `?locale=` 주어진 로케일로 페이지 필터링
- `?translation_of=` 주어진 페이지 ID의 번역만 포함하도록 페이지 필터링
자세한 내용은 [](apiv2_i18n_filters)를 참조하십시오.
(translatable_snippets)=
#### 번역 가능한 스니펫
`wagtail.models.TranslatableMixin` 을 상속받도록 하여 스니펫을 번역 가능하게 만들 수 있습니다.
예시:
```python
# myapp/models.py
from django.db import models
from wagtail.models import TranslatableMixin
from wagtail.snippets.models import register_snippet
@register_snippet
class Advert(TranslatableMixin, models.Model):
name = models.CharField(max_length=255)
```
`TranslatableMixin` 모델은 `locale` 및 `translation_key` 필드를 모델에 추가합니다.
##### 기존 데이터가 있는 스니펫을 번역 가능하게 만들기
기존 데이터가 있는 스니펫의 경우 `TranslatableMixin` 을 추가하고
마이그레이션을 만들고 실행하는 것만으로는 불가능합니다. 이는 `locale` 및 `translation_key`
필드가 모두 필수이며 `translation_key` 는 각 인스턴스에 대해 고유한 값이 필요하기 때문입니다.
기존 데이터를 올바르게 마이그레이션하려면 먼저 이러한 제약 조건을 제외하는 `BootstrapTranslatableMixin` 을 사용한 다음, 두 필드를 설정하는 데이터 마이그레이션을 추가한 다음, `TranslatableMixin` 으로 전환해야 합니다.
이는 데이터베이스에 레코드가 있는 경우에만 필요합니다. 따라서 모델이 비어 있으면 `TranslatableMixin` 을 추가하고 이 단계를 건너뛸 수 있습니다.
###### 1단계: 모델에 `BootstrapTranslatableMixin` 추가
이렇게 하면 제약 조건 없이 두 필드가 추가됩니다.
```python
# myapp/models.py
from django.db import models
from wagtail.models import BootstrapTranslatableMixin
from wagtail.snippets.models import register_snippet
@register_snippet
class Advert(BootstrapTranslatableMixin, models.Model):
name = models.CharField(max_length=255)
# 모델에 Meta 클래스가 있는 경우,
# BootstrapTranslatableMixin.Meta도 상속받도록 하십시오.
class Meta(BootstrapTranslatableMixin.Meta):
verbose_name = 'adverts'
```
스키마 마이그레이션을 생성하려면 `python manage.py makemigrations myapp` 을 실행하십시오.
###### 2단계: 데이터 마이그레이션 생성
다음 명령을 사용하여 데이터 마이그레이션을 생성하십시오.
```sh
python manage.py makemigrations myapp --empty
```
이렇게 하면 앱의 `migrations` 폴더에 새 빈 마이그레이션이 생성됩니다. 해당 마이그레이션을 편집하고
해당 앱에서 부트스트랩할 각 모델에 대해 `BootstrapTranslatableModel` 을 추가하십시오.
```python
from django.db import migrations
from wagtail.models import BootstrapTranslatableModel
class Migration(migrations.Migration):
dependencies = [
('myapp', '0002_bootstraptranslations'),
]
# 여기에 부트스트랩할 각 모델에 대한 작업을 하나씩 추가하십시오.
# 참고: 동일한 앱에 있는 모델만 포함하십시오!
operations = [
BootstrapTranslatableModel('myapp.Advert'),
]
```
부트스트랩할 모델이 포함된 다른 앱에 대해서도 이 작업을 반복하십시오.
###### 3단계: `BootstrapTranslatableMixin` 을 `TranslatableMixin` 으로 변경
이제 필요한 필드를 채우는 마이그레이션이 있으므로
`BootstrapTranslatableMixin` 을 모든 제약 조건이 있는 `TranslatableMixin` 으로 바꿀 수 있습니다.
```python
# myapp/models.py
from wagtail.models import TranslatableMixin # 이 줄을 변경하십시오.
@register_snippet
class Advert(TranslatableMixin, models.Model): # 이 줄을 변경하십시오.
name = models.CharField(max_length=255)
class Meta(TranslatableMixin.Meta): # 이 줄을 변경하십시오 (있는 경우).
verbose_name = 'adverts'
```
###### 4단계: `makemigrations` 를 실행하여 스키마 마이그레이션을 생성한 다음 마이그레이션하십시오!
`makemigrations` 를 실행하여 데이터베이스에 제약 조건을 추가하는 스키마 마이그레이션을 생성한 다음,
`migrate` 를 실행하여 모든 마이그레이션을 실행하십시오.
```sh
python manage.py makemigrations myapp
python manage.py migrate
```
nullable 필드 'locale'이 non-nullable로 변경되는 것에 대한 수정 사항을 선택하라는 메시지가 표시되면
"지금은 무시" 옵션을 선택하십시오(데이터 마이그레이션에서 처리되었으므로).
### 번역 워크플로
처음에 언급했듯이 Wagtail은 `wagtail.contrib.simple_translation` 을 제공합니다.
simple_translation 모듈은 사용자가 페이지와 번역 가능한 스니펫을 다른 언어로 복사할 수 있는 사용자 인터페이스를 제공합니다.
- 복사본은 원본 언어로 생성됩니다(번역되지 않음).
- 페이지 복사본은 초안 상태입니다.
콘텐츠 편집자는 콘텐츠를 번역하고 페이지를 게시해야 합니다.
활성화하려면 `"wagtail.contrib.simple_translation"` 을 `INSTALLED_APPS` 에 추가하고
`python manage.py migrate` 를 실행하여 `submit_translation` 권한을 생성하십시오.
Wagtail 관리자에서 설정으로 이동하여 일부 사용자 또는 그룹에 "번역 제출 가능" 권한을 부여하십시오.
```{note}
Simple Translation은 선택 사항입니다. 더 고급인 [wagtail-localize](https://github.com/wagtail/wagtail-localize)와 같은 타사 패키지로 교체할 수 있습니다.
```
#### Wagtail Localize
Wagtail 코어의 국제화를 구현하기 위한 초기 작업의 일환으로
`wagtail-localize` 라는 번역 패키지도 만들었습니다. 이 패키지는
PO 파일, 기계 번역 및 번역 서비스와의 외부 통합을 사용하여 Wagtail 내에서 페이지를 번역하는 것을 지원합니다.
GitHub: [https://github.com/wagtail/wagtail-localize](https://github.com/wagtail/wagtail-localize)
## 대체 국제화 플러그인
Wagtail에 공식 다국어 지원이 추가되기 전에 사이트 구현자는
외부 플러그인을 사용해야 했습니다. 이들은 Wagtail 자체 구현으로 대체되지 않았습니다.
약간 다른 접근 방식을 사용하므로 그 중 하나가 사용 사례에 더 적합할 수 있습니다.
- [Wagtailtrans](https://github.com/wagtail/wagtailtrans)
- [wagtail-modeltranslation](https://github.com/infoportugal/wagtail-modeltranslation)
이러한 옵션에 대한 비교는 AccordBox의 블로그 게시물
[Wagtail CMS에서 다국어 지원 방법](https://www.accordbox.com/blog/how-support-multi-language-wagtail-cms/)을 참조하십시오.
## Wagtail 관리자 번역
Wagtail 관리자 백엔드는 여러 다른 언어로 번역되었습니다. Wagtail의 [Transifex 페이지](https://explore.transifex.com/torchbox/wagtail/)에서 현재 사용 가능한 번역 목록을 찾을 수 있습니다. (참고: 이전 버전의 Wagtail을 사용하는 경우 이 페이지가 사용 가능한 언어를 정확하게 반영하지 않을 수 있습니다.)
해당 페이지에 언어가 나열되어 있지 않으면 새 언어를 쉽게 기여하거나 실수를 수정할 수 있습니다. [Transifex](https://explore.transifex.com/torchbox/wagtail/)에 가입하여 변경 사항을 제출하십시오. 번역 업데이트는 일반적으로 제출 후 한 달 이내에 공식 릴리스에 병합됩니다.
## 사용자별 Wagtail 관리자 언어 변경
로그인한 사용자는 `/admin/account/` 에서 선호하는 언어를 설정할 수 있습니다.
기본적으로 Wagtail은 90% 이상의 번역 범위를 가진 언어 목록을 제공합니다.
[WAGTAILADMIN_PERMITTED_LANGUAGES](wagtailadmin_permitted_languages) 설정을 통해 이 목록을 재정의할 수 있습니다.
허용되는 언어가 0개 또는 1개인 경우 양식은 숨겨집니다.
사용자가 언어를 선택하지 않은 경우 `LANGUAGE_CODE` 가 사용됩니다.
## Wagtail 설치의 기본 언어 변경
Wagtail의 기본 언어는 `en-us`(미국 영어)입니다. 몇 가지 Django 설정을 조정하여 변경할 수 있습니다.
- [`USE_I18N`](inv:django#USE_I18N)이 `True` 로 설정되어 있는지 확인하십시오.
- [`LANGUAGE_CODE`](inv:django#LANGUAGE_CODE)를 웹사이트의 기본 언어로 설정하십시오.
언어에 대한 번역이 있는 경우 Wagtail 관리자 백엔드는 이제 선택한 언어로 표시됩니다.