blob: e13e3e0174bc5ef6352ba2bbf58900a04d78c3a6 [file] [log] [blame]
% File src/library/tools/man/checkRdaFiles.Rd
% Part of the R package, https://www.R-project.org
% Copyright 2012-2014 R Core Team
% Distributed under GPL 2 or later
\name{checkPoFiles}
\alias{checkPoFile}
\alias{checkPoFiles}
\title{Check Translation Files for Inconsistent Format Strings}
\description{
These functions compare formats embedded in English messages
with translated strings to check for consistency. \code{checkPoFile}
checks one file, while \code{checkPoFiles} checks all files for a specified
language.
}
\usage{
checkPoFile(f, strictPlural = FALSE)
checkPoFiles(language, dir = ".")
}
\arguments{
\item{f}{a character string giving a single filepath.}
\item{strictPlural}{whether to compare formats of singular and plural
forms in a strict way.}
\item{language}{a character string giving a language code.}
\item{dir}{a path to a directory in which to check files.}
}
\details{
Part of \R's internationalization depends on translations of messages
in \file{.po} files. In these files an \sQuote{English} message taken
from the \R sources is followed by a translation into another
language. Many of these messages are format strings for C or \R
\code{\link{sprintf}} and related functions. In these cases, the
translation must give a compatible format or an error will be
generated when the message is displayed.
The rules for compatibility differ between C and \R in several ways. C
supports several conversions not supported by \R, namely \code{c},
\code{u}, \code{p}, \code{n}. It is allowed in C's \code{sprintf()}
function to have more arguments than are needed by the format string,
but in \R the counts must match exactly. \R requires types of
arguments to match, whereas C will do the display whether it makes
sense or not.
These functions compromise on the testing as follows. The additional
formats allowed in C are accepted, and all differences in argument
type or count are reported. As a consequence some reported
differences are not errors.
If the \code{strictPlural} argument is \code{TRUE}, then argument
lists must agree exactly between singular and plural forms of messages; if
\code{FALSE}, then translations only need to match one or the other
of the two forms. When \code{checkPoFiles} calls \code{checkPoFile},
the \code{strictPlural} argument is set to \code{TRUE} for files with
names starting \file{R-}, and to \code{FALSE} otherwise.
Items marked as \sQuote{fuzzy} in the \file{.po} file are not
processed (as they are ignored by the message compiler).
If a difference is found, the translated string is checked for variant
percent signs (e.g., the wide percent sign \code{"\uFF05"}). Such signs
will not be recognized as format specifiers, and are likely to be
errors.
}
\value{
Both functions return an object of S3 class \code{"check_po_files"}. A
\code{print} method is defined for this class to display a report on
the differences.
}
\references{
See the GNU gettext manual for the \file{.po} file format:\cr
\url{https://www.gnu.org/software/gettext/manual/gettext.html}.
}
\author{
Duncan Murdoch
}
\seealso{
\code{\link{update_pkg_po}()} which calls \code{checkPoFile()};
\code{\link{xgettext}}, \code{\link{sprintf}}.
}
\examples{
\dontrun{
checkPoFiles("de", "/path/to/R/src/directory")
}
}
\keyword{ utilities }