मुझे पता है यह एक पुराने सवाल है, लेकिन मैं एक वैकल्पिक दृष्टिकोण का कहना चाहते थे:
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
क्रैश नहीं होता है तो मुझे लगता है कि यह कोशेर है।
यह गेटटेक्स्ट फ़ाइल प्रारूप में एक बड़ा डिज़ाइन दोष प्रतीत होता है। – sorin