2012-02-29 16 views
13

मैं आईसीयू या बूस्ट लोकेल का उपयोग करने पर विचार कर रहा हूं।आईसीयू बनाम बूस्ट लोकेल सी ++

प्रत्येक के पेशेवर और विपक्ष क्या हैं?

मैं समझता हूं कि दोनों आईसीयू का उपयोग करते हैं, लेकिन आईसीयू बूस्ट लोकेल द्वारा छिपा हुआ है। Boost Locale's rationale page के अनुसार: "... संपूर्ण आईसीयू एपीआई अपारदर्शी पॉइंटर्स के पीछे छिपा हुआ है और उपयोगकर्ताओं के पास इसका कोई उपयोग नहीं है।"

कृपया इन पुस्तकालयों की तुलना करते समय सी ++ 11 में नई यूनिकोड सुविधाओं पर विचार करें।

उत्तर

2

आईसीयू अंतर्राष्ट्रीयकरण विशेषज्ञों द्वारा डिजाइन किया गया था, जबकि बूस्ट सी ++ प्रोग्रामर द्वारा डिजाइन किया गया था।

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

तो यदि आप ठोस अंतर्राष्ट्रीयकरण चाहते हैं, तो आईसीयू के साथ जाएं। यदि आप बढ़त सी ++ (लेकिन i18n प्रकार की चापलूसी) काटना चाहते हैं, तो बढ़ावा दें।

+0

बहुत अच्छा सारांश, निश्चित रूप से +1। ध्यान दें कि यदि आपको केवल साधारण/मूलभूत सामग्री की आवश्यकता है तो "शर्मीली तरह का अंतर्राष्ट्रीयकरण ठीक हो सकता है। प्रत्येक एप्लिकेशन को i18n के लिए आईसीयू की तरह कुछ नहीं चाहिए। और यदि आप आधुनिक सी ++/बूस्ट शैली में उपयोग करते हैं, तो आईसीयू का सी ++ एपीआई काफी दर्दनाक है। – jalf

+14

-1। ओपी आईसीयू और * बूस्ट.लोकेल * के बीच तुलना चाहता है। 'बूस्ट जैसी चीजें कहने से अंतर्राष्ट्रीयकरण बहुत गलत हो जाता है [...] बूस्ट पुस्तकालयों का एक बड़ा संग्रह है, और कुछ दूसरों की तुलना में बेहतर करते हैं "बिंदु के बगल में पूरी तरह से है। बूस्ट.लोकेल एक पुस्तकालय है जिसे आईसीयू और जीएनयूजीटेक्स्ट लपेटना है , सवाल कितना अच्छा है? क्या सीधे आईसीयू का उपयोग करना बेहतर होगा या नहीं? –

+3

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

15

आईसीयू बहुत अच्छा पुस्तकालय है, लेकिन यह कमियां भी हैं:

  1. एपीआई आधुनिक सी के मामले में भयानक है ++ डिजाइन और यह मानक सी ++ पुस्तकालय
  2. यह UTF-16 के उन्मुख है के साथ अच्छी तरह से काम नहीं करता है http://www.boost.org/doc/libs/1_49_0/libs/locale/doc/html/rationale.html#why_icu

    :
  3. यह यही वजह है कि Boost.Locale gettext मॉडल का उपयोग करता

देखें संदेश अनुवाद उपकरण सही से दूर हैं है,

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

बेशक

अगर आप बहुत परिष्कृत एल्गोरिदम जरूरत है कि Boost.Locale द्वारा समर्थित नहीं हैं या सभी क्या है आपके आवेदन करता है यूनिकोड प्रसंस्करण है तो आईसीयू बेहतर हो सकता है, कि Boost.Locale के अलावा अन्य C++ अनुप्रयोग स्थानीयकृत के लिए बेहतर है।

+0

मुझे बूस्ट लोकेल इंटरफ़ेस पसंद है लेकिन अन्य आईसीयू कार्यों जैसे यू_आईसाल्फा() या u_isalnum() की आवश्यकता है जो मुझे लगता है कि बूस्ट लोकेल के माध्यम से एक्सेसिबल नहीं है, जब तक कि मैंने कुछ अनदेखा नहीं किया। यदि नहीं, तो क्या आप उन कार्यों को बूस्ट लोकेल में लपेटने की योजना बना रहे हैं? –

3

बूस्ट। लोकाल आईसीयू को इसके डिफ़ॉल्ट बैकएंड के रूप में उपयोग करता है। Boost.Locale द्वारा कुछ other backends का भी उपयोग किया जा सकता है। आप आईसीयू के लिए बेहतर इंटरफ़ेस होने के लिए Boost.Locale पर विचार कर सकते हैं।

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