Django 템플릿에서 문자열 번역하기: 'django.utils.translation.templatize()' 함수 사용 방법

2024-06-16

Here is an example of how to use the templatize() function:

{% load i18n %}

<p>{{ _("Hello, world!") }}</p>

In this example, the templatize() function is used to mark the string "Hello, world!" as translatable. Django will then translate this string into the current language of the user.

Here is how the templatize() function works:

  1. The function takes a string as an argument.
  2. The function wraps the string in a special tag. The tag has the following format:
{% trans string_to_translate %}
  1. The function returns the new string.

When Django renders a template, it looks for strings that are wrapped in the {% trans %} tag. For each string that it finds, Django does the following:

  1. It looks up the translation for the string in the current language.
  2. If a translation is found, Django uses the translated string.

The templatize() function is a useful tool for making Django templates translatable. It allows you to easily mark strings as translatable without having to write any additional code.

Here are some additional things to keep in mind about the templatize() function:

  • The templatize() function is only available in Django templates. It cannot be used in Python code.
  • The templatize() function is not case-sensitive. This means that you can use either uppercase or lowercase letters when you write the {% trans %} tag.
  • The templatize() function can be used with arguments. Arguments are passed to the translation function as keyword arguments.

For example, the following code will translate the string "Hello, John!" and pass the name "John" as an argument to the translation function:

{% load i18n %}

<p>{{ _("Hello, %(name)s!") | trans name="John" }}</p>

I hope this helps!

Let me know if you have any other questions.



django.utils.translation.templatize() 함수 관련 샘플 코드

기본 사용

이 예에서는 "Hello, world!" 문자열을 번역 가능하도록 표시하고 현재 사용자 언어로 번역합니다.

{% load i18n %}

<p>{{ _("Hello, world!") }}</p>

인수 사용

{% load i18n %}

<p>{{ _("Hello, %(name)s!") | trans name="John" }}</p>

단수/복수형 형식 사용

이 예에서는 "I have one apple.""I have 10 apples." 문자열을 번역 가능하도록 표시하고 단수/복수형 형식을 올바르게 처리합니다.

{% load i18n %}

<p>I have {{ num_apples }} apple{% if num_apples == 1 %}s{% endif %}}.</p>

HTML 속성 번역

이 예에서는 "title" 속성을 번역 가능하도록 표시합니다.

{% load i18n %}

<button type="submit" title="{{ _("Submit") }}">Submit</button>

필터 사용

{% load i18n %}

<p>{{ _("Hello, world!") | upper }}</p>

이 샘플 코드는 django.utils.translation.templatize() 함수를 사용하는 다양한 방법을 보여줍니다. 더 많은 정보については Django 문서를 참조하십시오.

참고:

  • 위 코드 예제는 Django 템플릿 엔진을 사용한다고 가정합니다. 다른 템플릿 엔진을 사용하는 경우 구문이 다를 수 있습니다.

이 샘플 코드가 도움이 되었기를 바랍니다! 궁금한 점이 있으면 알려주세요.



다음은 templatize() 함수의 대안으로 사용할 수 있는 몇 가지 방법입니다.

직접 번역 함수 사용

templatize() 함수 대신 직접 {% trans %} 태그와 {% plural %} 태그를 사용할 수 있습니다. 이 방법은 더 많은 제어력을 제공하지만, 템플릿 코드가 더 복잡해질 수 있습니다.

예제:

{% load i18n %}

<p>I have {{ num_apples }} apple{% if num_apples == 1 %}s{% endif %}}.</p>

{% trans num_apples as _apples count num_apples %}
I have %(num_apples)d apple{% if num_apples == 1 %}s{% endif %}.
{% plural %}
I have %(num_apples)d apples.
{% endplural %}
{% endtrans %}

{% blocktrans %} 태그는 템플릿 블록 내에서 여러 문자열을 번역하는 데 사용할 수 있습니다. 이 방법은 코드를 더욱 명확하고 읽기 쉽게 만들 수 있습니다.

{% load i18n %}

{% blocktrans %}
<h1>{{ _("Welcome to our website!") }}</h1>
<p>{{ _("We hope you enjoy your visit.") }}</p>
{% endblocktrans %}

{% gettext %}{% ngettext %} 필터는 템플릿 코드 외부에서 문자열을 번역하는 데 사용할 수 있습니다. 이 방법은 템플릿 코드를 더욱 간결하게 만들 수 있습니다.

{% load i18n %}

<h1>{{ _("Welcome to our website!") | gettext }}</h1>
<p>{{ num_apples | ngettext("I have one apple.", "I have %(num_apples)d apples.") }}</p>

JavaScript 라이브러리 사용

django-js와 같은 JavaScript 라이브러리를 사용하여 템플릿에서 클라이언트 측 번역을 수행할 수 있습니다. 이 방법은 더 많은 유연성을 제공하지만, JavaScript 코드를 작성하고 유지 관리해야 합니다.

어떤 대안을 사용할지는 특정 요구 사항에 따라 달라집니다. 템플릿 코드가 간결하고 읽기 쉬운 것이 중요하다면 {% blocktrans %} 태그나 {% gettext %}/{% ngettext %} 필터를 사용하는 것이 좋습니다. 더 많은 제어력이 필요하다면 직접 {% trans %}/{% plural %} 태그를 사용하는 것이 좋습니다. 클라이언트 측 번역이 필요하다면 JavaScript 라이브러리를 사용하는 것이 좋습니다.

다음은 각 대안의 장단점을 요약한 표입니다.

대안장점단점
templatize() 함수사용하기 쉬움코드가 복잡해질 수 있음
직접 {% trans %}/{% plural %} 태그 사용더 많은 제어력코드가 더 복잡해짐
{% blocktrans %} 태그 사용코드가 더 명확하고 읽기 쉬움더 많은 코드 작성 필요
{% gettext %}/{% ngettext %} 필터 사용코드가 더 간결함템플릿 코드 외부에서 번역해야 함
JavaScript 라이브러리 사용더 많은 유연성JavaScript 코드 작성 및 유지 관리 필요