Also hier ist die lange Version zu Ihrer Frage. Getestet auf Django 1.4 bis 1.7.1:
In den Einstellungen.py ...
In den MIDDLEWEAR_CLASSES
, locale, es Sprachauswahl basierend auf Anfrage ermöglicht:
LOCALE_PATHS = (
os.path.join(PROJECT_PATH, 'locale/'),
)
i18N aktivieren
:
'django.middleware.locale.LocaleMiddleware',
LOCALE_PATHS
hinzufügen, dies ist, wo Ihre Übersetzungsdateien werden gespeichert
USE_I18N = True
Set LANGUAGES
das wird das Übersetzen Sie die Website:
ugettext = lambda s: s
LANGUAGES = (
('en', ugettext('English')),
('pl', ugettext('Polish')),
)
i18n Vorlage Kontext Prozessor hinzufügen, werden Anfragen sind jetzt LANGUAGES
und LANGUAGE_CODE
:
Für Django < 1.8 es hier setzen:
TEMPLATE_CONTEXT_PROCESSORS = (
....
'django.core.context_processors.i18n', # this one
)
Für Django > = 1.8 hier:
TEMPLATES = [
{
'OPTIONS': { 'context_processors': [
'django.template.context_processors.i18n', # this one
]}
]
Nest, in urls.py:
In url_patterns, fügen Sie die folgenden, wird die eingestellte Sprache Redirect Ansicht aktivieren:
url(r'^i18n/', include('django.conf.urls.i18n')),
See Diverses in Translations für mehr zu diesem Thema.
Fügen Sie die folgenden Importe hinzu und kapseln Sie die gewünschten URLs mit i18n_patterns ein. Hier ist, was meins aussieht:
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')),
)
Hinweis: Sie können auch Ihre Admin-URLs in die i18n_patterns fallen lassen.
Wickeln Sie Ihren Text mit Lazytext! Import lazytext (wie oben) und wickeln Sie jede Saite mit ihm wie so _ (‚text‘), können Sie auch auf Ihre anderen urls.py Dateien gehen und URL-Übersetzung tun wie so:
url(_(r'^dual_language/$'), landing, name='duallang_landing'),
Sie können Text wickeln dass Sie in Ihren anderen Dateien, wie models.py übersetzt werden sollen, views.py etc .. Hier ist ein Beispiel Modellfeld mit Übersetzungen für Etiketten- und help_text:
name = models.CharField(_('name'), max_length=255, unique=True, help_text=_("Name of the FAQ Topic"))
Django Übersetzung docs ist für diese!
in Ihren HTML-Vorlagen ...
Jetzt können Sie in Ihre Vorlagen gehen und die i18n TemplateTag laden und Sie trans- und Transblock auf dem statischen Material verwenden möchten, übersetzen. Hier ein Beispiel:
{% 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 %}
nun ein makemessages für jede Ihrer locales laufen:
./manage.py makemessages -l pl
Und jetzt alle übrig bleibt, ist in Ihren/Lokale Ordner zu gehen, und bearbeiten jede der .po Dateien.Füllen Sie die Daten für jede Nachricht aus. Hier ist ein solches Beispiel, dass:
msgid "English"
msgstr "Angielski"
Und kompiliert schließlich die Nachrichten:
./manage.py compilemessages
Es gibt viel mehr ist mit Übersetzungen zu lernen und internationalization ist eng mit diesem Thema, so überprüft die docs dafür auch. Ich empfehle auch, einige der für Django verfügbaren Internationalisierungspakete wie django-rosetta und django-linguo auszuprobieren. Sie helfen bei der Übersetzung von Modellinhalten, django-rosetta erstellt dafür keine neuen Einträge in Ihrer Datenbank, während django-linglo dies tut.
Ich habe auch eine django translation demo für diejenigen erstellt, die eine voll funktionsfähige Lösung betrachten möchten.
Wenn Sie dies befolgt haben, sollten Sie einen guten Start haben. Ich glaube, dies ist der standardisierte Weg, um Ihre Website in mehreren Sprachen laufen zu lassen. Prost!
Danke !, auch "Şimdi benim sitede Türk var!" machte meinen Tag :) – Hellnar
Eigentlich, lesen Sie besser radtek's Antwort, die den richtigen Weg erklärt, dies in Django zu tun. Das scheint lange her zu sein, aber auf lange Sicht ist es viel besser, weil es beispielsweise Sprachen hinzufügt, Rosetta usw. verwendet. –
Das ist richtig. Meine Antwort ist ein Hack und nicht geeignet für eine Website, die viele Übersetzungen plant, sei es auf vielen Seiten oder länderübergreifend usw. – jdotjdot