2012-12-07 44 views
9

मैंने पाया कि एक स्ट्रिंग के लिए अनुवाद है (msgstr) खाली है सभी गेटटेक्स्ट टूल स्ट्रिंग को अप्रतिबंधित मानेंगे।मैं एक खाली अनुवाद कैसे चिह्नित करूं (msgstr) पीओ गेटटेक्स्ट फाइलों में अनुवाद के रूप में?

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

उत्तर

0

मुझे लंबे समय तक एक ही समस्या है, और मुझे वास्तव में नहीं लगता कि आप बिल्कुल भी कर सकते हैं।

# No translation needed/Translated 
msgid "This is a string" 
msgstr "" 

अब तक, यह सबसे अच्छा समाधान का द्वारा किया गया है::/आप एक राह तलाशने के अंत करते हैं, तो कृपया पोस्ट मेरे लिए सबसे अच्छा विकल्प एक टिप्पणी डालने के लिए तो मैं निशान सकता है उसे वहाँ से "अनुवाद" था!

+0

यह गेटटेक्स्ट फ़ाइल प्रारूप में एक बड़ा डिज़ाइन दोष प्रतीत होता है। – sorin

4

जैसा कि यह गेटटेक्स्ट विनिर्देश में एक बड़ा डिज़ाइन दोष लगता है, मैंने इन क्षेत्रों के अंदर उपयोग करने का निर्णय लिया: Unicode Character 'ZERO WIDTH SPACE' (U+200B)

+0

हां, वास्तव में गेटटेक्स्ट विनिर्देश में त्रुटियां हैं। मैं व्यर्थ में, लंबे समय तक इस विशेष समस्या का उत्तर ढूंढ रहा हूं। शून्य चौड़ाई की जगह, जो एक अच्छा कामकाज की तरह लगती है, शायद एक टिप्पणी से बेहतर (जो एक खाली स्ट्रिंग की समस्या को हल नहीं करती है) वास्तव में। पारितोषिक के लिए धन्यवाद :) – Dyn

2

मुझे पता है यह एक पुराने सवाल है, लेकिन मैं एक वैकल्पिक दृष्टिकोण का कहना चाहते थे:

msgid "This is a string" 
msgstr "\0" 

gettext एम्बेडेड nulls का उपयोग करता है एक स्ट्रिंग के अंत का संकेत है, और यह ठीक से सी बच दृश्यों तब्दील हो के बाद से, मुझे लगता है कि यह काम कर सकता है और परिणामस्वरूप खाली स्ट्रिंग अनुवाद में परिणाम हो सकता है? यह मेरे कार्यक्रम में काम करने के लिए लग रहा था (जीएनयू लिबिंटल पर आधारित) लेकिन मैं यह नहीं बता सकता कि यह वास्तव में सिस्टम द्वारा मानक/अनुमत है या नहीं। मैं पीओ gettext को समझने के रूप में औपचारिक रूप से निर्दिष्ट नहीं है इसलिए कोई आधिकारिक स्रोत कोड देख के अलावा अन्य जवाब हो सकता है ...

https://www.gnu.org/software/gettext/manual/html_node/PO-Files.html

यह अक्सर प्रोग्रामर के लिए क्या करना बातों में एम्बेडेड nulls डाल करने के लिए एक अच्छी बात यह है नहीं है लेकिन यह आपके मामले में काम कर सकता है? तर्कसंगत रूप से यह शून्य-चौड़ाई-स्थान चाल से कम बुरा है, क्योंकि यह वास्तव में एक स्ट्रिंग का परिणाम देगा जिसका आकार शून्य है।


संपादित करें: जब msgfmt चल रहा है, अगर यह तार के आकार है जो यह मान लिया गया है की जरूरत नहीं है के बारे में भ्रमित हो जाएगा आप एक segfault/बुरा व्यवहार मिलता है

असल में, सबसे बुरी बात यह है कि हो सकता है है एम्बेडेड नल, और कहीं एक बफर ओवरफ्लो।

यह मानते हुए कि msgfmt इस हालांकि बर्दाश्त कर सकते हैं, libintl क्योंकि केवल मतलब है कि यह तार char * है वापस जाने के लिए है इसके साथ सही काम करने के लिए, के लिए तो अंतिम आवेदन केवल कोई फर्क नहीं पड़ता नल केरेक्टर तक देख सकते हैं जा रहा है क्या।

क्या इसके लायक है के लिए, मेरे पो-पार्सर पुस्तकालय spirit-po स्पष्ट रूप से यह :) का समर्थन करता है

https://github.com/cbeck88/spirit-po


संपादित करें: gettext प्रलेखन देखें तो ऐसा लगता है कि वे में एम्बेडेड nulls की संभावना का उल्लेख करना एमओ फ़ाइलें और कहा, "यह दृढ़ता से बहस हुई थी":

https://www.gnu.org/software/gettext/manual/html_node/MO-Files.html

कुछ भी एमओ फ़ाइल को तारों में एम्बेडेड एनयूएल रखने से रोकता है।हालांकि, वर्तमान में उपयोग किए जाने वाले प्रोग्राम इंटरफ़ेस पहले से ही मानते हैं कि तार एनयूएल समाप्त हो गए हैं, इसलिए एम्बेडेड एनयूएल कुछ हद तक बेकार हैं। लेकिन एमओ फ़ाइल प्रारूप सामान्य है इसलिए अन्य इंटरफेस बाद में संभव हो सकते हैं, उदाहरण के लिए, हम कभी भी एमओ फाइलों में विस्तृत वर्णों को लागू करना चाहते हैं, जहां एनयूएल बाइट्स गलती से प्रकट हो सकते हैं। (नहीं, हम एमओ फाइलों में विस्तृत अक्षर नहीं रखना चाहते हैं। वे फ़ाइल को अनावश्यक रूप से बड़े बनाएंगे, और 'wchar_t' प्रकार प्लेटफॉर्म पर निर्भर करेगा, एमओ फाइलें प्लेटफ़ॉर्म पर भी निर्भर होंगी।)

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

तो, कम से कम ऐसा नहीं लगता है कि वे "आदमी, संदेश स्ट्रिंग में एम्बेडेड नल" कहेंगे? हमने कभी इसके बारे में सोचा नहीं! " अधिकतर यह काम करता है, अगर msgfmt क्रैश नहीं होता है तो मुझे लगता है कि यह कोशेर है।