- 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 awhich
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 oftranslate_package()
.
translate_package()
works in batch mode, #224. Thanks @HenrikBengtsson for the report.check_cracked_messages()
recognizes named arguments (e.g.call.
tostop()
orappendLF
tomessage()
) 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
, notcharset=ASCII
, to prevent encoding issues (@michaelchirico, #299). Thanks @maelle for the report!
- {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 toTRUE
intranslate_package()
andget_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.
- Swedish (svenska)
- Skip tests on machines where
gettext
is unavailable, #187; also alter themsgfmt
command executed to create .mo files to skip options unavailable on Solaris, #218 - Faster parsing of src messages (e.g.
get_message_data()
for thebase
package reduced from 14 to 7 seconds), #119 - [New feature] New argument
max_translations
fortranslate_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 bytranslate_package()
), #203. Also a constructor for the associatedpo_metadata
class,po_metadata()
. See?po_metadata
. - [Bugfix]
get_message_data()
does a better job on files with unmatched parentheses inside preprocessor macros (#define
s) in C/C++ files, #199
- Landed on CRAN!