diff --git a/server/core/opds/AuthorPage.js b/server/core/opds/AuthorPage.js index 9ad4965..3d14936 100644 --- a/server/core/opds/AuthorPage.js +++ b/server/core/opds/AuthorPage.js @@ -1,4 +1,5 @@ const BasePage = require('./BasePage'); +const utils = require('../utils'); class AuthorPage extends BasePage { constructor(config) { @@ -172,7 +173,7 @@ class AuthorPage extends BasePage { if (rec.count) { e.content = { '*ATTRS': {type: 'text'}, - '*TEXT': `${rec.count} авторов`, + '*TEXT': `${rec.count} автор${utils.wordEnding(rec.count, 0)}`, }; } diff --git a/server/core/opds/BasePage.js b/server/core/opds/BasePage.js index 32d52df..e0c19a9 100644 --- a/server/core/opds/BasePage.js +++ b/server/core/opds/BasePage.js @@ -196,7 +196,7 @@ class BasePage { } if (!query.others && others.length) - result.unshift({id: 'other', title: otherTitle, q: '___others'}); + result.unshift({id: 'other', title: otherTitle, q: '___others', count: others.length}); return (!query.others ? result : others); } diff --git a/server/core/opds/SeriesPage.js b/server/core/opds/SeriesPage.js index 06a1996..66097e0 100644 --- a/server/core/opds/SeriesPage.js +++ b/server/core/opds/SeriesPage.js @@ -1,4 +1,5 @@ const BasePage = require('./BasePage'); +const utils = require('../utils'); class SeriesPage extends BasePage { constructor(config) { @@ -105,7 +106,7 @@ class SeriesPage extends BasePage { if (rec.count) { e.content = { '*ATTRS': {type: 'text'}, - '*TEXT': `${rec.count} серий`, + '*TEXT': `${rec.count} сери${utils.wordEnding(rec.count, 1)}`, }; } diff --git a/server/core/opds/TitlePage.js b/server/core/opds/TitlePage.js index 08fc40f..f4511f3 100644 --- a/server/core/opds/TitlePage.js +++ b/server/core/opds/TitlePage.js @@ -1,4 +1,5 @@ const BasePage = require('./BasePage'); +const utils = require('../utils'); class TitlePage extends BasePage { constructor(config) { @@ -75,7 +76,7 @@ class TitlePage extends BasePage { if (rec.count) { e.content = { '*ATTRS': {type: 'text'}, - '*TEXT': `${rec.count} названий`, + '*TEXT': `${rec.count} назван${utils.wordEnding(rec.count, 3)}`, }; } diff --git a/server/core/utils.js b/server/core/utils.js index 7516c5c..98ff85b 100644 --- a/server/core/utils.js +++ b/server/core/utils.js @@ -174,6 +174,25 @@ function makeValidFileNameOrEmpty(fileName) { } } +function wordEnding(num, type = 0) { + const endings = [ + ['ов', '', 'а', 'а', 'а', 'ов', 'ов', 'ов', 'ов', 'ов'],//0 + ['й', 'я', 'и', 'и', 'и', 'й', 'й', 'й', 'й', 'й'],//1 + ['о', '', 'о', 'о', 'о', 'о', 'о', 'о', 'о', 'о'],//2 + ['ий', 'ие', 'ия', 'ия', 'ия', 'ий', 'ий', 'ий', 'ий', 'ий'],//3 + ['о', 'а', 'о', 'о', 'о', 'о', 'о', 'о', 'о', 'о'],//4 + ['ок', 'ка', 'ки', 'ки', 'ки', 'ок', 'ок', 'ок', 'ок', 'ок'],//5 + ['ых', 'ое', 'ых', 'ых', 'ых', 'ых', 'ых', 'ых', 'ых', 'ых'],//6 + ['о', 'о', 'о', 'о', 'о', 'о', 'о', 'о', 'о', 'о'],//7 + ]; + const deci = num % 100; + if (deci > 10 && deci < 20) { + return endings[type][0]; + } else { + return endings[type][num % 10]; + } +} + module.exports = { sleep, processLoop, @@ -193,4 +212,5 @@ module.exports = { toUnixPath, makeValidFileName, makeValidFileNameOrEmpty, + wordEnding, }; \ No newline at end of file