Qt 5.11 - Internationalization with Qt

Qt के साथ अंतर्राष्ट्रीयकरण




qt

Qt के साथ अंतर्राष्ट्रीयकरण

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

प्रासंगिक क्यूटी कक्षाएं और एपीआई

ये वर्ग Qt अनुप्रयोगों के अंतर्राष्ट्रीयकरण का समर्थन करते हैं।

QTextCodec

पाठ एनकोडिंग के बीच बातचीत

QTextDecoder

राज्य आधारित डिकोडर

QTextEncoder

राज्य-आधारित एनकोडर

QTranslator

पाठ आउटपुट के लिए अंतर्राष्ट्रीयकरण समर्थन

QCollator

एक स्थानीयकृत कॉलेशन एल्गोरिथ्म के अनुसार तार की तुलना करता है

QCollatorSortKey

स्ट्रिंग कोलेशन को गति देने के लिए इस्तेमाल किया जा सकता है

QLocale

विभिन्न भाषाओं में संख्या और उनके स्ट्रिंग अभ्यावेदन के बीच रूपांतरण

भाषा और लेखन प्रणाली

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

क्यूटी डेवलपर्स के लिए अंतर्राष्ट्रीयकरण को यथासंभव दर्द रहित बनाने की कोशिश करता है। Qt में सभी इनपुट नियंत्रण और पाठ ड्राइंग विधियाँ सभी समर्थित भाषाओं के लिए अंतर्निहित समर्थन प्रदान करती हैं। अंतर्निहित फॉन्ट इंजन एक ही समय में विभिन्न लेखन प्रणालियों के पात्रों से युक्त पाठ को सही और आकर्षक रूप से प्रस्तुत करने में सक्षम है।

Qt आज, विशेष रूप से उपयोग की जाने वाली अधिकांश भाषाओं का समर्थन करता है:

  • सभी पूर्वी एशियाई भाषाएँ (चीनी, जापानी और कोरियाई)
  • सभी पश्चिमी भाषाएँ (लैटिन लिपि का उपयोग करके)
  • अरबी
  • सिरिलिक भाषाएँ (रूसी, यूक्रेनी, आदि)
  • यूनानी
  • यहूदी
  • थाई और लाओ
  • यूनिकोड 6.2 में सभी लिपियों को विशेष प्रसंस्करण की आवश्यकता नहीं है
  • बंगाली
  • बर्मीज़ (म्यांमार)
  • देवनागरी
  • गुजराती
  • गुरमुखी
  • कन्नड़
  • खमेर
  • मलयालम
  • तामिल
  • तेलुगू
  • तिब्बती

ऊपर दी गई सूची समर्थित है और सभी प्लेटफार्मों पर काम करेगी जब तक सिस्टम में इन लेखन प्रणालियों को स्थापित करने के लिए फोंट हैं।

FontConfig के साथ विंडोज, लिनक्स और यूनिक्स पर (क्लाइंट साइड फॉन्ट सपोर्ट) निम्नलिखित भाषाएं भी समर्थित हैं:

  • धिवेही (थाना)
  • सिरिएक
  • N'Ko

MacOS पर, निम्नलिखित भाषाओं का भी समर्थन किया जाता है:

  • ओरिया
  • सिंहली

इन लेखन प्रणालियों में से कई विशेष सुविधाएँ प्रदर्शित करती हैं:

  • स्पेशल लाइन ब्रेकिंग बिहेवियर। कुछ एशियाई भाषाएं शब्दों के बीच रिक्त स्थान के बिना लिखी जाती हैं। लाइन ब्रेकिंग हर वर्ण (अपवादों के साथ) के रूप में चीनी, जापानी और कोरियाई में या तार्किक शब्द सीमाओं के बाद थाई में हो सकती है।
  • द्विदिश लेखन। अरबी और हिब्रू दाएं से बाएं लिखी जाती हैं, सिवाय संख्याओं और एम्बेडेड अंग्रेजी पाठ के लिए जो बाएं से दाएं लिखा जाता है। सटीक व्यवहार यूनिकोड तकनीकी अनुलग्नक # 9 में परिभाषित किया गया है।
  • गैर-रिक्ति या विशेषांक चिह्न (यूरोपीय भाषाओं में उच्चारण या umlauts)। कुछ भाषाएँ जैसे वियतनामी इन चिह्नों का व्यापक उपयोग करती हैं और कुछ वर्ण उच्चारण को स्पष्ट करने के लिए एक ही समय में एक से अधिक निशान रख सकते हैं।
  • Ligatures। विशेष संदर्भों में, कुछ जोड़े वर्णों को एक संयुक्त ग्लिफ़ द्वारा प्रतिस्थापित किया जाता है जो संयुक्ताक्षर बनाते हैं। सामान्य उदाहरण अमेरिकी और यूरोपीय पुस्तकों को टाइप करने में उपयोग किए जाने वाले फ्ल और फाई लिगचर हैं।

