본문 바로가기
profile_image

Gnuboard6

다국어 지원 사이트로 만드는 방법

페이지 정보

작성자 이노힐
댓글 0건 조회 22회
작성일 2025-04-07 09:19:38

본문

다국어 지원 사이트를 만드는 방법에 대해 설명해드리겠습니다. 먼저 현재 프로젝트의 구조를 확인해보겠습니다.

Listed 33 items in current directory

현재 프로젝트가 Python 기반의 웹 애플리케이션으로 보입니다. 다국어 지원을 구현하기 위해 다음과 같은 방법을 제안드립니다:
  1. Flask-Babel 확장 패키지 사용
  • Flask-Babel은 Flask 애플리케이션에서 다국어 지원을 쉽게 구현할 수 있게 해주는 확장 패키지입니다.
먼저 requirements.txt를 확인하여 Flask-Babel이 설치되어 있는지 확인하겠습니다.

Read requirements.txt

L1-68

Flask-Babel이 설치되어 있지 않으므로, 먼저 이를 설치해야 합니다. 다국어 지원을 구현하기 위한 단계별 가이드를 제시해드리겠습니다:
  1. 필요한 패키지 설치

    bash

    Apply to log_config.i...

    Run

    pip install Flask-Babel

  1. 번역 파일 구조 생성
  • translations 디렉토리를 생성하고 각 언어별로 번역 파일을 관리합니다.
  • 예: translations/ko/LC_MESSAGES/messages.po (한국어)
  • 예: translations/en/LC_MESSAGES/messages.po (영어)
  1. 애플리케이션 설정
  • main.py에 Babel 설정을 추가해야 합니다.
  1. 번역 텍스트 추출
  • 템플릿과 코드에서 번역이 필요한 텍스트를 추출합니다.
  • pybabel extract 명령어를 사용하여 번역 텍스트를 추출합니다.
  1. 번역 파일 생성
  • pybabel init 명령어로 각 언어별 번역 파일을 생성합니다.
  1. 번역 작업
  • 생성된 .po 파일에 번역을 추가합니다.
  1. 번역 컴파일
  • pybabel compile 명령어로 번역을 컴파일합니다.
구체적인 구현을 위해 main.py 파일을 확인해보겠습니다:

Read main.py

L1-50

현재 프로젝트가 FastAPI를 사용하고 있는 것으로 보입니다. FastAPI에서 다국어 지원을 구현하기 위한 구체적인 방법을 제안드리겠습니다:
  1. FastAPI-i18n 패키지 설치

    bash

    Apply to log_config.i...

    Run

    pip install fastapi-i18n

  1. 번역 파일 구조 생성

    shellscript

    Apply to log_config.i...

    pip install fastapi-i18n

  1. 번역 관리자 구현
core/i18n.py 파일을 생성하여 번역 관리자를 구현하겠습니다:

i18n.py(new)+34-1

from fastapi_i18n import I18nMiddleware, I18nConfig

from fastapi_i18n.lazy import lazy_gettext as _

from fastapi import Request

from typing import Optional

# 번역 파일 경로 설정

i18n_config = I18nConfig(

    translations_path="translations",

    default_locale="ko",

    supported_locales=["ko", "en"]

)

def get_locale(request: Request) -> Optional[str]:

    """요청에서 언어 설정을 추출하는 함수"""

  1. 메인 애플리케이션에 번역 미들웨어 적용
main.py를 수정하여 번역 미들웨어를 적용하겠습니다:

main.py+6-1

from core.database import DBConnect

from core.exception import AlertException, regist_core_exception_handler, template_response

from core.middleware import regist_core_middleware, should_run_middleware

