2013-01-22 16 views
5

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

वर्तमान में हमारे पास 10 भाषाओं तक और लगभग 400 अनुवादित तार हैं (उत्पाद संस्करण के आधार पर भिन्न होते हैं)।

हमारी वर्तमान प्रणाली बल्कि बोझिल है और मेरा मानना ​​है कि गेटटेक्स्ट एक बेहतर समाधान होगा।

जहां तक ​​मैं गेटटेक्स्ट को समझता हूं, इसे संकलित अनुवाद फ़ाइलों (* .mo) युक्त निर्देशिका सेट करने के लिए bindtextdomain के उपयोग की आवश्यकता होती है।

क्या स्मृति से अनुवाद को पढ़ने का कोई तरीका है? मैं बाइनरी में संकलित * .mo फ़ाइलों को शामिल करना चाहता हूं, और इनका उपयोग करने के लिए गेटटेक्स्ट सेट अप करना चाहता हूं। वैकल्पिक रूप से, अनुवाद डेटा किसी फ़ाइल सिस्टम के बिना डेटा EEPROM में संग्रहीत किया जाएगा।

या आप एक सी इंटरफ़ेस के साथ एक माइक्रोक्रोनरोलर सिस्टम (16 या 32 बिट, 256 से 512 केबीटी रोम) में उपयोग के लिए एक अलग अनुवाद प्रणाली की सिफारिश कर सकते हैं?

संपादित करें: मुझे यह जोड़ना चाहिए कि माइक्रोकंट्रोलर फर्मवेयर के अलावा अनुवादों को बनाए रखने में सक्षम होने के कारण गेटटेक्स्ट पर स्विच करने का एक कारण होगा। उचित अनुवाद डेटा उपयोगकर्ता द्वारा कॉन्फ़िगरेशन सॉफ़्टवेयर के साथ लोड किया जाएगा जिसे हम पहले से ही हमारे सिस्टम के साथ आपूर्ति करते हैं।

+2

शायद आपके मामले में गेटटेक्स्ट अत्यधिक होगा? शायद आप ऐसा कुछ करेंगे [यह] (http://code.google.com/p/bta-meteo-logger/source/browse/C/daemon/lang.h)? –

+0

आप या तो बाइनरी या नकली फ़ाइल I/O के शीर्ष पर एक रैम डिस्क सेट कर सकते हैं। –

उत्तर

3

यही वह है जो मैं करता हूं: कोड में निरंतर चर में बाइनरी ".mo" शामिल होगा। आप बाइनरी से एक चार सरणी में एक साधारण कनवर्टर लिख सकते हैं और आपके प्रोग्राम के अंदर ".mo" फ़ाइल संकलित कर सकते हैं। आपके पास ".mo" फ़ाइल डेटा की एक सरणी होगी, प्रत्येक एक अलग भाषा के साथ।

मैं उन सरणी में से किसी एक तक पहुंचने के लिए libintl स्रोतकोड को संशोधित करता हूं। फ़ाइल loadmsgcat.c फ़ाइल, _nl_load_domain फ़ंक्शन देखें। देखें कि यह mmap() का उपयोग करने का प्रयास कैसे करता है (इसलिए यह सब कुछ स्मृति में रखने के लिए तैयार है)। अनुरोध की गई भाषा के आधार पर आपके ".mo" सरणी का कौन सा तत्व उपयोग करने के लिए बस कुछ कोड जोड़ें।

मैंने यह कोशिश नहीं की है, लेकिन यही वह है जो मैं आपकी स्थिति को देने का प्रयास करूंगा। यह बहुत मुश्किल नहीं लग रहा है।

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