New features
- To encourage a more modular workflow,
translate_package() has been split into individual exported
functions. Thanks @hadley for the suggestion & design
review, in addition to the effort filing PRs to achieve this.
po_extract() extracts messages from package source code
to create template .pot files (@hadley, #243).
po_create() creates skeletal .po files for
a given language from the .pot template (@hadley, #235)
po_compile() converts .po translation
files into binary .mo files used for installation (@hadley, #234).
po_update() incorporates and merges source message
changes to existing .po files (@hadley, #235)
- Two new vignettes, “Translation
for package developers” and “Translation
for package translators” explain in some detail the process of
translation from two perspectives – that of the package developer and
that of the message translator.
check_potools_sys_reqs() (mostly intended for internal
use, but exported for testing) gains a which argument to
fine-tune which system requirements to check, #275 and
#288.
Thanks @hadley for the
suggestion and @LDalby
for early dev testing which emphasized the need for this.
- New
po_explain_plurals() helps de-mystify how to supply
plurals for different languages. For example,
po_explain_plurals("pl", 3) explains that “For Polish
(Polski), plural index 2 applies when n = 0, 5-21, 25-31, 35-41, …”, #278.
Thanks @hadley for the
suggestion to independently export this functionality which was already
used as part of translate_package().
Bug fixes
translate_package() works in batch mode, #224.
Thanks @HenrikBengtsson for the
report.
check_cracked_messages() recognizes named arguments
(e.g. call. to stop() or appendLF
to message()) and keeps them in the original call, #227.
Thanks @hadley for the
report.
- A test for non-GNU versions of
gettext has been
improved, #221.
Please report any issues here – I don’t have any good way of testing
non-GNU tools.
- .po files generated by {potools} will default to using
charset=UTF-8, not charset=ASCII, to prevent
encoding issues (@michaelchirico, #299).
Thanks @maelle for the
report!
Notes
- {potools} now has a site built by
pkgdown and
hosted on GitHub pages: https://michaelchirico.github.io/potools/.
Thanks @hadley for the
initial implementation.
- {potools} has a new hex logo featuring a potoo! Thanks to @hadley for coordinating and
@allisonhorst
for the drawing!
- The test suite now relies on the 3rd edition of
testthat, meaning a version requirement in the Suggested
dependency.
- The default value of
verbose has been changed to
TRUE in translate_package() and
get_message_data(). Verbosity has also been increased to
help detect the source of issues, #288.
Thanks for @LDalby for
reporting an unhelpful error.
- The package now contains Japanese translations of
potools itself to serve as an example. See po/R-ja.po. #241;
thanks @HenrikBengtsson for the
suggestion.
New
languages/locales supported out of the box:
- Skip tests on machines where
gettext is unavailable,
#187; also alter the msgfmt command executed to create .mo
files to skip options unavailable on Solaris, #218
- Faster parsing of src messages (e.g.
get_message_data()
for the base package reduced from 14 to 7 seconds),
#119
- [New feature] New argument
max_translations for
translate_package() to limit the number of translations
done, #188
- When adding metadata for a new language, added tolerance for
whitespace differences in specifying
plurals, #183
- [New feature]
get_message_data() skips over messages on
lines with comments # notranslate, and regions of lines
between matched pairs of comments # notranslate start and
# notranslate end, #10. Most useful for small fragmentary
strings that are untranslateable/not worth translating, and for strings
that are technically untranslateable (e.g., because they contain
\r).
- [New function]
write_po_file() to convert a message
database to a .po or .pot file manually
(previously this was handled internally by
translate_package()), #203. Also a constructor for the
associated po_metadata class, po_metadata().
See ?po_metadata.
- [Bugfix]
get_message_data() does a better job on files
with unmatched parentheses inside preprocessor macros
(#defines) in C/C++ files, #199