[Unicode]   Common Locale Data Repository : Bug Tracking Home | Site Map | Search
 

Changeset 9547


Ignore:
Timestamp:
12/09/13 06:52:17 (5 years ago)
Author:
mdavis
Message:

cldrbug 6722: update ranges and fix charts

Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/common/supplemental/pluralRanges.xml

    r9529 r9547  
    3030                        <pluralRange start="other" end="other" result="other"/> 
    3131                </pluralRanges> 
    32                 <pluralRanges locales="az de el en gl hu it kk ky ml mn ne nl pt sq sw ta te tr uz"> 
    33                         <pluralRange start="one"   end="other" result="other"/> 
    34                         <pluralRange start="other" end="one"   result="one"/> 
    35                         <pluralRange start="other" end="other" result="other"/> 
    36                 </pluralRanges> 
    37                 <pluralRanges locales="af bg ca es et eu fi nb sv ur"> 
     32                <pluralRanges locales="az de el gl hu it kk ky ml mn ne nl pt sq sw ta te tr uz"> 
     33                        <pluralRange start="one"   end="other" result="other"/> 
     34                        <pluralRange start="other" end="one"   result="one"/> 
     35                        <pluralRange start="other" end="other" result="other"/> 
     36                </pluralRanges> 
     37                <pluralRanges locales="af bg ca en es et eu fi nb sv ur"> 
    3838                        <pluralRange start="one"   end="other" result="other"/> 
    3939                        <pluralRange start="other" end="one"   result="other"/> 
    4040                        <pluralRange start="other" end="other" result="other"/> 
    4141                </pluralRanges> 
    42                 <pluralRanges locales="da is"> 
     42                <pluralRanges locales="da is fil"> 
    4343                        <pluralRange start="one"   end="one"   result="one"/> 
    4444                        <pluralRange start="one"   end="other" result="other"/> 
  • trunk/tools/java/org/unicode/cldr/tool/GeneratePluralRanges.java

    r9528 r9547  
    11package org.unicode.cldr.tool; 
    22 
     3import java.util.ArrayList; 
    34import java.util.Collection; 
    45import java.util.Comparator; 
    56import java.util.EnumSet; 
    67import java.util.LinkedHashSet; 
     8import java.util.List; 
    79import java.util.Map; 
    810import java.util.Set; 
     
    1113import java.util.Map.Entry; 
    1214 
     15import org.unicode.cldr.tool.PluralRulesFactory.SamplePatterns; 
    1316import org.unicode.cldr.unittest.TestAll.TestInfo; 
     17import org.unicode.cldr.util.CLDRFile; 
     18import org.unicode.cldr.util.CldrUtility; 
     19import org.unicode.cldr.util.ICUServiceBuilder; 
     20import org.unicode.cldr.util.LanguageTagParser; 
     21import org.unicode.cldr.util.Level; 
    1422import org.unicode.cldr.util.PluralRanges; 
    1523import org.unicode.cldr.util.StandardCodes; 
    1624import org.unicode.cldr.util.SupplementalDataInfo; 
    1725import org.unicode.cldr.util.SupplementalDataInfo.PluralInfo; 
     26import org.unicode.cldr.util.SupplementalDataInfo.PluralType; 
    1827import org.unicode.cldr.util.SupplementalDataInfo.PluralInfo.Count; 
    1928 
     
    2130import com.ibm.icu.dev.util.Relation; 
    2231import com.ibm.icu.impl.Utility; 
     32import com.ibm.icu.text.DecimalFormat; 
     33import com.ibm.icu.text.MessageFormat; 
    2334import com.ibm.icu.text.PluralRules; 
    2435import com.ibm.icu.text.PluralRules.FixedDecimal; 
    2536import com.ibm.icu.util.Output; 
     37import com.ibm.icu.util.ULocale; 
    2638 
    2739public class GeneratePluralRanges { 
     
    2941 
    3042    public static void main(String[] args) { 
    31         new GeneratePluralRanges().reformatPluralRanges(); 
    32     } 
     43        GeneratePluralRanges me = new GeneratePluralRanges(); 
     44        //me.reformatPluralRanges(); 
     45        me.generateSamples(); 
     46    } 
     47 
     48    private void generateSamples() { 
     49        Map<ULocale, PluralRulesFactory.SamplePatterns> samples = PluralRulesFactory.getLocaleToSamplePatterns(); 
     50        // add all the items with plural ranges 
     51        Set<String> sorted = new TreeSet(SUPPLEMENTAL.getPluralRangesLocales()); 
     52        // add the core locales 
     53        sorted.addAll(StandardCodes.make().getLocaleCoverageLocales("google", EnumSet.of(Level.MODERN))); 
     54        // add any variant plural forms 
     55        LanguageTagParser ltp = new LanguageTagParser(); 
     56        for (String locale : SUPPLEMENTAL.getPluralLocales()) { 
     57            if (locale.contains("_")) { 
     58                if (sorted.contains(ltp.set(locale).getLanguage())) { 
     59                    sorted.add(locale); 
     60                } 
     61            } 
     62        } 
     63        //sorted.add("fil"); 
     64        System.out.println("Co.\tLocale Name\tStart\tEnd\tResult\tStart Sample\tEnd Sample\tStart Example\tEnd Example\tCombined Example"); 
     65        for (String locale : sorted) { 
     66            PluralInfo pluralInfo3 = SUPPLEMENTAL.getPlurals(locale); 
     67            if (locale.contains("_")) { 
     68                PluralInfo pluralInfo2 = SUPPLEMENTAL.getPlurals(ltp.set(locale).getLanguage()); 
     69                if (pluralInfo2.equals(pluralInfo3)) { 
     70                    continue; 
     71                } 
     72            } 
     73 
     74            Set<Count> counts3 = pluralInfo3.getCounts(); 
     75            if (counts3.size() == 1) { 
     76                continue; // skip japanese, etc. 
     77            } 
     78 
     79            List<RangeSample> list = getRangeInfo(locale); 
     80 
     81            for (RangeSample rangeSample : list) { 
     82                System.out.println(locale + "\t" + testInfo.getEnglish().getName(locale) 
     83                    + "\t" + rangeSample.start  
     84                    + "\t" + rangeSample.end  
     85                    + "\t" + (rangeSample.result == null ? "missing" : rangeSample.result)  
     86                    + "\t" + rangeSample.min 
     87                    + "\t" + rangeSample.max 
     88                    + "\t" + rangeSample.startExample 
     89                    + "\t" + rangeSample.endExample 
     90                    + "\t" + rangeSample.resultExample 
     91                    ); 
     92            } 
     93        } 
     94    } 
     95 
     96    public static List<RangeSample> getRangeInfo(String locale) { 
     97        if (locale.equals("iw")) { 
     98            locale = "he"; 
     99        } 
     100        Map<ULocale, PluralRulesFactory.SamplePatterns> samples = PluralRulesFactory.getLocaleToSamplePatterns(); 
     101        List<RangeSample> list = new ArrayList(); 
     102        PluralInfo pluralInfo = SUPPLEMENTAL.getPlurals(locale); 
     103        Set<Count> counts = pluralInfo.getCounts(); 
     104        PluralRanges pluralRanges = SUPPLEMENTAL.getPluralRanges(locale); 
     105        if (pluralRanges == null) { 
     106            return null; 
     107        } 
     108        ULocale ulocale = new ULocale(locale); 
     109        SamplePatterns samplePatterns = CldrUtility.get(samples, ulocale); 
     110        if (samplePatterns == null && locale.contains("_")) { 
     111            ulocale = new ULocale(ulocale.getLanguage()); 
     112            samplePatterns = CldrUtility.get(samples, ulocale); 
     113            if (samplePatterns == null) { 
     114                return null; 
     115            } 
     116        } 
     117 
     118        Output<FixedDecimal> maxSample = new Output(); 
     119        Output<FixedDecimal> minSample = new Output(); 
     120 
     121        CLDRFile cldrFile = testInfo.getCldrFactory().make(locale, true); 
     122        ICUServiceBuilder icusb = new ICUServiceBuilder(); 
     123        icusb.setCldrFile(cldrFile); 
     124        DecimalFormat nf = icusb.getNumberFormat(1); 
     125        //String decimal = cldrFile.getWinningValue("//ldml/numbers/symbols[@numberSystem=\"latn\"]/decimal"); 
     126        String defaultNumberingSystem = cldrFile.getWinningValue("//ldml/numbers/defaultNumberingSystem"); 
     127        String range = cldrFile.getWinningValue("//ldml/numbers/miscPatterns[@numberSystem=\""  
     128            + defaultNumberingSystem 
     129            + "\"]/pattern[@type=\"range\"]"); 
     130 
     131        //            if (decimal == null) { 
     132        //                throw new IllegalArgumentException(); 
     133        //            } 
     134        for (Count s : counts) { 
     135            for (Count e : counts) { 
     136                if (!pluralInfo.rangeExists(s, e, minSample, maxSample)) { 
     137                    continue; 
     138                } 
     139                Count r = pluralRanges.getExplicit(s,e); 
     140                String minFormatted = format(nf, minSample.value); 
     141                String maxFormatted = format(nf, maxSample.value); 
     142                String rangeFormatted = MessageFormat.format(range, minFormatted, maxFormatted); 
     143 
     144                list.add(new RangeSample( 
     145                    s, e, r,  
     146                    minSample.value, 
     147                    maxSample.value, 
     148                    getExample(locale, samplePatterns, s, minFormatted) 
     149                    ,getExample(locale, samplePatterns, e, maxFormatted) 
     150                    ,getExample(locale, samplePatterns, r, rangeFormatted))); 
     151            } 
     152        } 
     153        return list; 
     154    } 
     155 
     156    public static class RangeSample { 
     157        // Category Examples    Minimal Pairs   Rules 
     158        public RangeSample(Count start, Count end, Count result,  
     159            FixedDecimal min, FixedDecimal max,  
     160            String startExample, String endExample, String resultExample) { 
     161            this.start = start; 
     162            this.end = end; 
     163            this.result = result; 
     164            this.min = min; 
     165            this.max = max; 
     166            this.startExample = startExample; 
     167            this.endExample = endExample; 
     168            this.resultExample = resultExample; 
     169        } 
     170        final Count start; 
     171        final Count end; 
     172        final Count result; 
     173        final FixedDecimal min; 
     174        final FixedDecimal max; 
     175        final String startExample; 
     176        final String endExample; 
     177        final String resultExample; 
     178    } 
     179 
     180    public static String format(DecimalFormat nf, FixedDecimal minSample) { 
     181        nf.setMinimumFractionDigits(minSample.visibleDecimalDigitCount); 
     182        nf.setMaximumFractionDigits(minSample.visibleDecimalDigitCount); 
     183        return nf.format(minSample); 
     184    } 
     185 
     186    //    private String format(String decimal, Output<FixedDecimal> minSample) { 
     187    //        return minSample.toString().replace(".", decimal); 
     188    //    } 
     189 
     190    public static String getExample(String locale, SamplePatterns samplePatterns, Count r, String numString) { 
     191        if (r == null) { 
     192            return "«missing»"; 
     193        } 
     194        String samplePattern; 
     195        try { 
     196            samplePattern = CldrUtility.get(samplePatterns.keywordToPattern, r); 
     197        } catch (Exception e) { 
     198            throw new IllegalArgumentException("Locale: " + locale + "; Count: " + r, e); 
     199        } 
     200        return samplePattern 
     201            .replace('\u00A0', '\u0020') 
     202            .replace("{0}", numString); 
     203    } 
     204 
    33205 
    34206    static TestInfo testInfo = TestInfo.getInstance(); 
     
    53225 
    54226            PluralRanges pluralRanges = SUPPLEMENTAL.getPluralRanges(locale); 
    55             if (pluralRanges == null) { 
    56                 pluralRanges = new PluralRanges().freeze(); 
    57             } 
    58227            PluralInfo pluralInfo = SUPPLEMENTAL.getPlurals(locale); 
    59228            Set<Count> counts = pluralInfo.getCounts(); 
     
    150319        } 
    151320        // if everything is 'other', we are done 
    152 //        if (allOther == true) { 
    153 //            return result; 
    154 //        } 
     321        //        if (allOther == true) { 
     322        //            return result; 
     323        //        } 
    155324        EnumSet<Count> endDone = EnumSet.noneOf(Count.class); 
    156325        EnumSet<Count> startDone = EnumSet.noneOf(Count.class); 
  • trunk/tools/java/org/unicode/cldr/tool/PluralRulesFactory.java

    r9519 r9547  
    295295        { "am", "one", "{0} ቀን" }, 
    296296        { "am", "other", "{0} ቀናት" }, // fixed to 'other' 
    297         { "ar", "few", "{0} ساعات" }, 
    298         { "ar", "many", "{0} ساعة" }, 
    299         { "ar", "one", "ساعة" }, 
    300         { "ar", "other", "{0} ساعة" }, 
    301         { "ar", "two", "ساعتان" }, 
    302         { "ar", "zero", "{0} ساعة" }, 
    303         { "az", "one", "Sizin alış-veriş katınızda {0} X var. Onu almaq istəyirsiniz mi?" }, 
    304         { "az", "other", "Sizin alış-veriş kartınızda {0} X var. Onları almaq istəyirsiniz mi?" }, 
     297        { "ar", "few", "{0} كتب" }, 
     298        { "ar", "many", "{0} كتابًا" }, 
     299        { "ar", "one", "كتاب" }, 
     300        { "ar", "other", "{0} كتاب" }, 
     301        { "ar", "two", "كتابان" }, 
     302        { "ar", "zero", "{0} كتاب" }, 
     303        { "az", "one", "Sizin alış-veriş kartınızda {0} X var. Onları almaq istəyirsiniz?" }, 
     304        { "az", "other", "Sizin alış-veriş kartınızda {0} X var. Onu almaq istəyirsiniz?" }, 
    305305        { "bg", "one", "{0} ден" }, 
    306306        { "bg", "other", "{0} дена" }, 
     
    337337        { "eu", "one", "Nire {0} lagunarekin nago" }, 
    338338        { "eu", "other", "Nire {0} lagunekin nago" }, 
    339         { "fa", "one", "او {0} فیلم در هفته می‌بیند که کمدی است." }, 
     339        { "fa", "one",   "او {0} فیلم در هفته می‌بیند که کمدی است." }, 
    340340        { "fa", "other", "او {0} فیلم در هفته می‌بیند که کمدی هستند." }, 
    341341        { "fi", "one", "{0} päivä" }, 
     
    462462        { "ur", "other", "{0} گھنٹے" }, 
    463463        { "uz", "one", "Xarid savatingizda {0} X bor. Uni sotib olishni xohlaysizmi?" }, 
    464         { "uz", "other", "Xaridingiz savatida {0} X bor. Ularni sotib olishni xohlaysizmi?" }, 
     464        { "uz", "other", "Xarid savatingizda {0} X bor. Ularni sotib olishni xohlaysizmi?" }, 
    465465        { "vi", "other", "{0} ngày" }, 
    466466        { "zh", "other", "{0} 天" }, 
  • trunk/tools/java/org/unicode/cldr/tool/ShowPlurals.java

    r9517 r9547  
    77import java.util.Set; 
    88 
     9import org.unicode.cldr.tool.GeneratePluralRanges.RangeSample; 
    910import org.unicode.cldr.tool.PluralRulesFactory.SamplePatterns; 
    1011import org.unicode.cldr.tool.ShowLanguages.FormattedFileWriter; 
     
    2829public class ShowPlurals { 
    2930 
     31    private static final String NO_PLURAL_DIFFERENCES = "<i>no plural differences</i>"; 
     32    private static final String NOT_AVAILABLE = "<i>Not available.<br>Please <a target='_blank' href='http://unicode.org/cldr/trac/newticket'>file a ticket</a> to supply.</i>"; 
    3033    static SupplementalDataInfo supplementalDataInfo = CLDRConfig.getInstance().getSupplementalDataInfo(); 
    3134 
     
    8184                continue; 
    8285            } 
     86            final String name = english.getName(locale); 
    8387            for (PluralType pluralType : PluralType.values()) { 
    8488                final PluralInfo plurals = supplementalDataInfo.getPlurals(pluralType, locale); 
     
    9195                rules += rules.length() == 0 ? "other:<i>everything</i>" : ";other:<i>everything else</i>"; 
    9296                rules = rules.replace(":", " → ").replace(";", ";<br>"); 
    93                 final String name = english.getName(locale); 
    9497                PluralRules pluralRules = plurals.getPluralRules(); 
    9598                //final Map<PluralInfo.Count, String> typeToExamples = plurals.getCountToStringExamplesMap(); 
     
    106109                        : counts.size() == 1 ? "<i>everything</i>" 
    107110                            : "<i>everything else</i>"; 
    108                         String sample = counts.size() == 1 ? "<i>no plural differences</i>" 
    109                             : "<i>Not available.<br>Please <a target='_blank' href='http://unicode.org/cldr/trac/newticket'>file a ticket</a> to supply.</i>"; 
     111                        String sample = counts.size() == 1 ? NO_PLURAL_DIFFERENCES : NOT_AVAILABLE; 
    110112                        if (samplePatterns != null) { 
    111113                            String samplePattern = CldrUtility.get(samplePatterns.keywordToPattern, Count.valueOf(keyword)); 
     
    130132                        .addCell(name) 
    131133                        .addCell(locale) 
    132                         .addCell(pluralType) 
     134                        .addCell(pluralType.toString()) 
    133135                        .addCell(count.toString()) 
    134136                        .addCell(examples.toString()) 
     
    137139                        .finishRow(); 
    138140                } 
     141            } 
     142            List<RangeSample> rangeInfoList = GeneratePluralRanges.getRangeInfo(locale); 
     143            if (rangeInfoList != null) { 
     144                for (RangeSample item : rangeInfoList) { 
     145                    tablePrinter.addRow() 
     146                    .addCell(name) 
     147                    .addCell(locale) 
     148                    .addCell("range") 
     149                    .addCell(item.start + "+" + item.end) 
     150                    .addCell(item.min + "–" + item.max) 
     151                    .addCell(item.resultExample.replace(". ", ".<br>")) 
     152                    .addCell(item.start + " + " + item.end + " → " + item.result) 
     153                    .finishRow(); 
     154                } 
     155            } else { 
     156                String message = supplementalDataInfo.getPlurals(PluralType.cardinal, locale).getCounts().size() == 1 ? NO_PLURAL_DIFFERENCES : NOT_AVAILABLE; 
     157                tablePrinter.addRow() 
     158                .addCell(name) 
     159                .addCell(locale) 
     160                .addCell("range") 
     161                .addCell("<i>n/a</i>") 
     162                .addCell("<i>n/a</i>") 
     163                .addCell(message) 
     164                .addCell("<i>n/a</i>") 
     165                .finishRow(); 
    139166            } 
    140167        } 
  • trunk/tools/java/org/unicode/cldr/util/data/Locales.txt

    r9237 r9547  
    265265 
    266266#Google Tier    4                                        
     267Google  ;       am      ;       modern  ;       T4      Amharic 
     268Google  ;       gu      ;       modern  ;       T4      Gujarati 
     269Google  ;       kn      ;       modern  ;       T4      Kannada 
     270Google  ;       ky      ;       modern  ;       T4.1    Kirghiz                                                                                                                          
     271Google  ;       ml      ;       modern  ;       T4      Malayalam 
     272Google  ;       pa      ;       modern  ;       T4.1    Punjabi 
    267273Google  ;       te      ;       modern  ;       T4      Telugu 
    268274Google  ;       ur      ;       modern  ;       T4      Urdu 
    269 Google  ;       ml      ;       modern  ;       T4      Malayalam 
    270 Google  ;       kn      ;       modern  ;       T4      Kannada 
    271 Google  ;       gu      ;       modern  ;       T4      Gujarati 
    272 Google  ;       eu      ;       modern  ;       T4      Basque 
    273 Google  ;       am      ;       modern  ;       T4      Amharic 
    274 Google  ;       fr_CA   ;       modern  ;       T4      Canadian French 
    275 Google  ;       zh_Hant_HK      ;       modern  ;       T4      Hong Kong Chinese (T) 
    276 Google  ;       ky      ;       modern  ;       T4.1    Kirghiz                                                                                                                          
    277 Google  ;       pa      ;       modern  ;       T4.1    Punjabi 
    278275Google  ;       uz      ;       modern          ;       T4.1    Uzbek   (Latin)                                                                                                                  
    279276                                                                                                                         
    280 #Google Tier    5        
    281 Google  ;       uz_Cyrl ;       modern  ;       T5      Uzbek   (Cyrillic)                                                                                                               
     277#Google Tier    ext      
     278Google  ;       cy      ;       moderate        ;       T5      Welsh 
     279Google  ;       eu      ;       moderate        ;       T4      Basque 
     280Google  ;       gl      ;       moderate        ;       T5      Galician 
    282281Google  ;       zu      ;       moderate        ;       T5      Zulu                                                                             
    283 Google  ;       gl      ;       moderate        ;       T5      Galician 
    284 Google  ;       cy      ;       moderate        ;       T5      Welsh 
     282#Google ;       fr_CA   ;       modern  ;       T4      Canadian French 
     283#Google ;       zh_Hant_HK      ;       modern  ;       T4      Hong Kong Chinese (T) 
     284#Google ;       uz_Cyrl ;       modern  ;       T5      Uzbek   (Cyrillic)                                                                                                               
    285285                                                                                                                 
    286286Google  ;       *       ;       moderate        ;       n/a     All others                                                                               
Note: See TracChangeset for help on using the changeset viewer.