Qt ऊपर सूचीबद्ध सभी विशेष सुविधाओं का ध्यान रखने की कोशिश करता है। जब तक आप Qt के इनपुट नियंत्रणों (जैसे QLineEdit , QTextEdit , और व्युत्पन्न वर्ग या क्विक TextInput आइटम) और Qt के डिस्प्ले नियंत्रण (जैसे QLabel और Qt क्विक का टेक्स्ट आइटम) का उपयोग नहीं करते हैं, तब तक आपको आमतौर पर इन विशेषताओं के बारे में चिंता करने की ज़रूरत नहीं है।

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

  • QPainter::drawText (int x, int y, const QString & str) हमेशा स्ट्रिंग को x, y मापदंडों के साथ निर्दिष्ट स्थिति में अपने बाएं किनारे के साथ खींचेगा। यह आमतौर पर आपको बाएं संरेखित तार देगा। अरबी और हिब्रू एप्लिकेशन के तार आमतौर पर सही संरेखित होते हैं, इसलिए इन भाषाओं के लिए drawText () के संस्करण का उपयोग किया जाता है जो कि QRect लेता है क्योंकि यह भाषा के अनुसार संरेखित होगा।
  • जब आप अपना स्वयं का पाठ इनपुट नियंत्रण QTextLayout , तो QTextLayout उपयोग QTextLayout । कुछ भाषाओं में (जैसे अरबी या भारतीय उपमहाद्वीप की भाषाएं), ग्लिफ़ की चौड़ाई और आकार में आसपास के पात्रों के आधार पर परिवर्तन होता है, जिसे QTextLayout लेते हैं। इनपुट नियंत्रण लिखना आमतौर पर उन लिपियों के एक निश्चित ज्ञान की आवश्यकता होती है जो इसमें उपयोग होने वाली हैं। आमतौर पर सबसे आसान तरीका QLineEdit या QTextEdit को उप-वर्ग करना है।

स्रोत कोड का अंतर्राष्ट्रीयकरण कैसे करें, इसके बारे में अधिक जानकारी के लिए, अनुवाद के लिए स्रोत कोड लिखना और क्यूटी क्विक के साथ अंतर्राष्ट्रीयकरण और स्थानीयकरण देखें

अनुवाद का उत्पादन

Qt स्थानीय भाषाओं में Qt C ++ और Qt त्वरित अनुप्रयोगों के अनुवाद के लिए उत्कृष्ट सहायता प्रदान करता है। रिलीज़ प्रबंधक, अनुवादक और डेवलपर अपने कार्यों को पूरा करने के लिए Qt अनुवाद टूल का उपयोग कर सकते हैं।

Qt अनुवाद उपकरण, Qt भाषाविद्, lupdate , और lrelease बेस डायरेक्टरी lrelease के bin उपनिर्देशिका में स्थापित किए गए हैं। उनका उपयोग करने के बारे में अधिक जानकारी के लिए, क्यूटी भाषाविद् मैनुअल देखें

Qt में ही कई हजारों स्ट्रिंग्स हैं, जिन्हें उन भाषाओं में भी अनुवादित करने की आवश्यकता होगी जिन्हें आप लक्षित कर रहे हैं। आपको qttranslations रिपॉजिटरी में कई अनुवाद फाइलें मिलेंगी। इससे पहले कि आप क्यूटी का अनुवाद करना शुरू करें, अन्य भाषाओं में क्यूटी का अनुवाद करते हुए विकी पृष्ठ पढ़ें।

