Packages
gettext
0.12.0
1.0.2
1.0.1
retired
1.0.0
0.26.2
0.26.1
0.26.0
retired
0.25.0
0.24.0
0.23.1
0.23.0
0.22.3
0.22.2
0.22.1
0.22.0
0.21.0
0.20.0
0.19.1
0.19.0
0.18.2
0.18.1
0.18.0
0.17.4
0.17.3
0.17.2
0.17.1
0.17.0
0.16.1
0.16.0
0.15.0
0.14.1
0.14.0
0.13.1
0.13.0
0.12.2
0.12.1
0.12.0
0.11.0
0.10.0
0.9.0
0.8.0
0.7.0
0.6.1
0.6.0
0.5.0
Internationalization and localization through gettext
Current section
Files
Jump to
Current section
Files
src/gettext_po_parser.yrl
Nonterminals grammar translations translation pluralizations pluralization
strings comments.
Terminals str msgid msgid_plural msgstr plural_form comment.
Rootsymbol grammar.
grammar ->
translations : '$1'.
% A series of translations. It can be just comments (which are discarded and can
% be empty anyways) or comments followed by a translation followed by other
% translations; in the latter case, comments are attached to the translation
% that follows them.
translations ->
comments : [].
translations ->
comments translation translations : [add_comments_to_translation('$2', '$1')|'$3'].
translation ->
msgid strings msgstr strings : {translation, #{
comments => [],
msgid => '$2',
msgstr => '$4',
po_source_line => extract_line('$1')
}}.
translation ->
msgid strings msgid_plural strings pluralizations : {plural_translation, #{
comments => [],
msgid => '$2',
msgid_plural => '$4',
msgstr => plural_forms_map_from_list('$5'),
po_source_line => extract_line('$1')
}}.
pluralizations ->
pluralization : ['$1'].
pluralizations ->
pluralization pluralizations : ['$1'|'$2'].
pluralization ->
msgstr plural_form strings : {'$2', '$3'}.
strings ->
str : [extract_simple_token('$1')].
strings ->
str strings : [extract_simple_token('$1')|'$2'].
comments ->
'$empty' : [].
comments ->
comment comments : [extract_simple_token('$1')|'$2'].
Erlang code.
extract_simple_token({_Token, _Line, Value}) ->
Value.
extract_line({_Token, Line}) ->
Line.
plural_forms_map_from_list(Pluralizations) ->
Tuples = lists:map(fun extract_plural_form/1, Pluralizations),
maps:from_list(Tuples).
extract_plural_form({{plural_form, _Line, PluralForm}, String}) ->
{PluralForm, String}.
add_comments_to_translation({TranslationType, Translation}, Comments) ->
{TranslationType, maps:put(comments, Comments, Translation)}.