[英]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.