简体   繁体   English

Django 国际化和本地化而不是 /en 为每种语言使用特定的域

[英]Django Internationalization and localization instead of /en use a specific domain for each language

i have 3 domains, which will be one website, just that each one will serve a language ej: (right now i am in dev mode so i only have localhost to test)我有 3 个域,它们将是一个网站,只是每个域都将提供一种语言 ej:(现在我处于开发模式,所以我只有 localhost 要测试)

drenglish.com for 'en'
drspanish.com for 'es_ES'
drportugueses for 'pt_BR'

automatically Internationalization and localization works with /lang added to the urls, but i dont want that i tried transurlvania but cant figure it out, is there an easy way to use my translated po file and tie it to a domain ?自动国际化和本地化与添加到 url 的 /lang 一起工作,但我不希望我尝试过 transurlvania 但无法弄清楚,有没有一种简单的方法来使用我翻译的 po 文件并将其绑定到域? site framework seem to maybe be the answer, but i get lost when they tell to create different settings and urls files for each domain so you can add the right SITE_ID站点框架似乎可能是答案,但是当他们告诉我为每个域创建不同的设置和 URL 文件以便您可以添加正确的 SITE_ID 时,我迷路了

i am starting to use i18n for the internationalization and localization我开始使用 i18n 进行国际化和本地化

settings;设置;

 middleware: 'django.contrib.sites.middleware.CurrentSiteMiddleware'
 USE_I18N = True

 #drspanish.com = ID 5
 #drportugueses = ID 4
 #drenglish.com = ID 1

 SITE_ID = 1

 from django.utils.translation import ugettext_lazy as _ LANGUAGES = (
     ('en', _('English')),
     ('pt_BR', _('Portuguese')),
     ('es_ES', _('Spanish')), )

 LOCALE_PATHS = (
     os.path.join(BASE_DIR, 'locale'), )

urls(main);网址(主要);

from django.conf.urls.i18n import i18n_patterns

urlpatterns = [
    #urls for english + global
    path('admin/', admin.site.urls),
    path('users/', include('users.urls')), #for allauth
    path('accounts/', include('allauth.urls')), #for allauth
    url(r'^ckeditor/', include('ckeditor_uploader.urls')), ]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) # comment out this line from the +... if the website is live, its only to serve image in debug mode

urlpatterns += i18n_patterns(
    url('', include('home.urls')), #for allauth
    url('contact', include('contact.urls')),
    url(r'^videos/', include('video.urls')),
    url(r'^dash/', include('UDash.urls')),
    url(r'^appointment/', include('appointment.urls')),
    url(r'^blog/', include('blog.urls')),
    url(r'^cart/', include('cart.urls')),
    url(r'^shop/', include('shop.urls')), )

You can use a middleware to set your language depending on the domain you are accessing.您可以使用中间件根据您访问的域设置您的语言。 For example, create a middleware SetLanguageToDomain which will look like this,例如,创建一个中间件 SetLanguageToDomain,它看起来像这样,

from django.utils import translation
from django.contrib.sites.shortcuts import get_current_site


class SetLanguageToDomain:
    def __init__(self, get_response):
        self.get_response = get_response
        # One-time configuration and initialization.

    def __call__(self, request):
        current_site = get_current_site(request).domain
        if current_site == 'drenglish':
            user_language = 'en'
        elif current_site == 'drspanish':
            user_language = 'es_ES'
        else:
            user_language = 'pt_BR'
        translation.activate(user_language)
        request.session[translation.LANGUAGE_SESSION_KEY] = user_language

        response = self.get_response(request)

        return response

Then add this to your middlewares after the locale middleware.然后在 locale 中间件之后将其添加到您的中间件中。

Hope this helps!希望这可以帮助!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM