Django için i18n

Çağlanur Sağlam Boyraz
3 min readOct 2, 2018

--

Hazırladığınız websitenin pek çok dili desteklemesi globalleşen dünyada önem arz ettiğini düşünüyorum. Bu yüzden bu yazımda djangoda lokalizasyon yapmak üzerine duracağım. Bu lokalizasyon işlemi için i18n kütüphanesini kullanacağız. Ayrıca size çeviri konusunda yardımı olabileceğini düşündüğüm bir başka uygulama olan “Rosetta”dan bahsedeceğim. Rosetta ile ilgili bilgiyi yazımın sonunda bulabilirsiniz.

Lokalizasyon işlemi için ilk aşama setting.py dosyanızı düzenlemek olmalı. Ekleyeceğiniz dilleri ve lokalizasyon klasörünün nerede olduğunu burada belirtiyoruz:

from django.utils.translation import ugettext_lazy as _
LANGUAGE_CODE = 'en'
LANGUAGES = (
('en', _('English')),
('tr', _('Türkçe')),
)
LOCALE_PATHS = (
os.path.join(BASE_DIR, 'locale'),
)
MIDDLEWARE = [
...
'django.middleware.locale.LocaleMiddleware',
]

Ayarlamaları yaptığımıza göre templatelerimizi ayarlamaya başlayabiliriz:

{% load i18n %}<h1>{% trans 'Başlık' %}</h1><p>{% trans 'Metin' %}</p>

Uzun metinleriniz için blocktrans kullanabilirsiniz:

{% blocktrans %} 
<p> Daha Uzun Metin </p>
{% endblocktrans %}

Şimdi sıra geldi mesaj dosyalarımızı oluşturmaya:

$ django-admin compilemessages
$ django-admin makemessages

Bu iki komut dil dosyalarımızı otomatik olarak oluşturacaktır. Bundan sonra isterseniz oluşan locale dosyaları içerisinden çevirileri manuel olarak yapabilirsiniz yada birazdan bahsedeceğim rosetta aracını kullanarak çeviri işlemlerinizi yapabilirsiniz.

### aşağıdaki satır "Server List" yazısının geçtiği dosya ve satır ### numarasını belirtir.
#: monitor/templates/monitor/index.html:79
msgid "Server List" # bu orjinal metin
msgstr "Sunucu Listesi" # türkçe dili için yapılan çeviri

Url Ayarlanması ve Dil Değişikliği Buttonunun Eklenmesi

Kullanıcılarımızın site içerisinde dil değişikliği yapabilmeleri için biraz daha ekleme yaptıktan sonra işimiz tamamlanacak. Öncelikle template içerisinde dil değişikliği yapabilmemizi sağlayacak olan button u ekliyoruz:

<form action="{% url 'set_language' %}" method="post">
{% csrf_token %}
<input name="next" type="hidden" value="{{ redirect_to }}" />
<select name="language">
{% get_current_language as SELECTEDLANG %}
{% get_available_languages as LANGUAGES %}
{% for lang in LANGUAGES %}
<option value="{{ lang.0 }}" {% if lang.0 == SELECTEDLANG %}selected{% endif %}>{% if lang.1 == 'English' %}English{% else %}{{ lang.1 }}{% endif %}
</option>
{% endfor %}
</select>
<input type="submit" value="Go" />
</form>

Bu form otomatik olarak sizin belirlediğiniz dilleri alıp ön yüzde kullanıcıya sunuyor. Geriye birtek url lerin ayarlanması kaldı. Neyse ki django bizim için urlleri hazırlıyor. Bunun için tek yapmamız gereken urls.py da aşağıdaki değişikliği yapmak:

from django.conf.urls import include, url
from django.conf.urls.i18n import i18n_patterns
urlpatterns = i18n_patterns(
url(r'', include('yourapp.urls')),
url(r'^i18n/', include('django.conf.urls.i18n')),
)

Rosetta

Rosetta locale dosyalarını arayüz kullanarak oluşturmamızı sağlayan bir araçtır. Evet Rosetta’nın anasayfası aşağıda gördüğümüz gibidir. Eklediğiniz diller, yüzde kaçını çevirdiğimiz, toplam kaç çeviri olduğu, çevirdiğimiz mesaj sayısı, belirsiz olarak işaretlediklerimiz, kullanılmayan çeviriler ve locale dosyasının yeri gibi detayları bu sayfa içerisinde görebilirsiniz.

Rosetta Anasayfa

Aşağıdaki resim çevirilerin yapılacağı sayfadan. Çevirilecek kelime veya cümle bloğu, yaptığımız çeviri, belirsiz ve çevirinin nerelerde geçtiği ile ilgili bilgileri bu sayfadan takip edebiliriz. Belirsizi nerede kullanacağım derseniz, emin olmadığınız bir çeviriyi yada yanlış aldığınızı düşündüğünüz kelime veya kelime bloğunu işaretlemek için kullanabilirsiniz.

Rosetta çeviri sayfası

Eğer beğendiyseniz indirme ve kurulum aşamalarına geçebiliriz. Rosetta indirmek için:

pip install django-rosetta

Rosetta için settings.py da installed_apps e rosetta yı eklemeniz gerekmekte. Bunun için değişiklikleri setting.py da gerçekleştirin:

INSTALLED_APPS = [
...
'rosetta',
]

Son olarak urls.py da aşağıdaki değişikliği gerçekleştirmemiz gerekmekte. Bunu da yaptıktan sonra localhost:8000/rosetta adresine giderek çeviri işlemlerine başlayabilir:

from django.conf import settings

if 'rosetta' in settings.INSTALLED_APPS:
urlpatterns += [
url(r'^rosetta/', include('rosetta.urls'))
]

Evet tüm değişiklikleri kaydettikten sonra rosetta’nın paneline localhost:8000/rosetta adresinden ulaşabilirsiniz.

Yazımı burada sonlandırıyorum. Umarım sizlere yardımcı olabilmişimdir. Okuduğunuz için teşekkürler, hatasız kodlar dilerim :)

--

--