ฉันจะรับภาษาปัจจุบันในเธรดปัจจุบันในโมเดลหรือในผู้ดูแลระบบได้อย่างไร
ฉันจะรับภาษาปัจจุบันในเธรดปัจจุบันในโมเดลหรือในผู้ดูแลระบบได้อย่างไร
คำตอบ:
หรือคุณสามารถรับสิ่งนี้ได้ในมุมมองของคุณ
request.LANGUAGE_CODE
django.utils.translation.get_language()
django.utils.translation.get_language()
นี้เป็นทางออกที่ดีกว่าเสมอ
ระวังของวิธีการที่คุณใช้เพื่อให้ได้ภาษา ขึ้นอยู่กับวิธีการใด Django จะใช้วิธีการและข้อมูลที่แตกต่างกันเพื่อกำหนดภาษาที่เหมาะสมที่จะใช้
เมื่อใช้django.utils.translation.get_language()
ฟังก์ชันนี้จะเชื่อมโยงกับภาษาเธรด ก่อน Django 1.8 มันจะกลับมาเสมอ settings.LANGUAGE_CODE
เมื่อปิดใช้งานการแปล หากคุณต้องการแทนที่ภาษาเธรดด้วยตนเองคุณสามารถใช้override()
หรือactivate()
ฟังก์ชันซึ่งไม่มีชื่อที่ชัดเจนมากนัก แต่ก็ยังมีประโยชน์:
from django.utils import translation
with translation.override('fr'):
print(_("Hello")) # <= will be translated inside the with block
translation.activate('fr') # <= will change the language for the whole thread.
# You then have to manually "restore" the language with another activate()
translation.activate('en') # <= change languages manually
หากคุณต้องการให้ django ตรวจสอบเส้นทางและ / หรือคำขอ (คุกกี้ภาษา, ... )ซึ่งเป็นเรื่องธรรมดามากเช่นwww.example.com/en/<somepath>
กับwww.example.com/fr/<somepath>
ใช้django.utils.translation.get_language_from_request(request, check_path=False)
. นอกจากนี้จะส่งคืนชุดภาษาที่ถูกต้องเสมอsettings.LANGUAGES
ฉันพบว่ามันไม่ง่ายเลยที่จะค้นหาความแตกต่างเหล่านี้ผ่าน Google เกี่ยวกับเรื่องนี้ดังนั้นจึงมีไว้เพื่ออ้างอิงเพิ่มเติม
django.utils.translation
ไม่ใช่คำแปล มีการสะกดผิดในลิงค์ที่ให้มา ในตัวอย่างข้อมูลนั้นถูกต้อง
django.utils.translation.get_language()
django.utils.translation.get_language_from_request(request, check_path)
หากเป็นไปตามนี้คุณควรใช้ภาษาหลังcheck_path = True
เพื่อให้ได้ภาษาที่เทมเพลตของคุณจะแสดงผล
เพียงเพื่อเพิ่มว่าหากคุณใช้django.utils.translation.get_language()
คุณควรจำไว้ว่าหากส่วนของรหัสนั้นจะถูกเรียกแบบอะซิงโครนัส (เช่นงานขึ้นฉ่าย) วิธีนี้จะไม่ได้ผลเนื่องจากมันทำงานในเธรดอื่น
คุณสามารถใช้สิ่งนี้
from django.utils import translation
translation.get_language()
คุณสามารถอ่านlocale
ข้อมูลภาษาของระบบได้