(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 관리자 백엔드는 이제 선택한 언어로 표시됩니다.