Kanta.PoFiles.POFileParser (kanta v0.5.1)
Shared logic for parsing PO files and extracting message data. Used by both sync (MessagesExtractor) and stale detection.
Summary
Functions
Extracts just the message keys for stale detection.
Extracts message keys for a single locale only.
Finds all PO files in the given base directory.
Parses all PO files and returns messages with metadata.
Functions
Extracts just the message keys for stale detection.
Returns a MapSet of tuples: {msgid, domain, context}
Arguments
base_path- Base directory to search for PO filesallowed_locales- Optional list of locale codes to filter by
Examples
iex> POFileParser.extract_message_keys("/path/to/priv/gettext")
#MapSet<[
{"Welcome", "default", "default"},
{"Hello %{name}", "default", "greetings"},
{"Error occurred", "errors", "default"}
]>
Extracts message keys for a single locale only.
Convenience wrapper around extract_message_keys/2 for per-locale detection.
Arguments
base_path- Base directory to search for PO fileslocale_code- Single locale code (e.g., "en", "it")
Examples
iex> POFileParser.extract_message_keys_for_locale("/path/to/priv/gettext", "en")
#MapSet<[
{"Welcome", "default", "default"},
{"Hello %{name}", "default", "greetings"}
]>
Finds all PO files in the given base directory.
Arguments
base_path- Base directory to search for PO files (e.g., "/path/to/priv/gettext" or "test/fixtures")allowed_locales- Optional list of locale codes to filter by (e.g., ["en", "pl"])
Returns
List of maps with keys:
:path- Full path to the PO file:locale- Locale code (e.g., "en", "pl"):domain- Domain name (e.g., "default", "errors")
Examples
iex> POFileParser.find_po_files("/path/to/priv/gettext")
[
%{path: "/path/to/priv/gettext/en/LC_MESSAGES/default.po", locale: "en", domain: "default"},
%{path: "/path/to/priv/gettext/pl/LC_MESSAGES/default.po", locale: "pl", domain: "default"}
]
iex> POFileParser.find_po_files("/path/to/priv/gettext", ["en"])
[
%{path: "/path/to/priv/gettext/en/LC_MESSAGES/default.po", locale: "en", domain: "default"}
]
Parses all PO files and returns messages with metadata.
Arguments
base_path- Base directory to search for PO filesallowed_locales- Optional list of locale codes to filter by
Returns
List of maps with keys:
:path- Full path to the PO file:locale- Locale code:domain- Domain name:messages- List ofExpo.Messagestructs
Examples
iex> POFileParser.parse_all_po_files("/path/to/priv/gettext")
[
%{
path: "/path/to/en/default.po",
locale: "en",
domain: "default",
messages: [%Expo.Message.Singular{...}, ...]
}
]