अनुवाद सक्षम करना

आमतौर पर, आपके एप्लिकेशन का main() फ़ंक्शन इस तरह दिखेगा:

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QTranslator qtTranslator;
    qtTranslator.load("qt_" + QLocale::system().name(),
            QLibraryInfo::location(QLibraryInfo::TranslationsPath));
    app.installTranslator(&qtTranslator);

    QTranslator myappTranslator;
    myappTranslator.load("myapp_" + QLocale::system().name());
    app.installTranslator(&myappTranslator);

    ...
    return app.exec();
}

ट्रांसलेशन- QTranslator एप्लिकेशन के लिए, QTranslator ऑब्जेक्ट बनाया जाता है, फिर रनटाइम में वर्तमान लोकेल के अनुसार ट्रांसलेशन लोड किया जाता है, और आखिर में ट्रांसलेटर ऑब्जेक्ट को एप्लिकेशन में इंस्टॉल किया जाता है।

क्यूटी ट्रांसलेशन का पता लगाने के लिए QLibraryInfo::location () के उपयोग पर ध्यान दें। डेवलपर्स को QLibraryInfo::TranslationsPath को इस फ़ंक्शन में QLibraryInfo::TranslationsPath -टाइम पर अनुवाद के लिए पथ का अनुरोध करना चाहिए, बजाय इसके अनुप्रयोगों में QTDIR पर्यावरण चर का उपयोग करने के लिए।

एनकोडिंग के लिए समर्थन

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

एप्लिकेशन को कभी-कभी डिफ़ॉल्ट स्थानीय 8-बिट एन्कोडिंग के अलावा अन्य एन्कोडिंग की आवश्यकता हो सकती है। उदाहरण के लिए, सिरिलिक KOI8-R लोकेल (रूस में वास्तविक मानक) में एक एप्लिकेशन को आईएसओ 8859-5 एन्कोडिंग में सिरिलिक का उत्पादन करने की आवश्यकता हो सकती है। इसके लिए कोड होगा:

QString string = ...; // some Unicode text

QTextCodec *codec = QTextCodec::codecForName("ISO 8859-5");
QByteArray encodedString = codec->fromUnicode(string);

यूनिकोड को स्थानीय 8-बिट एन्कोडिंग में परिवर्तित करने के लिए, एक शॉर्टकट उपलब्ध है: QString::toLocal8Bit () फ़ंक्शन ऐसे 8-बिट डेटा देता है। एक अन्य उपयोगी शॉर्टकट QString::toUtf8 () है, जो 8-बिट UTF-8 एन्कोडिंग में पाठ लौटाता है: यह पूरी तरह से यूनिकोड की जानकारी को सुरक्षित रखता है जबकि टेक्स्ट ASCII के पूर्ण होने पर सादे ASCII की तरह दिखता है।

दूसरे तरीके को परिवर्तित करने के लिए, QString::fromUtf8 () और QString::fromLocal8Bit () सुविधा फ़ंक्शंस, या सामान्य कोड, आईएसओ 8859-5 सिरिलिक से यूनिकोड रूपांतरण में इस रूपांतरण द्वारा प्रदर्शित किए गए हैं:

QByteArray encodedString = ...; // some ISO 8859-5 encoded text

QTextCodec *codec = QTextCodec::codecForName("ISO 8859-5");
QString string = codec->toUnicode(encodedString);

यूनिकोड I / O का उपयोग किया जाना चाहिए क्योंकि यह दुनिया भर के उपयोगकर्ताओं के बीच दस्तावेजों की पोर्टेबिलिटी को अधिकतम करता है। हालांकि कई मामलों में अभी भी अन्य एन्कोडिंग का समर्थन करना आवश्यक है क्योंकि आपके उपयोगकर्ताओं को मौजूदा दस्तावेजों को संसाधित करने की आवश्यकता होगी। समर्थन करने के लिए सबसे महत्वपूर्ण अतिरिक्त एन्कोडिंग है QTextCodec::codecForLocale () द्वारा लौटाया गया, क्योंकि यह वह है जो उपयोगकर्ता को अन्य लोगों और अनुप्रयोगों के साथ संवाद करने की सबसे अधिक संभावना है (यह स्थानीय 2018.it () द्वारा उपयोग किए गए कोडेक है)।

