View Source Expo.PO (expo v1.1.0)
File handling for PO (.po) and POT (.pot) files.
Summary
Types
Parsing option.
Functions
Dumps a Expo.Messages struct as iodata.
Parses the contents of a file into a Expo.Messages struct.
Parses the contents of a file into a Expo.Messages struct, raising if there
are any errors.
Parses the given string into a Expo.Messages struct.
Parses string into a Expo.Messages struct, raising an exception if there are
any errors.
Types
Parsing option.
:file(Path.t/0) - path to use in error messages when usingparse_string/2. If not present, errors don't have a path.:strip_meta(boolean/0) - include only messages (no comments and other metadata) from the.pofile to reduce memory usage when meta information is not needed. Defaults tofalse.
Functions
@spec compose(Expo.Messages.t()) :: iodata()
Dumps a Expo.Messages struct as iodata.
This function dumps a Expo.Messages struct (representing a PO file) as iodata,
which can later be written to a file or converted to a string with
IO.iodata_to_binary/1.
Examples
After running the following code:
iodata =
Expo.PO.compose(%Expo.Messages{
headers: ["Last-Translator: Jane Doe"],
messages: [
%Expo.Message.Singular{msgid: ["foo"], msgstr: ["bar"], comments: "A comment"}
]
})
File.write!("/tmp/test.po", iodata)the /tmp/test.po file would look like this:
msgid ""
msgstr ""
"Last-Translator: Jane Doe"
# A comment
msgid "foo"
msgstr "bar"
@spec parse_file(Path.t(), [parse_option()]) :: {:ok, Expo.Messages.t()} | {:error, Expo.PO.SyntaxError.t() | Expo.PO.DuplicateMessagesError.t() | File.posix()}
Parses the contents of a file into a Expo.Messages struct.
This function works similarly to parse_string/1 except that it takes a file
and parses the contents of that file. It can return:
{:ok, po}if the parsing is successful{:error, error}if there is an error with the contents of the.pofile (for example, a syntax error);erroris an exception struct{:error, reason}if there is an error with reading the file (this error is one of the errors that can be returned byFile.read/1)
Examples
{:ok, po} = Expo.PO.parse_file("messages.po")
po.file
#=> "messages.po"
Expo.PO.parse_file("nonexistent")
#=> {:error, :enoent}
@spec parse_file!(Path.t(), [parse_option()]) :: Expo.Messages.t()
Parses the contents of a file into a Expo.Messages struct, raising if there
are any errors.
Works like parse_file/1, except that it raises an exception
if there are issues with the contents of the file or with reading the file.
Examples
Expo.PO.parse_file!("nonexistent.po")
#=> ** (File.Error) could not parse "nonexistent.po": no such file or directory
@spec parse_string(String.t(), [parse_option()]) :: {:ok, Expo.Messages.t()} | {:error, Expo.PO.SyntaxError.t() | Expo.PO.DuplicateMessagesError.t()}
Parses the given string into a Expo.Messages struct.
It returns {:ok, messages} if there are no errors, otherwise
{:error, error} where error is an exception struct.
Examples
iex> {:ok, po} = Expo.PO.parse_string("""
...> msgid "foo"
...> msgstr "bar"
...> """)
iex> [message] = po.messages
iex> message.msgid
["foo"]
iex> message.msgstr
["bar"]
iex> po.headers
[]
iex> Expo.PO.parse_string("foo")
{:error, %Expo.PO.SyntaxError{line: 1, reason: "unknown keyword 'foo'"}}
@spec parse_string!(String.t(), [parse_option()]) :: Expo.Messages.t()
Parses string into a Expo.Messages struct, raising an exception if there are
any errors.
Works exactly like parse_string/1, but returns a Expo.Messages struct
if there are no errors or raises an exception if there are.
Examples
iex> po = Expo.PO.parse_string!("""
...> msgid "foo"
...> msgstr "bar"
...> """)
iex> [message] = po.messages
iex> message.msgid
["foo"]
iex> message.msgstr
["bar"]
iex> po.headers
[]
iex> Expo.PO.parse_string!("msgid")
** (Expo.PO.SyntaxError) 1: no space after 'msgid'