2013-04-01 6 views
8

मैं बहुभाषी अनुप्रयोग बनाने के लिए gettext and .po files पर देख रहा हूं। मेरी समझ यह है कि .po फ़ाइल msgid में स्रोत है और msgstr अनुवाद है। निम्नलिखित लाभ के साथगेटटेक्स्ट और .po फाइलों के साथ काम करते समय संयोजन कुंजी और पूर्ण पाठ

पूरा टेक्स्ट का उपयोग करना (जैसे "My name is %s.\n"): तदनुसार मैं msgid को परिभाषित करने के 2 तरीके को देखने के

  • जब gettext आप स्पष्ट रूप से देख सकते हैं कि के बारे में है अनुवाद
  • यह आसान है होने के लिए बुला .po फ़ाइलों का अनुवाद करने के लिए क्योंकि वे में वास्तविक सामग्री का अनुवाद किया जाना है

उपयोग करना एक कुंजी (उदा। my-name %s) निम्न लाभ के साथ:

  • स्रोत पाठ लंबा है जब (उदाहरण के लिए कंपनी के बारे में पैरा), gettext कॉल है, जो अपने विचारों क्लीनर
  • आसान कई .po फ़ाइलें और विचारों को बनाए रखने के लिए बनाता है अधिक संक्षिप्त कर रहे हैं क्योंकि कुंजी कम बदलने की संभावना है (उदाहरण के लिए company-description अब तक कम वास्तविक कंपनी वर्णन से बदलने की संभावना के प्रमुख)

इसलिए मेरे सवाल:
वहाँ wo का एक रास्ता है
gettext कॉल अनुवादक पूरा टेक्स्ट अनुवाद करने की आवश्यकता है कि देखने के लिए
योग्यता के लिए एक कुंजी के -उपयोग: वह यह है कि दोनों तरीकों के फायदे के संयोजन की अनुमति देता है कि gettext और .po फ़ाइलें, साथ rking?

उत्तर

2

मैंने अभी एक समान (बहुत पुराना) प्रश्न here का उत्तर दिया है।

लघु संस्करण:

पीओ फ़ाइल स्वरूप बहुत सरल है, तो यह एक और कार्यप्रवाह कि लचीलापन आप के लिए पूछ रहे हैं अनुमति देता है से पीओ/एमओ फ़ाइलें उत्पन्न करने के लिए संभव है। (आपके देव पहचानकर्ता चाहते हैं, आपके अनुवादक शब्द चाहते हैं)

आप अपने समाधान को प्रबंधित करने के लिए Loco जैसे क्लाउड-आधारित ऐप का उपयोग कर सकते हैं और अपने देवताओं की आवश्यकता होने पर पहचानकर्ताओं के साथ गेटटेक्स्ट फ़ाइल निर्यात कर सकते हैं।

+0

मैं आपके पक्ष में हूं इसलिए आपके उत्तर को स्वीकार करने के साथ बहुत ही उद्देश्य नहीं है, लेकिन मुझे सच में आश्वस्त है कि जाने का तरीका है: 'पीओ' रखें क्योंकि इसका व्यापक रूप से उपयोग किया जाता है और आसानी से उपयोग करना आसान होता है, जिससे उन्हें बनाने के लिए जो भी मध्यवर्ती कदम होते हैं और अपने आवेदन में उनका उपयोग करें: इस तरह सभी लोग खुश हैं और आप अन्य लोगों का भी उपयोग करने पर भरोसा रखते हैं (स्पष्ट रूप से आपकी कस्टम परत को छोड़कर)। – Max

6

गेटटेक्स्ट को अन्य भाषाओं में अंग्रेजी पाठ का अनुवाद करने के लिए डिज़ाइन किया गया था, और इस तरह आपको इसका उपयोग करना चाहिए। चाबियों के साथ इसका प्रयोग न करें। यदि आप चाबियाँ चाहते हैं, तो किसी अन्य तकनीक का उपयोग करें जैसे कि एसोसिएटिव सरणी।

मैंने दो बड़ी ओपन-सोर्स प्रोजेक्ट्स (50 भाषाओं, 5000 अनुवाद) प्रबंधित की हैं, एक मुख्य दृष्टिकोण का उपयोग करके और गेटटेक्स्ट दृष्टिकोण का उपयोग करने वाला एक - और मैं कभी भी मुख्य दृष्टिकोण का उपयोग नहीं करूंगा।