Qt मूल रूप से उपयोग किए जाने वाले अधिक अक्सर एनकोडिंग का समर्थन करता है। समर्थित एन्कोडिंग की पूरी सूची के लिए, QTextCodec दस्तावेज़ देखें।

कुछ मामलों में और कम बार उपयोग किए जाने वाले एन्कोडिंग के लिए यह आवश्यक है कि आप अपने खुद के QTextCodec उपवर्ग लिखें। तात्कालिकता के आधार पर, यह क्यूटी की तकनीकी सहायता टीम से संपर्क करने या qt-interest मेलिंग सूची पर पूछने के लिए उपयोगी हो सकता है यह देखने के लिए कि क्या कोई अन्य पहले से एन्कोडिंग का समर्थन करने पर काम कर रहा है।

स्थानीयकरण संख्याएँ, तिथियाँ, टाइम्स और मुद्रा

स्थानीयकरण स्थानीय सम्मेलनों के अनुकूल होने की प्रक्रिया है, उदाहरण के लिए स्थानीय रूप से पसंदीदा प्रारूपों का उपयोग करते हुए तिथियां और समय प्रस्तुत करना। स्थानीयकृत संख्या, दिनांक, समय और मुद्रा स्ट्रिंग्स के लिए, QLocale वर्ग का उपयोग करें।

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

गतिशील अनुवाद

कुछ एप्लिकेशन, जैसे कि क्यूटी लिंग्विस्ट, उपयोगकर्ता की भाषा सेटिंग्स में परिवर्तन का समर्थन करने में सक्षम होना चाहिए, जबकि वे अभी भी चल रहे हैं। विजेट्स को इंस्टॉल किए गए QTranslator ऑब्जेक्ट्स में बदलावों से अवगत कराने के लिए, विजेट के बदलाव को फिर से लागू करें changeEvent() फ़ंक्शन की जांच करें कि क्या यह इवेंट एक LanguageChange इवेंट है, और सामान्य तरीके से tr() फ़ंक्शन का उपयोग करके विजेट द्वारा प्रदर्शित टेक्स्ट को अपडेट करें। उदाहरण के लिए:

void MyWidget::changeEvent(QEvent *event)
{
    if (event->type() == QEvent::LanguageChange) {
        titleLabel->setText(tr("Document Title"));
        ...
        okPushButton->setText(tr("&OK"));
    } else
        QWidget::changeEvent(event);
}

फ़ंक्शन के डिफ़ॉल्ट कार्यान्वयन को कॉल करके अन्य सभी परिवर्तन ईवेंट को पास किया जाना चाहिए।

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

QWidget उपवर्गों के लिए डिफ़ॉल्ट ईवेंट हैंडलर LanguageChange इवेंट पर प्रतिक्रिया करता है, और आवश्यक होने पर इस फ़ंक्शन को कॉल करेगा।

जब एक नया अनुवाद QCoreApplication::installTranslator () फ़ंक्शन का उपयोग करके स्थापित किया जाता है तो LanguageChange इवेंट पोस्ट किए जाते हैं। इसके अतिरिक्त, अन्य एप्लिकेशन घटक भी विजेट्स को अपने आप को LanguageChange घटनाओं को पोस्ट करके अपडेट करने के लिए मजबूर कर सकते हैं।

सिस्टम का समर्थन

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

