From cd7d6e9e3d04a03dfea46ad62347c81e37e2f43c Mon Sep 17 00:00:00 2001 From: "Amir E. Aharoni" Date: Mon, 18 Feb 2013 11:11:46 +0530 Subject: [PATCH] Extend Russian grammar support Follow up Ic02bfb9ce88e93775036f3d15921cedca602237c Change-Id: I4c8714b19964deedfc7e7f802501387b96a9a310 --- resources/mediawiki.language/languages/ru.js | 29 ++++++++- .../mediawiki/mediawiki.language.test.js | 63 ++++++++++++++++--- 2 files changed, 82 insertions(+), 10 deletions(-) diff --git a/resources/mediawiki.language/languages/ru.js b/resources/mediawiki.language/languages/ru.js index b27dea43aa..1bc063262a 100644 --- a/resources/mediawiki.language/languages/ru.js +++ b/resources/mediawiki.language/languages/ru.js @@ -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; }; diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.language.test.js b/tests/qunit/suites/resources/mediawiki/mediawiki.language.test.js index 7cfa46a0cb..9ca434f1ec 100644 --- a/tests/qunit/suites/resources/mediawiki/mediawiki.language.test.js +++ b/tests/qunit/suites/resources/mediawiki/mediawiki.language.test.js @@ -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: [ { @@ -188,41 +190,88 @@ 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á', -- 2.20.1