Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

Php में स्थानीयकरण के लिए .po/.mo फ़ाइलों को कैसे चलाएं या लोड करें

सबसे पहले आपको PHP को सूचित करना होगा कि आप किस लोकेल और डोमेन का उपयोग कर रहे हैं।

putenv("LANG=da_DK"); 
setlocale('LC_ALL', "da_DK"); 
bindtextdomain("mycatalog", "./locale/");  
textdomain("mycatalog");

इस मामले में मेरे पास एक डेनिश अनुवाद और mycatalog.mo (और .po) नामक एक फ़ाइल है। ये फ़ाइलें (आपके रूट से) यहां रखी गई हैं:locale/da_DK/LC_MESSAGES/mycatalog.mo/po

अपना अनुवाद दिखाने के लिए, आप यह करेंगे:

echo _("Hello world");   // Which would become "Hej verden"

_ (); गेटटेक्स्ट का उपनाम है (); गेटटेक्स्ट के बारे में स्मार्ट बात यह है कि यदि कोई अनुवाद नहीं है तो आपके यूआई में "MSG_HELLO_WORLD" जैसा बदसूरत भाषा कोड नहीं होगा, बल्कि इसके बजाय एक बेहतर विकल्प होगा:बस सादा अंग्रेजी पाठ।

Messages.po फ़ाइल में आपके पास इस फ़ॉर्म पर सभी संदेश (केस-संवेदी और प्रयुक्त कॉमा, डॉट्स, कोलन आदि के संबंध में) होने चाहिए:

msgid "Hello world!"
msgstr "Hej verden!"

जब आपने इसे अपनी .po फ़ाइल में जोड़ा है, तो आप इस फ़ाइल को poedit में खोलें, "सहेजें" दबाएं और यह एक .mo फ़ाइल उत्पन्न करेगा। यह फ़ाइल .po फ़ाइल के समान निर्देशिका में अपलोड की जाती है (आमतौर पर स्क्रिप्ट रूट से \locale\da_DK\LC_MESSAGES\ जैसा कुछ)

गतिशील/परिवर्तनीय सामग्री का अनुवाद करने के लिए आप - अन्य बातों के अलावा - स्प्रिंटफ, इस तरह से उपयोग कर सकते हैं:

echo sprintf(_("My name is %s"), $name);

इस स्थिति में %s .po फ़ाइल में होगा; जब आपके पास अनुवादित स्ट्रिंग (जिसमें %s शामिल है) हो, तो sprintf %s को परिवर्तनशील सामग्री से बदलना सुनिश्चित करेगा। यदि चर का भी अनुवाद किया जाना चाहिए, तो आप यह कर सकते हैं:

echo sprintf(_("The color of my house is %s"), _($color));

फिर आपको हर रंग के लिए एक पूर्ण वाक्य की आवश्यकता नहीं है, लेकिन फिर भी आप रंगों का अनुवाद करवाते हैं।

यह ध्यान रखना महत्वपूर्ण है कि सर्वर पर पहली बार .mo चलाया जाता है, इसे कैश किया जाता है - और इस फ़ाइल को पुनरारंभ किए बिना कैश से निकालने का कोई तरीका नहीं है (अपाचे या ऐसा ही पर्याप्त होना चाहिए)। इसका मतलब यह है कि पहली बार उपयोग किए जाने के बाद आप .mo में जो भी बदलाव करते हैं, वह प्रभावी नहीं होगा। इसके आसपास काम करने के लिए कई हैक हैं, लेकिन ईमानदारी से, वे ज्यादातर बहुत सुंदर नहीं हैं (उनमें .mo की प्रतिलिपि बनाना, इसके पीछे समय () जोड़ना और फिर इसे आयात और कैश करना शामिल है)। यह अंतिम पैराग्राफ केवल तभी महत्वपूर्ण है जब आप पूरी बात का एक ही बार में अनुवाद नहीं करने जा रहे हैं, लेकिन टुकड़ों में।

यदि आप किसी समय अपना स्वयं का अनुवाद उपकरण बनाना चाहते हैं, तो यह टूल आपको PHP का उपयोग करके .po को .mo में बदलने में मदद करता है:

http://www.josscrowcroft.com/2011/code/php-mo-convert-gettext-po-file-to-binary-mo-file-php/



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. JSON_ARRAY () - MySQL में मानों की सूची से JSON सरणी बनाएं

  2. जन्मतिथि और आयु को कैसे स्टोर करें ताकि PHP/MySQL में आयु को दैनिक रूप से अपडेट किया जा सके?

  3. क्या MySQL में केवल एक फ़ील्ड के लिए WHERE क्लॉज दिखाने का कोई तरीका है?

  4. Python के माध्यम से दूरस्थ MySQL डेटाबेस से कनेक्ट करें

  5. यह 7 दिन पहले का डेटा क्यों नहीं खींच रहा है?