ฉันจะรับภาษาปัจจุบันในเธรดปัจจุบันในโมเดลหรือในผู้ดูแลระบบได้อย่างไร
ฉันจะรับภาษาปัจจุบันในเธรดปัจจุบันในโมเดลหรือในผู้ดูแลระบบได้อย่างไร
คำตอบ:
หรือคุณสามารถรับสิ่งนี้ได้ในมุมมองของคุณ
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ข้อมูลภาษาของระบบได้