यूनिक्स / X11
  • लोकेल-ओरिएंटेड फोंट और इनपुट मेथड। Qt इन्हें छुपाता है और यूनिकोड इनपुट और आउटपुट प्रदान करता है।
  • फ़ाइल सिस्टम सम्मेलनों जैसे कि यूटीएफ -8 का उपयोग आज अधिकांश यूनिक्स वेरिएंट में डिफ़ॉल्ट रूप से किया जाता है। सभी Qt फ़ाइल फ़ंक्शंस यूनिकोड की अनुमति देते हैं, लेकिन फ़ाइल नाम को स्थानीय 8-बिट एन्कोडिंग में परिवर्तित करते हैं, क्योंकि यह यूनिक्स कन्वेंशन है (वैकल्पिक एन्कोडिंग का पता लगाने के लिए QFile :: setEncodingFunction () देखें)।
  • QTextStream में यूनिकोड विकल्पों के साथ स्थानीय I-O फाइल को I / O डिफॉल्ट QTextStream
  • कुछ पुराने यूनिक्स वितरण में कुछ स्थानों के लिए केवल आंशिक समर्थन होता है। उदाहरण के लिए, यदि आपके पास /usr/share/locale/ja_JP.EUC निर्देशिका है, तो इसका मतलब यह नहीं है कि आप जापानी पाठ प्रदर्शित कर सकते हैं; आपको जापानी फ़ॉन्ट स्थापित करने की भी आवश्यकता है, और /usr/share/locale/ja_JP.EUC निर्देशिका को पूरा करने की आवश्यकता है। सर्वोत्तम परिणामों के लिए, अपने सिस्टम विक्रेता से पूर्ण स्थानों का उपयोग करें।
लिनक्स
  • Qt इनपुट विधियों, फोंट, क्लिपबोर्ड, ड्रैग-एंड-ड्रॉप सहित पूर्ण यूनिकोड समर्थन प्रदान करता है।
  • फ़ाइल सिस्टम आमतौर पर सभी आधुनिक लिनक्स वितरणों पर UTF-8 में एन्कोडेड होता है और इसमें कोई समस्या नहीं होनी चाहिए। UTF-8 में फ़ाइल I / O चूक
विंडोज
  • Qt इनपुट विधियों, फोंट, क्लिपबोर्ड, ड्रैग-एंड-ड्रॉप और फ़ाइल नामों सहित पूर्ण यूनिकोड समर्थन प्रदान करता है।
  • फ़ाइल I / O लैटिन में डिफॉल्ट करता है, QTextStream में यूनिकोड विकल्पों के साथ। ध्यान दें कि कुछ विंडोज प्रोग्राम बड़े-एंडियन यूनिकोड पाठ फ़ाइलों को नहीं समझते हैं, भले ही वह उच्च-स्तरीय प्रोटोकॉल की अनुपस्थिति में यूनिकोड मानक द्वारा निर्धारित आदेश हो।
मैक ओ एस

MacOS- विशिष्ट अनुवाद के विवरण के लिए, here macOS मुद्दों के लिए Qt का संदर्भ लें।

संबंधित पेज

अनुवाद के नियम

Qt के i18n टूल द्वारा निर्मित अपरा के लिए अनुवाद नियमों का सारांश।

क्यूटी भाषाविद उदाहरण

अपने क्यूटी आवेदन का अंतरराष्ट्रीयकरण करने के लिए क्यूटी भाषाविद् का उपयोग करना

अनुवाद प्रक्रिया का अवलोकन

क्यूटी भाषाविद मैनुअल

क्यूटी भाषाविद् मैनुअल: डेवलपर्स

क्यूटी भाषाविद् मैनुअल: रिलीज मैनेजर

क्यूटी भाषाविद् मैनुअल: टीएस फ़ाइल प्रारूप

क्यूटी भाषाविद् मैनुअल: टेक्स्ट आईडी आधारित अनुवाद

टेक्स्ट आईडी आधारित अंतर्राष्ट्रीयकरण अनुवाद करने के लिए कई लक्ष्य स्थानों और कई ग्रंथों के साथ बड़े पैमाने पर परियोजनाओं के लिए समर्थन प्रदान करता है

क्यूटी भाषाविद् मैनुअल: अनुवादक

अनुवाद के लिए सोर्स कोड लिखना

स्रोत कोड को इस तरह से कैसे लिखें जिससे उपयोगकर्ता-दृश्य पाठ का अनुवाद संभव हो सके।