Extend Russian grammar support
authorAmir E. Aharoni <amir.aharoni@mail.huji.ac.il>
Mon, 18 Feb 2013 05:41:46 +0000 (11:11 +0530)
committerAmir E. Aharoni <amir.aharoni@mail.huji.ac.il>
Mon, 18 Feb 2013 05:41:46 +0000 (11:11 +0530)
Follow up Ic02bfb9ce88e93775036f3d15921cedca602237c

Change-Id: I4c8714b19964deedfc7e7f802501387b96a9a310

resources/mediawiki.language/languages/ru.js
tests/qunit/suites/resources/mediawiki/mediawiki.language.test.js

index b27dea4..1bc0632 100644 (file)
@@ -2,16 +2,20 @@
  * Russian (Русский) language functions
  */
 
+// These tests were originally made for names of Wikimedia
+// websites, so they don't currently cover all the possible
+// cases.
+
 mediaWiki.language.convertGrammar = function ( word, form ) {
-       /*jshint noempty:false, onecase:true */
+       'use strict';
+
        var grammarForms = mediaWiki.language.getData( 'ru', 'grammarForms' );
        if ( grammarForms && grammarForms[form] ) {
                return grammarForms[form][word];
        }
        switch ( form ) {
                case 'genitive': // родительный падеж
-                       if ( (  word.substr( word.length - 4 ) === 'вики' ) || (  word.substr( word.length - 4 ) === 'Вики' ) ) {
-                       } else if ( word.substr( word.length - 1 ) === 'ь' ) {
+                       if ( word.substr( word.length - 1 ) === 'ь' ) {
                                word = word.substr(0, word.length - 1 ) + 'я';
                        } else if ( word.substr( word.length - 2 ) === 'ия' ) {
                                word = word.substr(0, word.length - 2 ) + 'ии';
@@ -21,10 +25,29 @@ mediaWiki.language.convertGrammar = function ( word, form ) {
                                word = word.substr(0, word.length - 2 ) + 'тей';
                        } else if ( word.substr( word.length - 2 ) === 'ды' ) {
                                word = word.substr(0, word.length - 2 ) + 'дов';
+                       } else if ( word.substr( word.length - 3 ) === 'ные' ) {
+                               word = word.substr(0, word.length - 3 ) + 'ных';
                        } else if ( word.substr( word.length - 3 ) === 'ник' ) {
                                word = word.substr(0, word.length - 3 ) + 'ника';
                        }
                        break;
+               case 'prepositional': // предложный падеж
+                       if ( word.substr( word.length - 1 ) === 'ь' ) {
+                               word = word.substr(0, word.length - 1 ) + 'е';
+                       } else if ( word.substr( word.length - 2 ) === 'ия' ) {
+                               word = word.substr(0, word.length - 2 ) + 'ии';
+                       } else if ( word.substr( word.length - 2 ) === 'ка' ) {
+                               word = word.substr(0, word.length - 2 ) + 'ке';
+                       } else if ( word.substr( word.length - 2 )  === 'ти' ) {
+                               word = word.substr(0, word.length - 2 ) + 'тях';
+                       } else if ( word.substr( word.length - 2 ) === 'ды' ) {
+                               word = word.substr(0, word.length - 2 ) + 'дах';
+                       } else if ( word.substr( word.length - 3 ) === 'ные' ) {
+                               word = word.substr(0, word.length - 3 ) + 'ных';
+                       } else if ( word.substr( word.length - 3 ) === 'ник' ) {
+                               word = word.substr(0, word.length - 3 ) + 'нике';
+                       }
+                       break;
        }
        return word;
 };
index 7cfa46a..9ca434f 100644 (file)
@@ -1,4 +1,5 @@
 ( function ( mw, $ ) {
+       'use strict';
 
        QUnit.module( 'mediawiki.language', QUnit.newMwEnvironment( {
                setup: function () {
@@ -32,6 +33,7 @@
                } );
        }
 
+       // These tests run only for the current UI language.
        var grammarTests = {
                bs: [
                        {
                                word: 'тесть',
                                grammarForm: 'genitive',
                                expected: 'тестя',
-                               description: 'Grammar test for genitive case'
+                               description: 'Grammar test for genitive case, тесть -> тестя'
                        },
                        {
                                word: 'привилегия',
                                grammarForm: 'genitive',
                                expected: 'привилегии',
-                               description: 'Grammar test for genitive case'
+                               description: 'Grammar test for genitive case, привилегия -> привилегии'
                        },
                        {
                                word: 'установка',
                                grammarForm: 'genitive',
                                expected: 'установки',
-                               description: 'Grammar test for genitive case'
+                               description: 'Grammar test for genitive case, установка -> установки'
                        },
                        {
                                word: 'похоти',
                                grammarForm: 'genitive',
                                expected: 'похотей',
-                               description: 'Grammar test for genitive case'
+                               description: 'Grammar test for genitive case, похоти -> похотей'
                        },
                        {
                                word: 'доводы',
                                grammarForm: 'genitive',
                                expected: 'доводов',
-                               description: 'Grammar test for genitive case'
+                               description: 'Grammar test for genitive case, доводы -> доводов'
                        },
                        {
                                word: 'песчаник',
                                grammarForm: 'genitive',
                                expected: 'песчаника',
-                               description: 'Grammar test for genitive case'
+                               description: 'Grammar test for genitive case, песчаник -> песчаника'
+                       },
+                       {
+                               word: 'данные',
+                               grammarForm: 'genitive',
+                               expected: 'данных',
+                               description: 'Grammar test for genitive case, данные -> данных'
+                       },
+                       {
+                               word: 'тесть',
+                               grammarForm: 'prepositional',
+                               expected: 'тесте',
+                               description: 'Grammar test for prepositional case, тесть -> тесте'
+                       },
+                       {
+                               word: 'привилегия',
+                               grammarForm: 'prepositional',
+                               expected: 'привилегии',
+                               description: 'Grammar test for prepositional case, привилегия -> привилегии'
+                       },
+                       {
+                               word: 'установка',
+                               grammarForm: 'prepositional',
+                               expected: 'установке',
+                               description: 'Grammar test for prepositional case, установка -> установке'
+                       },
+                       {
+                               word: 'похоти',
+                               grammarForm: 'prepositional',
+                               expected: 'похотях',
+                               description: 'Grammar test for prepositional case, похоти -> похотях'
+                       },
+                       {
+                               word: 'доводы',
+                               grammarForm: 'prepositional',
+                               expected: 'доводах',
+                               description: 'Grammar test for prepositional case, доводы -> доводах'
+                       },
+                       {
+                               word: 'песчаник',
+                               grammarForm: 'prepositional',
+                               expected: 'песчанике',
+                               description: 'Grammar test for prepositional case, песчаник -> песчанике'
+                       },
+                       {
+                               word: 'данные',
+                               grammarForm: 'prepositional',
+                               expected: 'данных',
+                               description: 'Grammar test for prepositional case, данные -> данных'
                        }
                ],
 
-
                hu: [
                        {
                                word: 'Wikipédiá',