README.md 6.48 KB
Newer Older
Andrea Vos's avatar
init  
Andrea Vos committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
# Avris Polonisator

An extension to [Avris Localisator](https://gitlab.com/Avris/Localisator)
and [Avris Stringer](https://gitlab.com/Avris/Stringer)
introducing support for the Polish language.

## Installation

    composer require avris/polonisator

## Usage

    $builder = (new LocalisatorBuilder())
        ->registerExtension(new LocalisatorExtension('pl'))
        ->registerExtension(new StringerExtension())
        ->registerExtension(new PolonisatorExtension());
        
    $stringer = $builder->build(Stringer::class);
    $polonisator = $builder->build(Polonisator::class);

`StringerTwig` and `PolonisatorTwig` can be registered as [Twig](https://twig.symfony.com/) extensions.

### decline

Pluralisation is not so straight-forward in Polish -- one can say
"zdobyłeś 1 punkt", "2 punkty" and "5 punktów".
**decline** takes care of choosing the right form based on a provided number:

	Zdobyłeś {{ points }} punkt{{ points|decline('','y','ów') }}

It also provides a translation selector:

    points: <polishDeclination> punkt|%count% punkty|%count% punktów

used like this:

    {{ 'points'|l({count: points}) }}

### vocative

    {{ user.firstName|vocative }}
    
This declines Polish first names into a vocative, without a need for a database with all the names (tested on over a 1000 names).

### getGender

**getGender** tries to guess a person's gender based on their name (unless explicitly provided in `$person->getGender()`).

    $polonisator->getGender($person); // returns either Stringer::MASCULINE or Stringer::FEMININE

It also provides a translation selector:

    said: <gender> powiedział|powiedziała

### genderify

**genderify** automatically adjusts some 2nd person expressions to match the recipients gender (useful for mailings).

    {% filter genderify(user.gender) %}
    <p>
        Drog{_I_A} {{ user.firstName|vocative|capitalize }}!<br/>
        Chcielibyśmy Cię poinformować, że zdobył{_ES_AS} {{ user.points }}
        {{ user.points|decline('punkt','punkty','punktów') }}!<br/>
    </p>
    <p>
        Pozdrawiamy,<br/>
        xyz
    </p>
    {% endfilter %}

Might return for some user:

> Drogi Tomku!
>
> Chcielibyśmy Cię poinformować, że zdobyłeś 932 punkty!
>
> Pozdrawiamy,
>
> xyz
  
Available tags:

 | Tag           | Male      | Female    |
 | ------------- | --------- | --------- |
 | {_A}          |           | a         |
 | {_I_A}        | i         | a         |
 | {_ES_AS}      | eś        | aś        |
 | {_Y_A}        | y         | a         |
 | {_AL_ELA}     | ął        | ęła       |
 | {_CHCIALBY}   | chciałby  | chciałaby |
 | {_POWINIEN}   | powinien  | powinna   |
 | {_MOGL}       | mógł      | mogła     |
 | {_WSZEDL}     | wszedł    | weszła    |
 | {_PAN_PANI_M} | Pan       | Pani      |
 | {_PAN_PANI_C} | Panu      | Pani      |
 | {_PAN_PANI_D} | Pana      | Pani      |
 | {_PAN_PANI_B} | Pana      | Panią     |
 | {_PAN_PANI_N} | Panem     | Panią     |
 | {_PAN_PANI_W} | Panie     | Pani      |

This list can be expanded / changed by passing a different one into `Genderify`'s constructor.

### numberInWords

See in [Avris Stringer](https://gitlab.com/Avris/Stringer)'s documentation.

Provides Polish translations, like:

	375 → trzysta siedemdziesiąt pięć
	-279 → minus dwieście siedemdziesiąt dziewięć
	146 → sto czterdzieści sześć
	10000000 → dziesięć milionów
	5371.18 → pięć tysięcy trzysta siedemdziesiąt jeden i osiemnaście setnych
	5678 → pięć i sześćset siedemdziesiąt osiem tysięcznych
	0.1 → jedna dziesiąta
	0.000908 → zero komma zero zero zero dziewięć zero osiem

### timeInWords

See in [Avris Stringer](https://gitlab.com/Avris/Stringer)'s documentation.

Provides Polish translations, like:

`$stringer->timeInWords($time, TimeInWords::MODE_NICE)` (default):

	14:15:16 → kwadrans po czternastej.
	05:13:32 → trzynaście po piątej.
	19:49:20 → za jedenaście dwudziesta.
	11:53:11 → za siedem południe.

`$stringer->timeInWords($time, TimeInWords::MODE_SHORT)`:

	14:15:16 → czternasta piętnaście.
	05:13:32 → piąta trzynaście.
	19:49:20 → dziewiętnasta czterdzieści dziewięć.
	11:53:11 → jedenasta pięćdziesiąt trzy.

`$stringer->timeInWords($time, TimeInWords::MODE_LONG)`:

	14:15:16 → czternasta piętnaście i szesnaście sekund.
	05:13:32 → piąta trzynaście i trzydzieści dwie sekundy.
	19:49:20 → dziewiętnasta czterdzieści dziewięć i dwadzieścia sekund.
	11:53:11 → jedenasta pięćdziesiąt trzy i jedenaście sekund.
    
### timeDiff

See in [Avris Stringer](https://gitlab.com/Avris/Stringer)'s documentation.

Provides Polish translations, like: "pięć lat temu", "dwadzieścia pięć dni temu", "półtorej godziny temu",
"minutę temu", "teraz", "za trzy dni".

### phone

See in [Avris Stringer](https://gitlab.com/Avris/Stringer)'s documentation.

Provides formatting of `+48` numbers.

## Framework integration

### Micrus

In your `App\App:registerModules` register the Localisator, Stringer and Polonisator module:

    yield new \Avris\Localisator\LocalisatorModule;
    yield new \Avris\Stringer\StringerModule;
    yield new \Avris\Polonisator\PolonisatorModule;
    
And it should work out of the box: `Avris\Stringer\Stringer` and `Avris\Polonisator\Polonisator` available in the container
and the Twig extensions registered.
    
### Symfony

Example `servies.yaml` config:

    Avris\Localisator\LocalisatorBuilder:
        calls:
            - [registerExtension, ['@Avris\Localisator\LocalisatorExtension']]
            - [registerExtension, ['@Avris\Polonisator\PolonisatorExtension']]
            - [registerExtension, ['@Avris\Stringer\StringerExtension']]
    Avris\Localisator\LocalisatorExtension:
        arguments:
            $locale: '%locale%'
    Avris\Polonisator\PolonisatorExtension: ~
    Avris\Stringer\StringerExtension: ~

    Avris\Localisator\LocalisatorInterface:
        factory: ['@Avris\Localisator\LocalisatorBuilder', build]
        arguments: ['Avris\Localisator\LocalisatorInterface']
    Avris\Localisator\LocalisatorTwig: ~

    Avris\Stringer\Stringer:
        factory: ['@Avris\Localisator\LocalisatorBuilder', build]
        arguments: ['Avris\Stringer\Stringer']
    Avris\Stringer\StringerTwig: ~


    Avris\Polonisator\Polonisator:
        factory: ['@Avris\Localisator\LocalisatorBuilder', build]
        arguments: ['Avris\Polonisator\Polonisator']
    Avris\Polonisator\PolonisatorTwig: ~

### Copyright ###

* **Author:** Andre Prusinowski [(Avris.it)](https://avris.it)
* **Licence:** [MIT](https://mit.avris.it)