विपक्ष में अन्य पाठों में अंग्रेजी पाठ में परिवर्तन का प्रचार शामिल है। आप

msg_no_food = "We had no food left, so we had to eat the cat's" 

नया पाठ एक पूरी तरह से अलग अर्थ है करने के लिए

msg_no_food = "We had no food left, so we had to eat the cats" 

को बदलते हैं - तो आप कैसे सुनिश्चित करते हैं कि अन्य अनुवाद के अवैध और अपडेट किया जाता है?

आपने लंबे टेक्स्ट का उल्लेख किया है जो आपकी स्क्रिप्ट को पढ़ने में कठोर बनाता है। इसका समाधान इन्हें एक अलग लिपि में रखना होगा।उदाहरण के लिए, मुख्य कोड

print help_message('help_no_food') 

में इस डाल दिया और एक स्क्रिप्ट है कि बस गए संदेशों मदद प्रदान करता है:

switch ($help_msg) { 
... 
case 'help_no_food': return gettext("We had no food left, so we had to eat the cat's"); 
... 
} 

gettext के लिए एक और समस्या है जब आप अनुवाद करने के लिए एक पूरा पृष्ठ की है। शायद ऐसी वेबसाइट पर एक ब्रोशर पृष्ठ जिसमें बहुत से एम्बेडेड छवियां हों। यदि आप लंबे टेक्स्ट (उदा। जर्मन) वाले भाषाओं के लिए बहुत सी जगहों की अनुमति देते हैं, तो आपके पास छोटे टेक्स्ट (जैसे चीनी) वाले भाषाओं पर बहुत सी जगह होगी। नतीजतन, आपके पास प्रत्येक भाषा के लिए अलग-अलग छवियां/लेआउट हो सकते हैं।

चूंकि ये संख्या में कम होते हैं, इसलिए इन बाहरी गेटटेक्स्ट को पूरी तरह कार्यान्वित करना अक्सर आसान होता है। जैसे

brochure-view.en.php 
brochure-view.de.php 
brochure-view.zh.php 
+0

अमान्यता के बारे में अच्छा बिंदु। जिस विकल्प का आप सुझाव दे रहे हैं ('स्विच' उदाहरण के साथ) एक अतिरिक्त परत जोड़ता है, जो मूल रूप से मैं एक अनुवाद प्रारूप से क्या चाहता हूं, जिसमें विचारों को अधिक संक्षिप्त और आसानी से रखने के लिए '1 - कुंजी/आईडी' होना चाहिए बनाए रखने के लिए, '2 - स्रोत' सुनिश्चित करने के लिए कि हमारे पास सटीक स्रोत है जिसका उपयोग अमान्यता के लिए किया जाता है, और '3 - अनुवाद'। क्या आपको पता है कि किसी भी अनुवाद प्रारूप में उस संरचना है? – Max

+0

जैसा कि मैंने कहा था, यदि संभव हो तो मैं चाबियों से दूर चलेगा। मेरे अनुभव में, यह कोड को पढ़ने/डीबग करना कठिन बनाता है - आसान नहीं। सहायता टेक्स्ट के लिए मैं केवल उन्हें (अप्रत्यक्ष रूप से एक स्विच के माध्यम से) उपयोग करता हूं, जो कि किसी भी तरह के कोड के बाहर बैठता है। पीओ प्रारूप बहुत अच्छा है क्योंकि अनुवादकों द्वारा इसका व्यापक रूप से उपयोग और समझ लिया जाता है (डेवलपर्स के विपरीत) और उनके काम को आसान बनाने के लिए बहुत सारे टूल हैं। – fisharebest

+3

मैं पूरी तरह से समझ रहा हूं कि आप क्या कह रहे हैं लेकिन एक बात है कि मैं अपने सिर को चारों ओर नहीं प्राप्त कर सकता: जब आपको पूरे अनुच्छेद (जैसे कंपनी इतिहास) के लिए अनुवाद प्रस्तुत करने की आवश्यकता होती है: क्या आप पूरे अंग्रेजी अनुच्छेद का उपयोग ' गेटटेक्स्ट 'कॉल? मेरे लिए भयानक लगता है, आईएमओ यह 'गेटटेक्स्ट' ('कंपनी-इतिहास') ' – Max

संबंधित मुद्दे