2011-12-28 14 views
5

मुझे एक सूची के लिए एक अनुक्रमणिका चाहिए। उदाहरण के लिए एंड्रॉइड संपर्क सूची में #, ए-जेड है। लेकिन कई स्थानों के लिए यह सभी लोकेल विशिष्ट पात्रों को शामिल नहीं करता है।लोकेल विशिष्ट इंडेक्स वर्ण

कैसे अलग प्रोग्रामिंग भाषाओं में इस के लिए समर्थन है? मैं शीघ्रता से अवलोकन लिया और कोर जावा के मामले में मैं कुछ भी मीटर

कुछ हद तक संबंधित नहीं देखा था: http://cldr.unicode.org/development/development-process/design-proposals/index-characters

+0

एफवाईआई: आपको इस क्षेत्र 51 [आई 18 एन और एल 10 एन प्रस्ताव] से लाभ हो सकता है (http://area51.stackexchange.com/proposals/12416/i18n-l10n)। – McDowell

उत्तर

3

यह बहुत अच्छा सवाल है!

जैसा कि आप टैग में नोट करते हैं, महत्वपूर्ण बात प्रोग्रामिंग भाषा नहीं है। यह डेटा सेट है जिसे आपको वास्तव में यहां चाहिए। मुझे ऐसी चीजों के लिए कोई भंडार नहीं है। ᴄʟᴅʀ डेटा में अभी तक यह बात नहीं है। पर्ल में लिखे गए विभिन्न दो-अक्षर ɪsᴏ कोडों के साथ-साथ एशियाई अनुक्रमों के लिए कुछ अतिरिक्त अनुक्रमों की एक सरल तालिका यहां दी गई है। इस तरह की चीज एक मॉड्यूल का आधार हो सकती है।

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

use utf8; 
use strict; 
use warnings; 

our %Alphabet = (
    en => [qw(a b c d e f g h i j k l m n o p q r s t u v w x y z)], 

    br => [qw(a b ch c'h d e f g h i j k l m n o p r s t u v w y z)], 
    cy => [qw(a b c ch d dd e f ff g ng h i l ll m n o p ph r rh s t th u w y)], 
    ga => [qw(a á b c d e é f g h i í l m n o ó p r s t u ú)], 
    gd => [qw(a b c d e f g h i l m n o p r s t u)], 

    la => [qw(a b c d e f g h i k l m n o p q r s t v x y z)], 
    it => [qw(a b c d e f g h i k l m n o p q r s t u v z)], 
    es => [qw(a b c d e f g h i j k l m n ñ o p q r s t u v w x y z)], 
    es__traditional => 
      [qw(a b c ch d e f g h i j k l ll m n ñ o p q r s t u v w x y z)], 
    eu => [qw(a b c ch d e f g h i j k l ll m n ñ o p q r s t ts tx tz u v w x y z)], 
    rm => [qw(a b c d e f g h i j l m n o p q r s t u v x z)], 
    ro => [qw(a ă â b c d e f g h i î j k l m n o p q r s ș t ț u v w x y z)], 
    oc => [qw(a b c d e f g h i j l m n o p q r s t u v x z)], 

    sw => [qw(a b c d e f g h i j k l m n o p q r s t u v w x y z å ä ö)], 
    no => [qw(a b c d e f g h i j k l m n o p q r s t u v w x y z æ ø å)], 
    is => [qw(a á b d ð e é f g h i í j k l m n o ó p r s t u ú v x y ý þ æ ö)], 

    cz => [qw(a á b c č d ď e é ě f g h ch i í j k l m n ň o ó p q r ř s š t ť u ú ů v w x y ý z ž)], 
    sk => [qw(a á ä b c č d ď dz dž e é f g h ch i í j k l ĺ ľ m n ň o ó ô p q r ŕ s š t ť u ú v w x y ý z ž)], 
    sl => [qw(a b c č d e f g h i j k l m n o p r s š t u v z ž)], 

    pl => [qw(a ą b c ć d e ę f g h i j k l ł m n ń o ó p r s ś t u w y z ź ż)], 

    lt => [qw(a ą b c č d e ę ė f g h i į y j k l m n o p r s š t u ų ū v z ž)], 
    lv => [qw(a ā b c č d e ē f g ģ h i ī j k ķ l ļ m n ņ o p r s š t u ū v z ž)], 
    et => [qw(a b d e f g h i j k l m n o p r s š z ž t u v õ ä ö ü)], 
    et__full => 
      [qw(A B C D E F G H I J K L M N O P Q R S Š Z Ž T U V W Õ Ä Ö Ü X Y)], 
    et__simple => [qw(a b d e g h i j k l m n o p r s t u v õ ä ö ü)], 

    hu => [qw(a á b c cS d dz dzs e é f g gy H i í j k l ly M n ny O ó ö ő p q r s sz t ty u ú ü ű v w x y z zs)], 
    hu__traditional => 
      [qw(a á b c cs d dz dzs e é f g gy h i í j k l ly m n ny o ó ö ő p r s sz t ty u ú ü ű v z zs)], 

    tr => [qw(a b c ç d e f g ğ h ı i j k l m n o ö p r s ş t u ü v y z)], 
    az => [qw([a b c ç d e ə f g ğ h x ı i j k q l m n o ö p r s ş t u ü v y z)], 
    az_1918_1939 => 
     [qw(a в c ç d e ə f g ƣ h i ь j k q l m n o ɵ p r s ş t u v x y z ƶ)], 
    az_1939_1958 => 
     [qw(а б в г ғ д е ё ә ж з и й к қ л м н о ө п р с т у ү ф х h ц ч ҷ ш щ ъ ы ь э ю я ')], 
    az_1958_1991 => 
     [qw(а б в г ғ д e ә ж з и ы ј к ҝ л м н о ө п р с т у ү ф х һ ч ҹ ш ')], 
    az_1991_1992 => 
     [qw(a ä b c ç d e f g ğ h x ı i j k q l m n o ö p r s ş t u ü v y z)], 

    he => [qw(α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ φ χ ψ ω)], 

    ru => [qw(а б в г д е ж з и к л м н о п р с т у ф х ц ч ш щ ы э ю я)], 
    uk => [qw(а б в г ґ д е є ж з и і ї й к л м н о п р с т у ф х ц ч ш щ ь ю я)], 
    mk => [qw(а б в г д ѓ е ж з ѕ и ј/к л љ м н њ о п р с т ќ/у ф х ц ч џ ш)], 


    "HIRAGANA AIUEO" => 
     [qw(あ い う え お か き く け こ さ し す せ そ た ち つ て と な に ぬ ね の は ひ ふ へ ほ ま み む め も や ゆ よ ら り る れ ろ わ を ん)], 
    "KATAKANA AIUEO" => 
     [qw(ア イ ウ エ オ カ キ ク ケ コ サ シ ス セ ソ タ チ ツ テ ト ナ ニ ヌ ネ ノ ハ ヒ フ ヘ ホ マ ミ ム メ モ ヤ ユ ヨ ラ リ ル レ ロ ワ ヲ ン)], 
    "HALFWIDTH KATAKANA AIUEO" => 
     [qw(ア イ ウ エ オ カ キ ク ケ コ サ シ ス セ ソ タ チ ツ テ ト ナ ニ ヌ ネ ノ ハ ヒ フ ヘ ホ マ ミ ム メ モ ヤ ユ ヨ ラ リ ル レ ロ ワ ヲ ン)], 
    "KATAKANA IROHA" => 
     [qw(イ ロ ハ ニ ホ ヘ ト チ リ ヌ ル ヲ ワ カ ヨ タ レ ソ ツ ネ ナ ラ ム ウ ヰ ノ オ ク ヤ マ ケ フ コ エ テ ア サ キ ユ メ ミ シ ヱ ヒ モ セ ス)], 
    "HIRAGANA IROHA" => 
     [qw(い ろ は に ほ へ と ち り ぬ る を わ か よ た れ そ つ ね な ら む う ゐ の お く や ま け ふ こ え て あ さ き ゆ め み し ゑ ひ も せ す)], 
    "HALFWIDTH KATAKANA IROHA" => 
     [qw(イ ロ ハ ニ ホ ヘ ト チ リ ヌ ル ヲ ワ カ ヨ タ レ ソ ツ ネ ナ ラ ム ウ ノ オ ク ヤ マ ケ フ コ エ テ ア サ キ ユ メ ミ シ ヒ モ セ ス)], 

    "HANGUL CHOSUNG" => 
     [qw(ㄱ ㄴ ㄷ ㄹ ㅁ ㅂ ㅅ ㅇ ㅈ ㅊ ㅋ ㅌ ㅍ ㅎ)], 
    "HANGUL GANADA" => 
     [qw(가 나 다 라 마 바 사 아 자 차 카 타 파 하)], 
    "CHINESE ZODIAC 10" => 
     [qw(甲 乙 丙 丁 戊 己 庚 辛 壬 癸)], 
    "CHINESE ZODIAC 12" => 
     [qw(子 丑 寅 卯 辰 巳 午 未 申 酉 戍 亥)], 

    "ZODIAC" => [qw(♈ ♉ ♊ ♋ ♌ ♍ ♎ ♏ ♐ ♑ ♒ ♓ )], 

); 

for my $a (\%Alphabet) { 

    $$a{da} = $$a{no}; 
    $$a{fi} = $$a{no}; 

    $$a{de} = $$a{en}; 
    $$a{fr} = $$a{en}; 
    $$a{pt} = $$a{en}; 
} 


1; 

यह निश्चित रूप से शुरू करने के लिए पर्याप्त होना चाहिए, हालांकि।

+0

मान लीजिए कि मैं फ्रेंच में एक इंडेक्स संसाधित कर रहा था, और मैं शुरुआत से एक शब्द में भाग गया? ऐसा लगता है, मैं उपरोक्त आपकी हैश तालिका से परामर्श लेगा, और सीखूंगा कि फ्रेंच के लिए सूची में कोई "é" नहीं था। (चूंकि यह अंग्रेजी के लिए सूची के समान है)। तो मेरे कार्यक्रम को यह पता लगाना होगा कि "ई" सिर्फ "ई" का एक रूप था। क्या आप ऐसा करने के लिए पर्ल में एक दृष्टिकोण का सुझाव दे सकते हैं? – egilchri

+0

@egilchri आसान! '@sorted_data = यूनिकोड :: कोलेट :: लोकेल-> नया (लोकेल =>" fr ") -> सॉर्ट (@डेटा) 'का उपयोग करें। मॉड्यूल CLDR डेटा का उपयोग करता है, और यह बहुत व्यापक है। बीटीडब्ल्यू, फ्रांसीसी प्रकार अन्य भाषाओं की तुलना में अलग-अलग उच्चारण करते हैं। – tchrist

+0

तो यह बहुत अच्छा काम करता है, और मैं पहले अक्षर की एक सूची के साथ समाप्त होता हूं: (ए बी सी डी ई ए एफ जी एच आई एल एम एन ओ पी आर एस टी वी) क्या मुझे बताता है कि ई को ई श्रेणी में ध्वस्त किया जाना चाहिए? (बीटीडब्ल्यू, यह सामान अब तक एक आकर्षण की तरह काम कर रहा है, बहुत धन्यवाद।) – egilchri

2

CLDR पेज आप का उल्लेख एक दृष्टिकोण इस तरह प्रश्नों को संबोधित करने का इरादा का वर्णन करता है, और यह कहते हैं: "सीएलडीआर 1.8 के लिए, इंडेक्स अक्षरों का प्रारंभिक सेट स्वचालित रूप से जेनरेट किया गया है" लेकिन चेतावनी देता है: "चेतावनी: स्वचालित पीढ़ी केवल अनुवादकों के लिए एक मसौदा होगी, इसलिए किसी भी कमियों को ठीक किया जा सकता है।" यह स्थिति की व्याख्या कर सकता है अगर आप अभी तक प्रोग्रामिंग भाषाओं में इसका समर्थन नहीं पा रहे हैं।

लेकिन मैं तुम्हें अब भी CLDR से सीधे निकाल कर डेटा का उपयोग कर सकते लगता है; यह main डेटा, तत्व <characters>, subelement <exemplarCharacters>type="index" साथ में है।

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