---
title: "R Can Use Your Help: Translating R Messages"
author: "Heather Turner and Saranjeet Kaur"
date: 2022-07-25
categories: ["External Contributions"]
tags: ["translation"]
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(collapse = TRUE)
```
If you use R you may have wondered if there are ways you can contribute to
making R better. An important feature of R that encourages its use around the
world is the support for localization. This enables R’s messages, warnings and
errors, as well as menu labels in the Windows and Mac OS GUIs, to be shown in
the user’s local language.
Localization relies on translations that are contributed and maintained by
volunteer [translation teams](https://developer.r-project.org/TranslationTeams.html).
We recently ran a series of [Collaboration Campfires](https://contributor.r-project.org/events/collaboration-campfires),
where we explored what motivates people to contribute translations, the current
status of translations in R and how people can get involved. In this post we
share the insights from those sessions.
# Why get involved in translation?
An obvious reason for helping to translate R messages is that it makes R more
accessible to non-English speakers, especially in communities where a
working knowledge of English is uncommon. If you are a package developer, it
is useful to learn about the translation infrastructure, because the same
infrastructure can be used to add translations to your own package(s). Indeed,
the same infrastructure is used by other open source projects. Contributing
translations to the R project is a good starting point for learning about and
contributing to the development of R more widely. As with any open source
contribution, there is the benefit of building your knowledge and your network
as you interact with other developers. It can also be a nice addition to your
CV/resume!
# Current status of translations in R
The translations of R messages are stored in PO files, a plain-text file format
for use with the GNU gettext software. The source code for each package in base
R has a `po` directory which contains the PO files. There are up to three PO
files for each package: one for messages contained in the R code, one for
messages contained in the C code, and for the base package only, one for text
displayed in the Windows GUI.
Therefore we can explore the current status of R by extracting the PO files
from the 14 packages in base R (some translation teams also provide translations
for the Recommended packages, Mac OS GUI, and the Windows installer, which we
don’t consider here). For each message, we can determine whether a translation
is available for a particular language and if so, whether it is up-to-date or
if the message has changed since it was translated, i.e. the translated message
is "fuzzy".
We can see that there are a few languages with near-complete, correct translations: French, Italian, Russian, and Lithuanian. Then there is a group of languages with slightly lower coverage and a higher proportion of fuzzy messages: German, Polish, Chinese (Traditional), Japanese, Chinese (Simplified) and Korean. There is a third group with only about a third of the messages translated: Norwegian (Nynorsk), Turkish, Danish and Spanish. Only the GUI messages have been translated into Persian. The standard English messages have been translated into British English for a few cases in the base and grDevices packages. Finally there is one message in standard English that adds information about the locale to the startup message in R.
The metadata in the PO files includes both the date that the English messages were last updated and the date the translation was last updated. The plot below represents the last translation date as a lag time in years from the last message update, for each PO file.
The last translation date was missing for some of the PO files, in particular, no dates were available for Italian. However, the plot shows a clear correspondence to the previous plot - the languages with higher translation coverage have been updated closer to when the English messages were last updated. The languages with poor coverage have not been updated for at least 5 years prior to the time the English messages were last updated. For Chinese (Simplified) most of the files have not been updated for at least 10 years.
For the languages with lower coverage, we can explore the choices translation teams have made regarding which messages to prioritize for translation. The plot below compares the coverage by package for the languages with lower coverage:
Norwegian and Spanish translations are only available for the base and graphics packages. Turkish translations cover a few more packages, including about half of the messages in the stats and stats4 packages. Brazilian Portuguese and Danish translations are available for all packages (there are no messages to translate in the datasets package), but for several packages the proportion of translated messages is very low (less than a quarter).
# How can you help?
Clearly there is a lot of scope for people to contribute new translations of messages, or to update translations that are no longer correct. The first step is to learn more about how translations are added to R packages. We recommend starting with the [Translating R to your Language](https://contributor.r-project.org/translating-r-to-your-language/) tutorial from useR! 2021 - you can watch the video and/or read the slides.
Once you have a basic understanding of the process, find the contact person for the language(s) you can contribute to on the [Translation Teams](https://developer.r-project.org/TranslationTeams.html) page. If your language is not there, or the team requires a new maintainer, post a message on the #core-translations channel of the community-run [R Contributors Slack](https://contributor.r-project.org/slack) or on the [R-Devel](https://stat.ethz.ch/mailman/listinfo/r-devel) mailing list to offer your help.
The maintainer or help channels should be able to tell you how to contribute for a specific language.
Some translation teams maintain translations on GitHub, e.g. [Italian](https://github.com/dmedri/R-italian-lang) and [French](https://github.com/phgrosjean/rfrench/). The Hungarian team is trialing a [Weblate](https://weblate.org/en-gb/) server that allows translations to be contributed via a browser. Several contributors involved in translation are active on the #core-translations channel of the R Contributors Slack, so that is a good place to ask any questions on how to get started or deal with any issues you encounter as you start contributing.
# Further Resources
There are number of works in progress that will provide additional support in future:
- [R translations lesson](https://github.com/r-devel/r-translations-lesson): a self-paced online lesson based on the Collaboration Campfire activities.
- [R translations dashboard](https://github.com/r-devel/translations): a [Google Summer of Code](https://github.com/rstats-gsoc/gsoc2022/wiki/Track-R-Translations-Status) project that will create a dashboard to monitor the status of translations in R.
- [R Development Guide](https://contributor.r-project.org/rdevguide/): a new chapter on contributing translations is planned as part of [Google Season of Docs 2022](https://github.com/rstats-gsod/gsod2022/wiki/GSOD-2022-Proposal).
# Acknowledgements
Thanks to the participants of the Collaboration Campfire “Explore R’s Process for Localization (Translation)” that provided ideas and draft visualizations for this blog post:
[Shimelis Abebe Tegegn](https://twitter.com/shume100),
[Iman Al Hasani](https://twitter.com/ImanAlhasani),
[Michael Blanks](https://www.linkedin.com/in/michaelblanks/),
[Michael Chirico](https://twitter.com/michael_chirico),
[Toby Dylan Hocking](https://tdhock.github.io/),
[Pawan Jangra](https://twitter.com/pawanjangra1198),
[Ella Kaye](https://twitter.com/ellamkaye),
[Piyush Kumar](https://twitter.com/kpiyush04),
[Beatriz Milz](https://twitter.com/beamilz),
[Kozo Nishida](https://twitter.com/kozo2),
[Lucy Njoki Njuki](https://twitter.com/lucy_njokinjuki),
[Riva Quiroga](https://twitter.com/rivaquiroga),
[Marcel Ramos](https://twitter.com/M2RuseR), and
[Ben Ubah](https://github.com/benubah).