ru-strings-bundle
Π‘ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΏΠ°Π΄Π΅ΠΆΠ°ΠΌ ΠΈ ΡΠΎΠΏΡΡΠΆΠ΅Π½ΠΈΠ΅ Ρ ΡΠΈΡΠ»ΠΎΠΌ Π² twig + ΡΠ΅ΡΠ²ΠΈΡ Π΄Π»Ρ Symfony2. ΠΠ»Ρ ΠΊΠ΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Redis., (*1)
ΠΡΠΈΠΌΠ΅Ρ
``` twig
{% set auto_count = 223 %}
{% set surface = 'Π±Π΅Π»ΡΠΉ ΡΠ½Π΅Π³' %}
ΠΡΠΎΠ΅Ρ
Π°Π»ΠΈ {{ auto_count }} {{ plural(auto_count, 'Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Π΅ΠΉ', 'Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Ρ', 'Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Ρ') }} ΠΏΠΎ {{ surface | inflect('datv') }}, (*2)
{# ΠΡΠΎΠ΅Ρ
Π°Π»ΠΈ 223 Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Ρ ΠΏΠΎ Π±Π΅Π»ΠΎΠΌΡ ΡΠ½Π΅Π³Ρ #}, (*3)
## Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°
``` bash
composer require it-blaster/ru-strings-bundle
ΠΠΎΠ±Π°Π²ΠΈΡΡ Π² AppKernel.php
``` php
<?php
// app/AppKernel.php
public function registerBundles()
{
$bundles = array(
// ...
new Etfostra\RuStringsBundle\EtfostraRuStringsBundle(),
);
}, (*4)
## ΠΠ°ΡΡΡΠΎΠΉΠΊΠ°
ΠΠΎΡΡΡΠΏΠ½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π² `config.yml`:
``` yaml
etfostra_ru_strings:
redis_cache_ttl: 2592000 #ΠΡΠ΅ΠΌΡ ΠΆΠΈΠ·Π½ΠΈ ΠΊΠ΅ΡΠ° Π² ΡΠ΅ΠΊΡΠ½Π΄Π°Ρ
pyphrasy_api_url: https://pyphrasy.herokuapp.com/inflect #API URL
ΠΡΠΈΠΌΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ
Π‘ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΏΠ°Π΄Π΅ΠΆΠ°ΠΌ
``` php
$inflector = $this->get('ru_strings.case');, (*5)
$inflector->inflect('Π±Π΅Π»ΡΠΉ ΡΠ½Π΅Π³', 'gent'); //Π±Π΅Π»ΠΎΠ³ΠΎ ΡΠ½Π΅Π³Π°
$inflector->inflect('Π±Π΅Π»ΡΠΉ ΡΠ½Π΅Π³', 'datv'); //Π±Π΅Π»ΠΎΠΌΡ ΡΠ½Π΅Π³Ρ
$inflector->inflect('Π±Π΅Π»ΡΠΉ ΡΠ½Π΅Π³', 'accs'); //Π±Π΅Π»ΡΠΉ ΡΠ½Π΅Π³
$inflector->inflect('Π±Π΅Π»ΡΠΉ ΡΠ½Π΅Π³', 'ablt'); //Π±Π΅Π»ΡΠΌ ΡΠ½Π΅Π³ΠΎΠΌ
$inflector->inflect('Π±Π΅Π»ΡΠΉ ΡΠ½Π΅Π³', 'loct'); //Π±Π΅Π»ΠΎΠΌ ΡΠ½Π΅Π³Π΅
$inflector->inflect('Π±Π΅Π»ΡΠΉ ΡΠ½Π΅Π³', 'voct'); //Π±Π΅Π»ΡΠΉ ΡΠ½Π΅Π³, (*6)
### Π‘ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΏΠ°Π΄Π΅ΠΆΠ°ΠΌ Π² Twig
``` twig
{{ 'Π±Π΅Π»ΡΠΉ ΡΠ½Π΅Π³' | inflect('gent') }} {# Π±Π΅Π»ΠΎΠ³ΠΎ ΡΠ½Π΅Π³Π° #}
{{ 'Π±Π΅Π»ΡΠΉ ΡΠ½Π΅Π³' | inflect('datv') }} {# Π±Π΅Π»ΠΎΠΌΡ ΡΠ½Π΅Π³Ρ #}
{{ 'Π±Π΅Π»ΡΠΉ ΡΠ½Π΅Π³' | inflect('accs') }} {# Π±Π΅Π»ΡΠΉ ΡΠ½Π΅Π³ #}
{{ 'Π±Π΅Π»ΡΠΉ ΡΠ½Π΅Π³' | inflect('ablt') }} {# Π±Π΅Π»ΡΠΌ ΡΠ½Π΅Π³ΠΎΠΌ #}
{{ 'Π±Π΅Π»ΡΠΉ ΡΠ½Π΅Π³' | inflect('loct') }} {# Π±Π΅Π»ΠΎΠΌ ΡΠ½Π΅Π³Π΅ #}
{{ 'Π±Π΅Π»ΡΠΉ ΡΠ½Π΅Π³' | inflect('voct') }} {# Π±Π΅Π»ΡΠΉ ΡΠ½Π΅Π³ #}
ΠΠΎΠ»Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΠΎΠΏΡΠΈΠΉ ΡΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΡ http://opencorpora.org/dict.php?act=gram, (*7)
Π‘ΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½ΠΈΠ΅ Ρ ΡΠΈΡΠ»ΠΎΠΌ
``` php
$pluralizer = $this->get('ru_strings.plural');, (*8)
$pluralizer->plural(101, 'Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Π΅ΠΉ', 'Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Ρ', 'Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Ρ'); //Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Ρ
$pluralizer->plural(102, 'Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Π΅ΠΉ', 'Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Ρ', 'Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Ρ'); //Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Ρ
$pluralizer->plural(100, 'Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Π΅ΠΉ', 'Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Ρ', 'Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Ρ'); //Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Π΅ΠΉ, (*9)
### Π‘ΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½ΠΈΠ΅ Ρ ΡΠΈΡΠ»ΠΎΠΌ Π² Twig
``` twig
{{ plural(101, 'Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Π΅ΠΉ', 'Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Ρ', 'Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Ρ') }} {# Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Ρ #}
{{ plural(102, 'Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Π΅ΠΉ', 'Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Ρ', 'Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Ρ') }} {# Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Ρ #}
{{ plural(100, 'Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Π΅ΠΉ', 'Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Ρ', 'Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Ρ') }} {# Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Π΅ΠΉ #}
Π‘ΠΏΠΈΡΠΎΠΊ ΡΠ΅ΡΠ½Π°ΡΠ½ΡΡ
ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² Π΄Π»Ρ Π΄ΡΡΠ³ΠΈΡ
ΡΠ·ΡΠΊΠΎΠ² http://www.gnu.org/software/gettext/manual/html_mono/gettext.html#Plural-forms, (*10)
ΠΠ΅ΡΠΎΠ΄ plural
Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΊΠ΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅., (*11)