Quindi ecco la versione lunga alla tua domanda. Testato su Django 1.4 thru 1.7.1:
Nelle impostazioni.pi ...
Aggiungi al MIDDLEWEAR_CLASSES
, locale, permette la selezione della lingua in base alla richiesta:
'django.middleware.locale.LocaleMiddleware',
Aggiungi LOCALE_PATHS
, questo è dove verranno memorizzati i file di traduzione:
LOCALE_PATHS = (
os.path.join(PROJECT_PATH, 'locale/'),
)
Abilita i18N
USE_I18N = True
Impostare LANGUAGES
che sarete traducendo il sito per:
ugettext = lambda s: s
LANGUAGES = (
('en', ugettext('English')),
('pl', ugettext('Polish')),
)
Aggiungere i18n processore contesto template, le richieste verranno ora includono LANGUAGES
e LANGUAGE_CODE
:
per Django < 1.8 metterlo qui:
TEMPLATE_CONTEXT_PROCESSORS = (
....
'django.core.context_processors.i18n', # this one
)
per Django > = 1.8 metterlo qui:
TEMPLATES = [
{
'OPTIONS': { 'context_processors': [
'django.template.context_processors.i18n', # this one
]}
]
Nest, in urls.py:
In url_patterns, aggiungere il seguito, permetterà la visualizzazione di reindirizzamento lingua impostata:
url(r'^i18n/', include('django.conf.urls.i18n')),
vedere Varie a Translations per maggiori informazioni su questo.
Aggiungere le importazioni seguenti e incapsulare gli URL che si desidera tradurre con i18n_patterns. Ecco cosa miniera assomiglia:
from django.conf.urls.i18n import i18n_patterns
from django.utils.translation import ugettext_lazy as _
urlpatterns = patterns('',
url(r'^admin/', include(admin.site.urls)),
url(r'^i18n/', include('django.conf.urls.i18n')),
)
urlpatterns += i18n_patterns('',
(_(r'^dual-lang/'), include('duallang.urls')),
(r'^', include('home.urls')),
)
Nota: Si può anche cadere gli URL di amministrazione nelle i18n_patterns.
Avvolgi il tuo testo con lazytext! importazione lazytext (come sopra) e avvolgere ogni stringa con essa in questo modo _ ('testo'), si può anche andare in altri file urls.py e fare traduzione url in questo modo:
url(_(r'^dual_language/$'), landing, name='duallang_landing'),
È possibile disporre il testo che si desidera tradotto nella tua altri file, ad esempio models.py, views.py ecc .. Ecco un campo modello esempio con traduzioni per etichetta e help_text:
name = models.CharField(_('name'), max_length=255, unique=True, help_text=_("Name of the FAQ Topic"))
Django documenti di traduzione sono grandi per questo!
nei template HTML ...
Ora si può andare in vostri modelli e caricare la templatetag i18n e utilizzare Transblock trans e sulle cose statica che si desidera tradurre. Ecco un esempio:
{% load i18n %}
{% trans "This is a translation" %}<br><br>
{% blocktrans with book_t='book title'|title author_t='an author'|title %}
This is {{ book_t }} by {{ author_t }}. Block trans is powerful!
{% endblocktrans %}
Ora eseguire un makemessages per ognuno dei vostri locali:
./manage.py makemessages -l pl
E ora tutto è rimasto è quello di andare nella cartella/locali, e modificare ciascuno dei .po File.Compila i dati per ogni msgstr. Ecco un esempio di che:
msgid "English"
msgstr "Angielski"
E infine compilare i messaggi:
./manage.py compilemessages
C'è molto di più da imparare con traduzioni e internationalization è strettamente legato a questo argomento, in modo da controllare la documenti anche per questo. Consiglio anche il check-out alcuni dei pacchetti di internazionalizzazione disponibili per Django come django-rosetta e django-linguo. Aiutano a tradurre il contenuto del modello, django-rosetta non crea nuove voci per questo nel tuo database, mentre fa django-linguo.
Ho anche creato un django translation demo per chi è interessato a guardare una soluzione di lavoro completo.
Se avete seguito questo si dovrebbe essere fuori ad un buon inizio. Credo che questo sia il modo più standard per far funzionare il tuo sito in più lingue. Saluti!
Grazie !, Inoltre, "Şimdi benim sitede Türk var!" ha reso la mia giornata :) – Hellnar
In realtà, leggi meglio la risposta di radtek che spiega il modo corretto di farlo in Django. Quale potrebbe sembrare una lettura lunga, ma in realtà nel lungo periodo è molto meglio a causa dell'aggiunta di lingue, ad esempio, dell'uso di rosetta, eccetera. –
Questo è corretto. La mia risposta è un hack e non adatto per un sito che ha in programma di fare un sacco di traduzione, sia su più pagine o in tutti i paesi, ecc – jdotjdot