from core.plugin import (

    cache_plugin_menu, cache_plugin_state, get_plugin_state_change_time,

    import_plugin_by_states, read_plugin_state, register_plugin,

    debug=settings.APP_IS_DEBUG,  # 디버그 모드가 활성화 설정

    lifespan=lifespan,

    title="그누보드6",

    description=""

    description=""

from core.database import DBConnect

from core.exception import AlertException, regist_core_exception_handler, template_response

from core.middleware import regist_core_middleware, should_run_middleware

from core.i18n import i18n_middleware

from core.plugin import (

    cache_plugin_menu, cache_plugin_state, get_plugin_state_change_time,

    import_plugin_by_states, read_plugin_state, register_plugin,

    debug=settings.APP_IS_DEBUG,  # 디버그 모드가 활성화 설정

    lifespan=lifespan,

    title="그누보드6",

    description="G6 API",

    version="1.0.0"

38 hidden lines

  1. 번역 파일 생성 및 관리
번역 파일을 생성하고 관리하기 위한 스크립트를 만들겠습니다:

generate_translations.py(new)+39-1

import os

from pathlib import Path

from babel.messages import frontend as babel

def generate_translations():

    """번역 파일을 생성하고 관리하는 스크립트"""

    # 번역 디렉토리 생성

    translations_dir = Path("translations")

    translations_dir.mkdir(exist_ok=True)

    # 템플릿 디렉토리에서 번역 텍스트 추출

    extract_cmd = babel.extract_messages()

    extract_cmd.initialize_options()

    extract_cmd.output_file = "messages.pot"

  1. 언어 전환 기능 구현
언어 전환을 위한 엔드포인트를 추가하겠습니다:

main.py+22-1

from core.database import DBConnect

from core.exception import AlertException, regist_core_exception_handler, template_response

from core.middleware import regist_core_middleware, should_run_middleware

from core.i18n import i18n_middleware

from core.plugin import (

    cache_plugin_menu, cache_plugin_state, get_plugin_state_change_time,

    import_plugin_by_states, read_plugin_state, register_plugin,

    referer = request.headers.get("Referer", "/")

    return RedirectResponse(referer, status_code=303)

from core.i18n import i18n_middleware

from core.database import DBConnect

from core.exception import AlertException, regist_core_exception_handler, template_response

from core.middleware import regist_core_middleware, should_run_middleware

from core.i18n import i18n_middleware, i18n_config

from core.plugin import (

    cache_plugin_menu, cache_plugin_state, get_plugin_state_change_time,

    import_plugin_by_states, read_plugin_state, register_plugin,

    referer = request.headers.get("Referer", "/")

    return RedirectResponse(referer, status_code=303)

@app.get("/language/{lang}")

이제 다국어 지원을 위한 기본적인 설정이 완료되었습니다. 사용 방법은 다음과 같습니다:
  1. 번역 파일 생성 및 관리

    bash

    Apply to log_config.i...

    Run

    python scripts/generate_translations.py

  1. 템플릿에서 번역 사용

    html

    Apply to log_config.i...

    <!-- templates/example.html -->

    <h1>{{ _("Welcome") }}</h1>

    <p>{{ _("Hello, %(name)s", name=user.name) }}</p>

  1. Python 코드에서 번역 사용

    python

    Apply to log_config.i...

    from core.i18n import _

    message = _("Welcome to our site")

  1. 언어 전환

    html

    Apply to log_config.i...

    python scripts/generate_translations.py

추가로 필요한 작업:
  1. requirements.txt에 다음 패키지를 추가해야 합니다:
  • fastapi-i18n
  • Babel
  1. 각 템플릿 파일에서 번역이 필요한 텍스트를 _() 함수로 감싸야 합니다.
  1. 번역 파일(.po)에 각 언어별 번역을 추가해야 합니다.
이렇게 설정하면 웹사이트에서 다국어 지원이 가능해집니다. 사용자의 브라우저 설정이나 쿠키를 통해 자동으로 적절한 언어가 선택되며, 사용자가 직접 언어를 전환할 수도 있습니다.

댓글목록

등록된 댓글이 없습니다.

댓글쓰기

내용

방문자 집계

  • 오늘 580
  • 어제 630
  • 최대 849
  • 전체 31,377

Copyright © innohealonline.com. All rights reserved.