emagedev / morpher
Magento extension to inflect russian word with API of website morpher.ru
Installs: 199
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Open Issues: 0
Type:magento-module
pkg:composer/emagedev/morpher
Requires
Requires (Dev)
- ecomdev/ecomdev_phpunit: *
This package is not auto-updated.
Last update: 2021-04-13 20:56:05 UTC
README
Склонятор для Magento
Этот модуль позволит склонять слова в зависимости от контекста с помощью онлайн сервиса morpher.ru. Первый запрос осуществляется через REST API, дальнейшие - из кэша в базе данных, что позволяет не нагружать сервис лишними запросами (они ограничены по бесплатной и платной подпискам).
Может быть полезно для склонения количеств товаров или имен пользователей, ну и для чего-нибудь ещё.
Все передаваемые в модуль слова и фразы должны быть в именительном падеже
Использование с числами
# Mage::helper('morpher')->inflectWordByNumber($number, $phrase [, $keepNumber = false [, $translate = false ]])
Функция поможет склонять слова рядом с числами, например, для количества товаров в каталоге или корзине.
$numberопределяет число, относительно которого нужно склонить слово$phraseопределяет фразу или слово для склонения$keepNumberопределяет, стоит ли оставлять число перед словом или фразой$translateопределяет, необходимо ли переводить слово или фразу перед склонением, и каким модулем (может быть строкой, напримерyourmoule, или логическим значением)
Пример:
Mage::helper('morpher')->inflectWordByNumber(5, 'item', true, 'catalog');
Вернет:
5 товаров
Mage::helper('morpher')->inflectWordByNumber(1, 'piece', false, 'yourmodule');
Вернет:
1 штука
В вашем модуле thing должно быть переведено как штука
Склонение имён
# Mage::helper('morpher')->inflectName($name, $inflection [, $flags = array()])
Функция поможет склонять имена ваших пользователей.
$nameимя пользователя$inflectionсклонение$flagsопределяет дополнительные флаги для более точного склонения
API неплохо различает имена, но если есть возможность, следует указать род в флагах или использовать следующие методы:
inflectMaleName($name, $inflection [, $flags = array()])для мужскихinflectFemaleName($name, $inflection [, $flags = array()])для женских
Пример:
Mage::helper('morpher')->inflectMaleName('Ломоносов, Михаил Васильевич', Emagedev_Morpher_Helper_Data::DATIVE);
Вернет:
Ломоносову, Михаилу Васильевичу
Mage::helper('morpher')->inflectFemaleName('Любовь Эдуардовна Соболь', Emagedev_Morpher_Helper_Data::GENITIVE);
Вернет:
Любови Эдуардовны Соболь
Общий случай
# Mage::helper('morpher')->inflectWord($phrase, $inflection [, $multi = false [, $flags = array() [, $translate = false ]]])
Функция склоняет слово с заданными параметрами.
$phraseфраза или слово для склонения$inflectionсклонение$multiопределяет множественное ли число$flagsопределяет дополнительные флаги для более точного склонения$translateопределяет, необходимо ли переводить слово или фразу перед склонением, и каким модулем (может быть строкой, напримерyourmoule, или логическим значением)
Авторизация на morpher.ru
Авторизация необходима для расширения лимита на склонение слов.
Ваш логин и пароль вы можете ввести в панели управления в конфигурации.
Настройки расположены в группе API (в стандартном переводе СЕРВИСЫ) во
вкладке API сайта morpher.ru.
Шпаргалка
# Склонения
Если ваш кодстайл не позволяет напрямую использовать кириллицу в коде, для склонений есть алиасы,
записанные как константы в хелпере Emagedev_Morpher_Helper_Data.
| Падеж | Символ | Алиас |
|---|---|---|
| Именительный | И | Emagedev_Morpher_Helper_Data::NOMINATIVE |
| Родительный | Р | Emagedev_Morpher_Helper_Data::GENITIVE |
| Дательный | Д | Emagedev_Morpher_Helper_Data::ACCUSATIVE |
| Винительный | В | Emagedev_Morpher_Helper_Data::DATIVE |
| Творительный | Т | Emagedev_Morpher_Helper_Data::INSTRUMENTAL |
| Предложный | П | Emagedev_Morpher_Helper_Data::PREPOSITIONAL |
| Предложный (о) | П | Emagedev_Morpher_Helper_Data::PREPOSITIONAL_WITH_PREFIX |
| Местный (см. API) | М | Emagedev_Morpher_Helper_Data::LOCATION |
# Флаги
Нужны для повышения качества склонения. Есть слова, которые могут склоняться по-разному, например:
- Фамилия Резник склоняется у мужчин и не склоняется у женщин;
- Ростов в творительном падеже будет Ростовым, если это фамилия, и Ростовом, если это город;
- тестер в винительном падеже будет тестера, если это человек, и тестер, если имеется в виду прибор.
Методы inflectName, inflectMaleName, inflectFemaleName используют необходимые флаги по умолчанию
| Флаг | Описание | Алиас |
|---|---|---|
| Feminine | И | Emagedev_Morpher_Helper_Data::FLAG_FEMININE |
| Masculine | Р | Emagedev_Morpher_Helper_Data::FLAG_MASCULINE |
| Animate | Д | Emagedev_Morpher_Helper_Data::FLAG_ANIMATE |
| Inanimate | В | Emagedev_Morpher_Helper_Data::FLAG_INANIMATE |
| Common | Т | Emagedev_Morpher_Helper_Data::FLAG_COMMON |
| Name | П | Emagedev_Morpher_Helper_Data::FLAG_NAME |
Юнит тесты
Основная логика покрыта, для запуска нужен модуль EcomDev_PHPUnit
To Do:
- Покрыть тестами логику имен
- Добавить кейс для предложно-падежных форм для мест (теги <где>, <куда> и <откуда>)
- Добавить кейс для прилагательных
N.B. Не забывайте модифицировать ключи кэша для корректной работы с числами.
N.B. Так как функции модуля - косметические, модуль как правило не поднимает ошибок. Если что-то работает некорректно, стоит посмотреть в логи.
Описание API тут: http://morpher.ru/ws3/
Все совпадения с реальными лицами в примере случайны.