From b75150228451f76ba7208b48831965d5ab5edb30 Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Tue, 31 Dec 2019 14:36:52 +0800 Subject: [PATCH 01/28] convert cat(" messages to use gettextf? for better portability --- .dev/CRAN_Release.cmd | 8 +- R/between.R | 8 +- R/bmerge.R | 48 +- R/cedta.R | 2 +- R/data.table.R | 92 ++-- R/devel.R | 2 +- R/fmelt.R | 2 +- R/foverlaps.R | 4 +- R/fread.R | 4 +- R/fwrite.R | 2 +- R/last.R | 24 +- R/print.data.table.R | 10 +- R/setkey.R | 8 +- R/tables.R | 4 +- R/test.data.table.R | 44 +- inst/po/en@quot/LC_MESSAGES/R-data.table.mo | Bin 89010 -> 104420 bytes inst/po/zh_CN/LC_MESSAGES/R-data.table.mo | Bin 87131 -> 86929 bytes po/R-data.table.pot | 333 +++++++++++++- po/R-zh_CN.po | 485 +++++++++++++++++++- 19 files changed, 922 insertions(+), 158 deletions(-) diff --git a/.dev/CRAN_Release.cmd b/.dev/CRAN_Release.cmd index 6355b1356f..736bd66be1 100644 --- a/.dev/CRAN_Release.cmd +++ b/.dev/CRAN_Release.cmd @@ -19,7 +19,7 @@ for MSG in error warning DTWARN DTPRINT Rprintf STOP Error; do for SRC_FILE in src/*.c; # no inplace -i in default mac sed - do sed -E "s/$MSG[(]("[^"]*")/$MSG(_(\1)/g" $SRC_FILE > out; + do sed -E "s/$MSG[(](\"[^\"]*\")/$MSG(_(\1)/g" $SRC_FILE > out; mv out $SRC_FILE; done done @@ -42,7 +42,11 @@ xgettext --keyword=_ -o data.table.pot *.c cd .. ## (b) Update R template file: src/R-data.table.pot -## much easier, once the update_pkg_po bug is fixed +## Messages in cat() are not captured unless they're returned via +## gettext, gettextf, or ngettext; this finds cat(["'] instances +## (as opposed to cat(gettext(["'] instances) and wraps them +## in gettext. Some manual inspection is required as this approach +## is over-eager (e.g. cat("\n") -> cat(gettext("\n")) is unnecessary) R --no-save ## a bug fix in R still hadn't made the 2019-12-12 release, ## so run the following to source the corrected function manually diff --git a/R/between.R b/R/between.R index 4e358c3310..5c67e65268 100644 --- a/R/between.R +++ b/R/between.R @@ -44,7 +44,7 @@ between = function(x, lower, upper, incbounds=TRUE, NAbounds=TRUE, check=FALSE) # length(upper) can be 1 or length(x) independently of lower .Call(Cbetween, x, lower, upper, incbounds, NAbounds, check) } else { - if (isTRUE(getOption("datatable.verbose"))) cat("optimised between not available for this data type, fallback to slow R routine\n") + if (isTRUE(getOption("datatable.verbose"))) cat(gettext("optimised between not available for this data type, fallback to slow R routine\n", domain="R-data.table")) if (isTRUE(NAbounds) && (anyNA(lower) || anyNA(upper))) stop("Not yet implemented NAbounds=TRUE for this non-numeric and non-character type") if (check && any(lower>upper, na.rm=TRUE)) stop("Some lower>upper for this non-numeric and non-character type") if (incbounds) x>=lower & x<=upper @@ -78,7 +78,7 @@ inrange = function(x,lower,upper,incbounds=TRUE) { subject = setDT(list(l=lower, u=upper)) ops = if (incbounds) c(4L, 2L) else c(5L, 3L) # >=,<= and >,< verbose = isTRUE(getOption("datatable.verbose")) - if (verbose) {last.started.at=proc.time();cat("forderv(query) took ... ");flush.console()} + if (verbose) {last.started.at=proc.time();cat(gettext("forderv(query) took ... ", domain="R-data.table"));flush.console()} if (verbose) {cat(timetaken(last.started.at),"\n"); flush.console()} ans = bmerge(shallow(subject), query, 1L:2L, c(1L,1L), 0, c(FALSE, TRUE), 0L, "all", ops, verbose) # fix for #1819, turn on verbose messages @@ -86,9 +86,9 @@ inrange = function(x,lower,upper,incbounds=TRUE) { options(datatable.verbose=FALSE) setDT(ans[c("starts", "lens")], key=c("starts", "lens")) options(datatable.verbose=verbose) - if (verbose) {last.started.at=proc.time();cat("Generating final logical vector ... ");flush.console()} + if (verbose) {last.started.at=proc.time();cat(gettext("Generating final logical vector ... ", domain="R-data.table"));flush.console()} .Call(Cinrange, idx <- vector("logical", length(x)), xo, ans[["starts"]], ans[["lens"]]) - if (verbose) {cat("done in",timetaken(last.started.at),"\n"); flush.console} + if (verbose) {cat(gettext("done in", domain="R-data.table"),timetaken(last.started.at),"\n"); flush.console} idx } diff --git a/R/bmerge.R b/R/bmerge.R index 3d6ab028f3..171b097040 100644 --- a/R/bmerge.R +++ b/R/bmerge.R @@ -49,17 +49,17 @@ bmerge = function(i, x, icols, xcols, roll, rollends, nomatch, mult, ops, verbos if (roll!=0.0 && a==length(icols)) stop("Attempting roll join on factor column when joining x.",names(x)[xc]," to i.",names(i)[ic],". Only integer, double or character columns may be roll joined.") if (xclass=="factor" && iclass=="factor") { - if (verbose) cat("Matching i.",names(i)[ic]," factor levels to x.",names(x)[xc]," factor levels.\n",sep="") + if (verbose) cat(gettextf("Matching i.%s to factor levels to x.%s factor levels.\n", names(i)[ic], names(x)[xc], domain="R-data.table")) set(i, j=ic, value=chmatch(levels(i[[ic]]), levels(x[[xc]]), nomatch=0L)[i[[ic]]]) # nomatch=0L otherwise a level that is missing would match to NA values next } else { if (xclass=="character") { - if (verbose) cat("Coercing factor column i.",names(i)[ic]," to type character to match type of x.",names(x)[xc],".\n",sep="") + if (verbose) cat(gettextf("Coercing factor column i.%s to type character to match type of x.%s.\n", names(i)[ic], names(x)[xc], domain="R-data.table")) set(i, j=ic, value=val<-as.character(i[[ic]])) set(callersi, j=ic, value=val) # factor in i joining to character in x will return character and not keep x's factor; e.g. for antaresRead #3581 next } else if (iclass=="character") { - if (verbose) cat("Matching character column i.",names(i)[ic]," to factor levels in x.",names(x)[xc],".\n",sep="") + if (verbose) cat(gettextf("Matching character column i.%s to factor levels in x.%s.\n", names(i)[ic], names(x)[xc], domain="R-data.table")) newvalue = chmatch(i[[ic]], levels(x[[xc]]), nomatch=0L) if (anyNA(i[[ic]])) newvalue[is.na(i[[ic]])] = NA_integer_ # NA_character_ should match to NA in factor, #3809 set(i, j=ic, value=newvalue) @@ -69,19 +69,19 @@ bmerge = function(i, x, icols, xcols, roll, rollends, nomatch, mult, ops, verbos stop("Incompatible join types: x.", names(x)[xc], " (",xclass,") and i.", names(i)[ic], " (",iclass,"). Factor columns must join to factor or character columns.") } if (xclass == iclass) { - if (verbose) cat("i.",names(i)[ic]," has same type (",xclass,") as x.",names(x)[xc],". No coercion needed.\n", sep="") + if (verbose) cat(gettextf("i.%s has same type (%s) as x.%s. No coercion needed.\n", names(i)[ic], xclass, names(x)[xc], domain="R-data.table")) next } if (xclass=="character" || iclass=="character" || xclass=="logical" || iclass=="logical" || xclass=="factor" || iclass=="factor") { if (anyNA(i[[ic]]) && allNA(i[[ic]])) { - if (verbose) cat("Coercing all-NA i.",names(i)[ic]," (",iclass,") to type ",xclass," to match type of x.",names(x)[xc],".\n",sep="") + if (verbose) cat(gettextf("Coercing all-NA i.%s (%s) to type %s to match type of x.%s.\n", names(i)[ic], iclass, xclass, names(x)[xc], domain="R-data.table")) set(i, j=ic, value=match.fun(paste0("as.", xclass))(i[[ic]])) next } else if (anyNA(x[[xc]]) && allNA(x[[xc]])) { - if (verbose) cat("Coercing all-NA x.",names(x)[xc]," (",xclass,") to type ",iclass," to match type of i.",names(i)[ic],".\n",sep="") + if (verbose) cat(gettextf("Coercing all-NA x.%s (%s) to type %s to match type of i.%s.\n", names(x)[xc], xclass, iclass, names(i)[ic], domain="R-data.table")) set(x, j=xc, value=match.fun(paste0("as.", iclass))(x[[xc]])) next } @@ -91,7 +91,7 @@ bmerge = function(i, x, icols, xcols, roll, rollends, nomatch, mult, ops, verbos nm = paste0(c("i.","x."), c(names(i)[ic], names(x)[xc])) if (xclass=="integer64") { w=i; wc=ic; wclass=iclass; } else { w=x; wc=xc; wclass=xclass; nm=rev(nm) } # w is which to coerce if (wclass=="integer" || (wclass=="double" && !isReallyReal(w[[wc]]))) { - if (verbose) cat("Coercing ",wclass," column ", nm[1L], if(wclass=="double")" (which contains no fractions)"," to type integer64 to match type of ", nm[2L],".\n",sep="") + if (verbose) cat(gettextf("Coercing %s column %s%s to type integer64 to match type of %s.\n", wclass, nm[1L], if (wclass=="double") " (which contains no fractions)" else "", nm[2L], domain="R-data.table")) set(w, j=wc, value=bit64::as.integer64(w[[wc]])) } else stop("Incompatible join types: ", nm[2L], " is type integer64 but ", nm[1L], " is type double and contains fractions") } else { @@ -100,17 +100,17 @@ bmerge = function(i, x, icols, xcols, roll, rollends, nomatch, mult, ops, verbos if (!isReallyReal(i[[ic]])) { # common case of ad hoc user-typed integers missing L postfix joining to correct integer keys # we've always coerced to int and returned int, for convenience. - if (verbose) cat("Coercing double column i.",names(i)[ic]," (which contains no fractions) to type integer to match type of x.",names(x)[xc],".\n",sep="") + if (verbose) cat(gettextf("Coercing double column i.%s (which contains no fractions) to type integer to match type of x.%s", names(i)[ic], names(x)[xc], domain="R-data.table")) val = as.integer(i[[ic]]) if (!is.null(attributes(i[[ic]]))) attributes(val) = attributes(i[[ic]]) # to retain Date for example; 3679 set(i, j=ic, value=val) set(callersi, j=ic, value=val) # change the shallow copy of i up in [.data.table to reflect in the result, too. } else { - if (verbose) cat("Coercing integer column x.",names(x)[xc]," to type double to match type of i.",names(i)[ic]," which contains fractions.\n",sep="") + if (verbose) cat(gettextf("Coercing integer column x.%s to type double to match type of i.%s which contains fractions.\n", names(x)[xc], names(i)[ic], domain="R-data.table")) set(x, j=xc, value=as.double(x[[xc]])) } } else { - if (verbose) cat("Coercing integer column i.",names(i)[ic]," to type double for join to match type of x.",names(x)[xc],".\n",sep="") + if (verbose) cat(gettextf("Coercing integer column i.%s to type double for join to match type of x.%s.\n", names(i)[ic], names(x)[xc], domain="R-data.table")) set(i, j=ic, value=as.double(i[[ic]])) } } @@ -126,17 +126,17 @@ bmerge = function(i, x, icols, xcols, roll, rollends, nomatch, mult, ops, verbos # equi join. use existing key (#1825) or existing secondary index (#1439) if (identical(xcols, head(chmatch(key(x), names(x)), length(xcols)))) { xo = integer(0L) - if (verbose) cat("on= matches existing key, using key\n") + if (verbose) cat(gettext("on= matches existing key, using key\n", domain="R-data.table")) } else { xo = NULL if (isTRUE(getOption("datatable.use.index"))) { xo = getindex(x, names(x)[xcols]) - if (verbose && !is.null(xo)) cat("on= matches existing index, using index\n") + if (verbose && !is.null(xo)) cat(gettext("on= matches existing index, using index\n", domain="R-data.table")) } if (is.null(xo)) { if (verbose) {last.started.at=proc.time(); flush.console()} xo = forderv(x, by = xcols) - if (verbose) {cat("Calculated ad hoc index in",timetaken(last.started.at),"\n"); flush.console()} + if (verbose) {cat(gettextf("Calculated ad hoc index in %s\n", timetaken(last.started.at), domain="R-data.table")); flush.console()} # TODO: use setindex() instead, so it's cached for future reuse } } @@ -147,9 +147,9 @@ bmerge = function(i, x, icols, xcols, roll, rollends, nomatch, mult, ops, verbos # non-equi operators present.. investigate groups.. nqgrp = integer(0L) nqmaxgrp = 1L - if (verbose) cat("Non-equi join operators detected ... \n") + if (verbose) cat(gettext("Non-equi join operators detected ... \n", domain="R-data.table")) if (roll != FALSE) stop("roll is not implemented for non-equi joins yet.") - if (verbose) {last.started.at=proc.time();cat(" forder took ... ");flush.console()} + if (verbose) {last.started.at=proc.time();cat(gettext(" forder took ... ", domain="R-data.table"));flush.console()} # TODO: could check/reuse secondary indices, but we need 'starts' attribute as well! xo = forderv(x, xcols, retGrp=TRUE) if (verbose) {cat(timetaken(last.started.at),"\n"); flush.console()} @@ -158,28 +158,28 @@ bmerge = function(i, x, icols, xcols, roll, rollends, nomatch, mult, ops, verbos if (length(resetcols)) { # TODO: can we get around having to reorder twice here? # or at least reuse previous order? - if (verbose) {last.started.at=proc.time();cat(" Generating group lengths ... ");flush.console()} + if (verbose) {last.started.at=proc.time();cat(gettext(" Generating group lengths ... ", domain="R-data.table"));flush.console()} resetlen = attr(forderv(x, resetcols, retGrp=TRUE), 'starts', exact=TRUE) resetlen = .Call(Cuniqlengths, resetlen, nrow(x)) - if (verbose) {cat("done in",timetaken(last.started.at),"\n"); flush.console()} + if (verbose) {cat(gettext("done in", domain="R-data.table"),timetaken(last.started.at),"\n"); flush.console()} } else resetlen = integer(0L) - if (verbose) {last.started.at=proc.time();cat(" Generating non-equi group ids ... ");flush.console()} + if (verbose) {last.started.at=proc.time();cat(gettext(" Generating non-equi group ids ... ", domain="R-data.table"));flush.console()} nqgrp = .Call(Cnestedid, x, xcols[non_equi:length(xcols)], xo, xg, resetlen, mult) - if (verbose) {cat("done in",timetaken(last.started.at),"\n"); flush.console()} + if (verbose) {cat(gettext("done in", domain="R-data.table"),timetaken(last.started.at),"\n"); flush.console()} if (length(nqgrp)) nqmaxgrp = max(nqgrp) # fix for #1986, when 'x' is 0-row table max(.) returns -Inf. if (nqmaxgrp > 1L) { # got some non-equi join work to do if ("_nqgrp_" %in% names(x)) stop("Column name '_nqgrp_' is reserved for non-equi joins.") - if (verbose) {last.started.at=proc.time();cat(" Recomputing forder with non-equi ids ... ");flush.console()} + if (verbose) {last.started.at=proc.time();cat(gettext(" Recomputing forder with non-equi ids ... ", domain="R-data.table"));flush.console()} set(nqx<-shallow(x), j="_nqgrp_", value=nqgrp) xo = forderv(nqx, c(ncol(nqx), xcols)) - if (verbose) {cat("done in",timetaken(last.started.at),"\n"); flush.console()} + if (verbose) {cat(gettext("done in", domain="R-data.table"),timetaken(last.started.at),"\n"); flush.console()} } else nqgrp = integer(0L) - if (verbose) cat(" Found", nqmaxgrp, "non-equi group(s) ...\n") + if (verbose) cat(gettext(" Found %d non-equi group(s) ...\n", nqmaxgrp, domain="R-data.table")) } - if (verbose) {last.started.at=proc.time();cat("Starting bmerge ...\n");flush.console()} + if (verbose) {last.started.at=proc.time();cat(gettext("Starting bmerge ...\n", domain="R-data.table"));flush.console()} ans = .Call(Cbmerge, i, x, as.integer(icols), as.integer(xcols), io, xo, roll, rollends, nomatch, mult, ops, nqgrp, nqmaxgrp) - if (verbose) {cat("bmerge done in",timetaken(last.started.at),"\n"); flush.console()} + if (verbose) {cat(gettext("bmerge done in", domain="R-data.table"),timetaken(last.started.at),"\n"); flush.console()} # TO DO: xo could be moved inside Cbmerge ans$xo = xo # for further use by [.data.table diff --git a/R/cedta.R b/R/cedta.R index 262db0a105..3f6c894fbf 100644 --- a/R/cedta.R +++ b/R/cedta.R @@ -40,7 +40,7 @@ cedta = function(n=2L) { tryCatch("data.table" %chin% get(".Depends",paste("package",nsname,sep=":"),inherits=FALSE),error=function(e)FALSE) # both ns$.Depends and get(.Depends,ns) are not sufficient if (!ans && getOption("datatable.verbose")) { # nocov start - cat("cedta decided '",nsname,"' wasn't data.table aware. Here is call stack with [[1L]] applied:\n",sep="") + cat(gettext("cedta decided '%s' wasn't data.table aware. Here is call stack with [[1L]] applied:\n", nsname, domain="R-data.table")) print(sapply(sys.calls(), "[[", 1L)) # nocov end # so we can trace the namespace name that may need to be added (very unusually) diff --git a/R/data.table.R b/R/data.table.R index 8cde3e3aee..ac36066cbe 100644 --- a/R/data.table.R +++ b/R/data.table.R @@ -414,7 +414,7 @@ replace_dot_alias = function(e) { if (verbose) { which_cols_msg = if (len_common_names == length(x)) " all 'x' columns" else paste(":", brackify(common_names)) - cat("Joining but 'x' has no key, natural join using", which_cols_msg, "\n", sep = "") + cat(gettext("Joining but 'x' has no key, natural join using", domain="R-data.table"), which_cols_msg, "\n", sep = "") } on = common_names } @@ -439,10 +439,10 @@ replace_dot_alias = function(e) { # Implementation for not-join along with by=.EACHI, #604 if (notjoin && (byjoin || mult != "all")) { # mult != "all" needed for #1571 notjoin = FALSE - if (verbose) {last.started.at=proc.time();cat("not-join called with 'by=.EACHI'; Replacing !i with i=setdiff_(x,i) ...");flush.console()} + if (verbose) {last.started.at=proc.time();cat(gettext("not-join called with 'by=.EACHI'; Replacing !i with i=setdiff_(x,i) ...", domain="R-data.table"));flush.console()} orignames = copy(names(i)) i = setdiff_(x, i, rightcols, leftcols) # part of #547 - if (verbose) {cat("done in",timetaken(last.started.at),"\n"); flush.console()} + if (verbose) {cat(gettext("done in", domain="R-data.table"),timetaken(last.started.at),"\n"); flush.console()} setnames(i, orignames[leftcols]) setattr(i, 'sorted', names(i)) # since 'x' has key set, this'll always be sorted } @@ -470,7 +470,7 @@ replace_dot_alias = function(e) { if (!byjoin || nqbyjoin) { # Really, `anyDuplicated` in base is AWESOME! # allow.cartesian shouldn't error if a) not-join, b) 'i' has no duplicates - if (verbose) {last.started.at=proc.time();cat("Constructing irows for '!byjoin || nqbyjoin' ... ");flush.console()} + if (verbose) {last.started.at=proc.time();cat(gettext("Constructing irows for '!byjoin || nqbyjoin' ... ", domain="R-data.table"));flush.console()} irows = if (allLen1) f__ else vecseq(f__,len__, if (allow.cartesian || notjoin || # #698. When notjoin=TRUE, ignore allow.cartesian. Rows in answer will never be > nrow(x). @@ -509,7 +509,7 @@ replace_dot_alias = function(e) { if (length(xo) && length(irows)) { irows = xo[irows] # TO DO: fsort here? if (mult=="all" && !allGrp1) { # following #1991 fix, !allGrp1 will always be TRUE. TODO: revisit. - if (verbose) {last.started.at=proc.time();cat("Reorder irows for 'mult==\"all\" && !allGrp1' ... ");flush.console()} + if (verbose) {last.started.at=proc.time();cat(gettext("Reorder irows for 'mult==\"all\" && !allGrp1' ... ", domain="R-data.table"));flush.console()} irows = setorder(setDT(list(indices=rep.int(indices__, len__), irows=irows)))[["irows"]] if (verbose) {cat(timetaken(last.started.at),"\n"); flush.console()} } @@ -521,13 +521,13 @@ replace_dot_alias = function(e) { ## restore original order. This is a very expensive operation. ## benchmarks have shown that starting with 1e6 irows, a tweak can significantly reduce time ## (see #2366) - if (verbose) {last.started.at=proc.time()[3L];cat("Reordering", length(irows), "rows after bmerge done in ... ");flush.console()} + if (verbose) {last.started.at=proc.time();cat(gettextf("Reordering %d rows after bmerge done in ... ", length(irows), domain="R-data.table"));flush.console()} if(length(irows) < 1e6){ irows = fsort(irows, internal=TRUE) ## internally, fsort on integer falls back to forderv } else { irows = as.integer(fsort(as.numeric(irows))) ## nocov; parallelized for numeric, but overhead of type conversion } - if (verbose) {cat(round(proc.time()[3L]-last.started.at,3L),"secs\n");flush.console()} + if (verbose) {cat(timetaken(last.started.at), "\n");flush.console()} } ## make sure, all columns are taken from x and not from i. ## This is done by simply telling data.table to continue as if there was a simple subset @@ -573,9 +573,9 @@ replace_dot_alias = function(e) { if (notjoin) { if (byjoin || !is.integer(irows) || is.na(nomatch)) stop("Internal error: notjoin but byjoin or !integer or nomatch==NA") # nocov irows = irows[irows!=0L] - if (verbose) {last.started.at=proc.time()[3L];cat("Inverting irows for notjoin done in ... ");flush.console()} + if (verbose) {last.started.at=proc.time();cat(gettext("Inverting irows for notjoin done in ... ", domain="R-data.table"));flush.console()} i = irows = if (length(irows)) seq_len(nrow(x))[-irows] else NULL # NULL meaning all rows i.e. seq_len(nrow(x)) - if (verbose) cat(round(proc.time()[3L]-last.started.at, 3L), "sec\n") + if (verbose) cat(timetaken(last.started.at), "\n") leftcols = integer() # proceed as if row subset from now on, length(leftcols) is switched on later rightcols = integer() # Doing this once here, helps speed later when repeatedly subsetting each column. R's [irows] would do this for each @@ -755,7 +755,7 @@ replace_dot_alias = function(e) { if (!is.na(w)) { byindex = indices(x)[w] if (!length(getindex(x, byindex))) { - if (verbose) cat("by index '", byindex, "' but that index has 0 length. Ignoring.\n", sep="") + if (verbose) cat(gettext("by index '%s' but that index has 0 length. Ignoring.\n", byindex, domain="R-data.table")) byindex=FALSE } } @@ -778,10 +778,10 @@ replace_dot_alias = function(e) { # TO DO: Make xss directly, rather than recursive call. if (!is.na(nomatch)) irows = irows[irows!=0L] # TO DO: can be removed now we have CisSortedSubset if (length(allbyvars)) { ############### TO DO TO DO TO DO ############### - if (verbose) cat("i clause present and columns used in by detected, only these subset:",paste(allbyvars,collapse=","),"\n") + if (verbose) cat(gettext("i clause present and columns used in by detected, only these subset:", domain="R-data.table"),paste(allbyvars,collapse=","),"\n") xss = x[irows,allbyvars,with=FALSE,nomatch=nomatch,mult=mult,roll=roll,rollends=rollends] } else { - if (verbose) cat("i clause present but columns used in by not detected. Having to subset all columns before evaluating 'by': '",deparse(by),"'\n",sep="") + if (verbose) cat(gettext("i clause present but columns used in by not detected. Having to subset all columns before evaluating 'by': '", domain="R-data.table"),deparse(by),"'\n",sep="") xss = x[irows,nomatch=nomatch,mult=mult,roll=roll,rollends=rollends] } if (is.call(bysub) && length(bysub) == 3L && bysub[[1L]] == ":") { @@ -839,8 +839,7 @@ replace_dot_alias = function(e) { if (length(byvars) > 1L && tt %chin% all.vars(jsub, FALSE)) { bynames[jj] = deparse(bysubl[[jj+1L]]) if (verbose) - cat("by-expression '", bynames[jj], "' is not named, and the auto-generated name '", tt, - "' clashed with variable(s) in j. Therefore assigning the entire by-expression as name.\n", sep="") + cat(gettextf("by-expression '%s' is not named, and the auto-generated name '%s' clashed with variable(s) in j. Therefore assigning the entire by-expression as name.\n", bynames[jj], tt, domain="R-data.table")) } else bynames[jj] = tt # if user doesn't like this inferred name, user has to use by=list() to name the column @@ -979,7 +978,7 @@ replace_dot_alias = function(e) { if (!missing(.SDcols)) warning("This j doesn't use .SD but .SDcols has been supplied. Ignoring .SDcols. See ?data.table.") allcols = c(names_x, xdotprefix, names_i, idotprefix) ansvars = sdvars = setdiff(intersect(av, allcols), bynames) - if (verbose) cat("Detected that j uses these columns:",if (!length(ansvars)) "" else paste(ansvars,collapse=","),"\n") + if (verbose) cat(gettext("Detected that j uses these columns:", domain="R-data.table"),if (!length(ansvars)) "" else paste(ansvars,collapse=","),"\n") # using a few named columns will be faster # Consider: DT[,max(diff(date)),by=list(month=month(date))] # and: DT[,lapply(.SD,sum),by=month(date)] @@ -992,7 +991,7 @@ replace_dot_alias = function(e) { # added 'mget' - fix for #994 if (any(c("get", "mget") %chin% av)) { if (verbose) { - cat("'(m)get' found in j. ansvars being set to all columns. Use .SDcols or a single j=eval(macro) instead. Both will detect the columns used which is important for efficiency.\nOld:", paste(ansvars,collapse=","),"\n") + cat(gettext("'(m)get' found in j. ansvars being set to all columns. Use .SDcols or a single j=eval(macro) instead. Both will detect the columns used which is important for efficiency.\nOld:", domain="R-data.table"), paste(ansvars,collapse=","),"\n") # get('varname') is too difficult to detect which columns are used in general # eval(macro) column names are detected via the if jsub[[1]]==eval switch earlier above. } @@ -1008,7 +1007,7 @@ replace_dot_alias = function(e) { ansvars = setdiff(allcols, bynames) # fix for bug #5443 non_sdvars = setdiff(ansvars, sdvars) ansvals = chmatch(ansvars, names_x) - if (verbose) cat("New:",paste(ansvars,collapse=","),"\n") + if (verbose) cat(gettext("New:", domain="R-data.table"),paste(ansvars,collapse=","),"\n") } lhs = NULL @@ -1064,8 +1063,7 @@ replace_dot_alias = function(e) { # fix errors in their RHS when called on empty edge cases, even when the result won't be # used anyway (so it would be annoying to have to fix it.) if (verbose) { - cat("No rows match i. No new columns to add so not evaluating RHS of :=\n") - cat("Assigning to 0 row subset of",nrow(x),"rows\n") + cat(gettextf("No rows match i. No new columns to add so not evaluating RHS of :=\nAssigning to 0 row subset of %d rows\n", nrow(x), domain="R-data.table")) } .Call(Cassign, x, irows, NULL, NULL, NULL) # only purpose is to write 0 to .Last.updated .global$print = address(x) @@ -1087,9 +1085,9 @@ replace_dot_alias = function(e) { # i.e. reallocate at the size as if the new columns were added followed by setalloccol(). name = substitute(x) if (is.name(name) && ok && verbose) { # && NAMED(x)>0 (TO DO) # ok here includes -1 (loaded from disk) - cat("Growing vector of column pointers from truelength ", truelength(x), " to ", n, ". A shallow copy has been taken, see ?setalloccol. Only a potential issue if two variables point to the same data (we can't yet detect that well) and if not you can safely ignore this. To avoid this message you could setalloccol() first, deep copy first using copy(), wrap with suppressWarnings() or increase the 'datatable.alloccol' option.\n") + cat(gettextf("Growing vector of column pointers from truelength %d to %d. A shallow copy has been taken, see ?setalloccol. Only a potential issue if two variables point to the same data (we can't yet detect that well) and if not you can safely ignore this. To avoid this message you could setalloccol() first, deep copy first using copy(), wrap with suppressWarnings() or increase the 'datatable.alloccol' option.\n", truelength(x), n, domain="R-data.table")) # #1729 -- copying to the wrong environment here can cause some confusion - if (ok == -1L) cat("Note that the shallow copy will assign to the environment from which := was called. That means for example that if := was called within a function, the original table may be unaffected.\n") + if (ok == -1L) cat(gettext("Note that the shallow copy will assign to the environment from which := was called. That means for example that if := was called within a function, the original table may be unaffected.\n", domain="R-data.table")) # Verbosity should not issue warnings, so cat rather than warning. # TO DO: Add option 'datatable.pedantic' to turn on warnings like this. @@ -1356,7 +1354,7 @@ replace_dot_alias = function(e) { SDenv$`-.POSIXt` = function(e1, e2) { if (inherits(e2, 'POSIXt')) { if (verbose && !exists('done_units_report', parent.frame())) { - cat('\nNote: forcing units="secs" on implicit difftime by group; call difftime explicitly to choose custom units') + cat(gettext('\nNote: forcing units="secs" on implicit difftime by group; call difftime explicitly to choose custom units', domain="R-data.table")) assign('done_units_report', TRUE, parent.frame()) } return(difftime(e1, e2, units='secs')) @@ -1392,7 +1390,7 @@ replace_dot_alias = function(e) { if (length(byval) && length(byval[[1L]])) { if (!bysameorder && isFALSE(byindex)) { - if (verbose) {last.started.at=proc.time();cat("Finding groups using forderv ... ");flush.console()} + if (verbose) {last.started.at=proc.time();cat(gettext("Finding groups using forderv ... ", domain="R-data.table"));flush.console()} o__ = forderv(byval, sort=keyby, retGrp=TRUE) # The sort= argument is called sortGroups at C level. It's primarily for saving the sort of unique strings at # C level for efficiency when by= not keyby=. Other types also retain appearance order, but at byte level to @@ -1406,7 +1404,7 @@ replace_dot_alias = function(e) { if (verbose) { cat(timetaken(last.started.at),"\n") last.started.at=proc.time() - cat("Finding group sizes from the positions (can be avoided to save RAM) ... ") + cat(gettext("Finding group sizes from the positions (can be avoided to save RAM) ... ", domain="R-data.table")) flush.console() # for windows } f__ = attr(o__, "starts", exact=TRUE) @@ -1414,7 +1412,7 @@ replace_dot_alias = function(e) { if (verbose) {cat(timetaken(last.started.at),"\n"); flush.console()} if (!bysameorder && !keyby) { # TO DO: lower this into forder.c - if (verbose) {last.started.at=proc.time();cat("Getting back original order ... ");flush.console()} + if (verbose) {last.started.at=proc.time();cat(gettext("Getting back original order ... ", domain="R-data.table"));flush.console()} firstofeachgroup = o__[f__] if (length(origorder <- forderv(firstofeachgroup))) { f__ = f__[origorder] @@ -1426,11 +1424,11 @@ replace_dot_alias = function(e) { } else { if (verbose) last.started.at=proc.time(); if (bysameorder) { - if (verbose) {cat("Finding groups using uniqlist on key ... ");flush.console()} + if (verbose) {cat(gettext("Finding groups using uniqlist on key ... ", domain="R-data.table"));flush.console()} f__ = uniqlist(byval) } else { if (!is.character(byindex) || length(byindex)!=1L) stop("Internal error: byindex not the index name") # nocov - if (verbose) {cat("Finding groups using uniqlist on index '", byindex, "' ... ", sep="");flush.console()} + if (verbose) {cat(gettextf("Finding groups using uniqlist on index '%s' ... ", byindex, domain="R-data.table"));flush.console()} o__ = getindex(x, byindex) if (is.null(o__)) stop("Internal error: byindex not found") # nocov f__ = uniqlist(byval, order=o__) @@ -1438,7 +1436,7 @@ replace_dot_alias = function(e) { if (verbose) { cat(timetaken(last.started.at),"\n") last.started.at=proc.time() - cat("Finding group sizes from the positions (can be avoided to save RAM) ... ") + cat(gettext("Finding group sizes from the positions (can be avoided to save RAM) ... ", domain="R-data.table")) flush.console() # for windows } len__ = uniqlengths(f__, xnrow) @@ -1622,9 +1620,9 @@ replace_dot_alias = function(e) { } if (verbose) { if (!identical(oldjsub, jsub)) - cat("lapply optimization changed j from '",deparse(oldjsub),"' to '",deparse(jsub,width.cutoff=200L, nlines=1L),"'\n",sep="") + cat(gettextf("lapply optimization changed j from '%s' to '%s'\n", deparse(oldjsub), deparse(jsub,width.cutoff=200L, nlines=1L), domain="R-data.table")) else - cat("lapply optimization is on, j unchanged as '",deparse(jsub,width.cutoff=200L, nlines=1L),"'\n",sep="") + cat(gettextf("lapply optimization is on, j unchanged as '%s'\n", deparse(jsub,width.cutoff=200L, nlines=1L), domain="R-data.table")) } dotN = function(x) is.name(x) && x==".N" # For #5760. TODO: Rprof() showed dotN() may be the culprit if iterated (#1470)?; avoid the == which converts each x to character? # FR #971, GForce kicks in on all subsets, no joins yet. Although joins could work with @@ -1634,7 +1632,7 @@ replace_dot_alias = function(e) { GForce = FALSE if ( (is.name(jsub) && jsub == ".N") || (is.call(jsub) && length(jsub)==2L && jsub[[1L]]== "list" && jsub[[2L]] == ".N") ) { GForce = TRUE - if (verbose) cat("GForce optimized j to '",deparse(jsub, width.cutoff=200L, nlines=1L),"'\n",sep="") + if (verbose) cat(gettext("GForce optimized j to '", domain="R-data.table"),deparse(jsub, width.cutoff=200L, nlines=1L),"'\n",sep="") } } else { # Apply GForce @@ -1668,8 +1666,8 @@ replace_dot_alias = function(e) { jsub[[1L]] = as.name(paste0("g", jsub[[1L]])) if (length(jsub)==3L) jsub[[3L]] = eval(jsub[[3L]], parent.frame()) # tests 1187.3 & 1187.5 } - if (verbose) cat("GForce optimized j to '",deparse(jsub, width.cutoff=200L, nlines=1L),"'\n",sep="") - } else if (verbose) cat("GForce is on, left j unchanged\n"); + if (verbose) cat(gettext("GForce optimized j to '", domain="R-data.table"),deparse(jsub, width.cutoff=200L, nlines=1L),"'\n",sep="") + } else if (verbose) cat(gettext("GForce is on, left j unchanged\n", domain="R-data.table")); } } if (!GForce && !is.name(jsub)) { @@ -1695,9 +1693,9 @@ replace_dot_alias = function(e) { } if (verbose) { if (!identical(oldjsub, jsub)) - cat("Old mean optimization changed j from '",deparse(oldjsub),"' to '",deparse(jsub, width.cutoff=200L, nlines=1L),"'\n",sep="") + cat(gettextf("Old mean optimization changed j from '%s' to '%s'\n", deparse(oldjsub), deparse(jsub, width.cutoff=200L, nlines=1L), domain="R-data.table")) else - cat("Old mean optimization is on, left j unchanged.\n") + cat(gettext("Old mean optimization is on, left j unchanged.\n", domain="R-data.table")) } assign("Cfastmean", Cfastmean, SDenv) # Old comments still here for now ... @@ -1707,8 +1705,8 @@ replace_dot_alias = function(e) { # when fastmean can do trim. } } else if (verbose) { - if (getOption("datatable.optimize")<1L) cat("All optimizations are turned off\n") - else cat("Optimization is on but left j unchanged (single plain symbol): '",deparse(jsub, width.cutoff=200L, nlines=1L),"'\n",sep="") + if (getOption("datatable.optimize")<1L) cat(gettext("All optimizations are turned off\n", domain="R-data.table")) + else cat(gettextf("Optimization is on but left j unchanged (single plain symbol): '%s'\n", deparse(jsub, width.cutoff=200L, nlines=1L), domain="R-data.table")) } if (byjoin) { groups = i @@ -1737,7 +1735,7 @@ replace_dot_alias = function(e) { # for consistency of empty case in test 184 f__=len__=0L } - if (verbose) {last.started.at=proc.time();cat("Making each group and running j (GForce ",GForce,") ... ",sep="");flush.console()} + if (verbose) {last.started.at=proc.time();cat(gettextf("Making each group and running j (GForce %s) ... ", GForce, domain="R-data.table"));flush.console()} if (GForce) { thisEnv = new.env() # not parent=parent.frame() so that gsum is found for (ii in ansvars) assign(ii, x[[ii]], thisEnv) @@ -1771,7 +1769,7 @@ replace_dot_alias = function(e) { cnames = as.character(bysubl)[-1L] cnames = gsub('^`|`$', '', cnames) # the wrapping backticks that were added above can be removed now, #3378 if (all(cnames %chin% names_x)) { - if (verbose) {last.started.at=proc.time();cat("setkey() after the := with keyby= ... ");flush.console()} + if (verbose) {last.started.at=proc.time();cat(gettext("setkey() after the := with keyby= ... ", domain="R-data.table"));flush.console()} setkeyv(x,cnames) # TO DO: setkey before grouping to get memcpy benefit. if (verbose) {cat(timetaken(last.started.at),"\n"); flush.console()} } @@ -1798,7 +1796,7 @@ replace_dot_alias = function(e) { setnames(ans,seq_along(bynames),bynames) # TO DO: reinvestigate bynames flowing from dogroups here and simplify } if (byjoin && keyby && !bysameorder) { - if (verbose) {last.started.at=proc.time();cat("setkey() afterwards for keyby=.EACHI ... ");flush.console()} + if (verbose) {last.started.at=proc.time();cat(gettext("setkey() afterwards for keyby=.EACHI ... ", domain="R-data.table"));flush.console()} setkeyv(ans,names(ans)[seq_along(byval)]) if (verbose) {cat(timetaken(last.started.at),"\n"); flush.console()} } else if (keyby || (haskey(x) && bysameorder && (byjoin || (length(allbyvars) && identical(allbyvars,head(key(x),length(allbyvars))))))) { @@ -2298,7 +2296,7 @@ split.data.table = function(x, f, drop = FALSE, by, sorted = FALSE, keep.by = TR dtq[[".SDcols"]] = if (keep.by) names(x) else setdiff(names(x), if (flatten) by else .by) if (join) dtq[["on"]] = if (flatten) by else .by dtq = as.call(dtq) - if (isTRUE(verbose)) cat("Processing split.data.table with: ", deparse(dtq, width.cutoff=500L), "\n", sep="") + if (isTRUE(verbose)) cat(gettext("Processing split.data.table with: ", domain="R-data.table"), deparse(dtq, width.cutoff=500L), "\n", sep="") tmp = eval(dtq) # add names on list setattr(ll <- tmp$.ll.tech.split, @@ -2927,7 +2925,7 @@ isReallyReal = function(x) { ## convert i to data.table with all combinations in rows. if(length(i) > 1L && prod(vapply_1i(i, length)) > 1e4){ ## CJ would result in more than 1e4 rows. This would be inefficient, especially memory-wise #2635 - if (verbose) {cat("Subsetting optimization disabled because the cross-product of RHS values exceeds 1e4, causing memory problems.\n");flush.console()} + if (verbose) {cat(gettext("Subsetting optimization disabled because the cross-product of RHS values exceeds 1e4, causing memory problems.\n", domain="R-data.table"));flush.console()} return(NULL) } ## Care is needed with names as we construct i @@ -2944,7 +2942,7 @@ isReallyReal = function(x) { ## check whether key fits the columns in i. ## order of key columns makes no difference, as long as they are all upfront in the key, I believe. if (all(names(i) %chin% head(key(x), length(i)))){ - if (verbose) {cat("Optimized subsetting with key '", paste0( head(key(x), length(i)), collapse = ", "),"'\n",sep="");flush.console()} + if (verbose) {cat(gettext("Optimized subsetting with key '", domain="R-data.table"), paste0( head(key(x), length(i)), collapse = ", "),"'\n",sep="");flush.console()} idx = integer(0L) ## integer(0L) not NULL! Indicates that x is ordered correctly. idxCols = head(key(x), length(i)) ## in correct order! } @@ -2963,17 +2961,17 @@ isReallyReal = function(x) { } } if (!is.null(idx)){ - if (verbose) {cat("Optimized subsetting with index '", paste0( idxCols, collapse = "__"),"'\n",sep="");flush.console()} + if (verbose) {cat(gettext("Optimized subsetting with index '", domain="R-data.table"), paste0( idxCols, collapse = "__"),"'\n",sep="");flush.console()} } } if (is.null(idx)){ ## if nothing else helped, auto create a new index that can be used if (!getOption("datatable.auto.index")) return(NULL) - if (verbose) {cat("Creating new index '", paste0(names(i), collapse = "__"),"'\n",sep="");flush.console()} - if (verbose) {last.started.at=proc.time();cat("Creating index", paste0(names(i), collapse = "__"), "done in ... ");flush.console()} + if (verbose) {cat(gettext("Creating new index '", domain="R-data.table"), paste0(names(i), collapse = "__"),"'\n",sep="");flush.console()} + if (verbose) {last.started.at=proc.time();cat(gettextf("Creating index %s done in ... ", paste0(names(i), collapse = "__"), domain="R-data.table"));flush.console()} setindexv(x, names(i)) if (verbose) {cat(timetaken(last.started.at),"\n");flush.console()} - if (verbose) {cat("Optimized subsetting with index '", paste0(names(i), collapse = "__"),"'\n",sep="");flush.console()} + if (verbose) {cat(gettext("Optimized subsetting with index '", domain="R-data.table"), paste0(names(i), collapse = "__"),"'\n",sep="");flush.console()} idx = attr(attr(x, "index", exact=TRUE), paste0("__", names(i), collapse = ""), exact=TRUE) idxCols = names(i) } diff --git a/R/devel.R b/R/devel.R index 8db74e47ce..dc8cbbc307 100644 --- a/R/devel.R +++ b/R/devel.R @@ -39,7 +39,7 @@ update.dev.pkg = function(object="data.table", repo="https://Rdatatable.gitlab.i .git = function(quiet=FALSE, lib.loc=NULL) { ans = unname(read.dcf(system.file("DESCRIPTION", package="data.table", lib.loc=lib.loc, mustWork=TRUE), fields="Revision")[, "Revision"]) if (!quiet && is.na(ans)) - cat("Git revision is not available. Most likely data.table was installed from CRAN or local archive.\nGit revision is available when installing from our repositories 'https://Rdatatable.gitlab.io/data.table' and 'https://Rdatatable.github.io/data.table'.\n") + cat(gettext("Git revision is not available. Most likely data.table was installed from CRAN or local archive.\nGit revision is available when installing from our repositories 'https://Rdatatable.gitlab.io/data.table' and 'https://Rdatatable.github.io/data.table'.\n", domain="R-data.table")) ans } diff --git a/R/fmelt.R b/R/fmelt.R index 32e023f642..21ea64f136 100644 --- a/R/fmelt.R +++ b/R/fmelt.R @@ -63,7 +63,7 @@ melt.data.table = function(data, id.vars, measure.vars, variable.name = "variabl as.logical(verbose)) setDT(ans) if (any(duplicated(names(ans)))) { - cat("Duplicate column names found in molten data.table. Setting unique names using 'make.names'\n") + cat(gettext("Duplicate column names found in molten data.table. Setting unique names using 'make.names'\n", domain="R-data.table")) setnames(ans, make.unique(names(ans))) } setattr(ans, 'sorted', NULL) diff --git a/R/foverlaps.R b/R/foverlaps.R index d4c8a2ae12..e64c65490f 100644 --- a/R/foverlaps.R +++ b/R/foverlaps.R @@ -127,7 +127,7 @@ foverlaps = function(x, y, by.x=if (!is.null(key(x))) key(x) else key(y), by.y=k end = yintervals[2L], any =, within =, equal = yintervals) call = construct(head(ynames, -2L), uycols, type) - if (verbose) {last.started.at=proc.time();cat("unique() + setkey() operations done in ...");flush.console()} + if (verbose) {last.started.at=proc.time();cat(gettext("unique() + setkey() operations done in ...", domain="R-data.table"));flush.console()} uy = unique(y[, eval(call)]) setkey(uy)[, `:=`(lookup = list(list(integer(0L))), type_lookup = list(list(integer(0L))), count=0L, type_count=0L)] if (verbose) {cat(timetaken(last.started.at),"\n"); flush.console()} @@ -153,7 +153,7 @@ foverlaps = function(x, y, by.x=if (!is.null(key(x))) key(x) else key(y), by.y=k .Call(Clookup, uy, nrow(y), indices(uy, y, yintervals, nomatch=0L, roll=roll), maxgap, minoverlap, mult, type, verbose) if (maxgap == 0L && minoverlap == 1L) { # iintervals = tail(names(x), 2L) # iintervals not yet used so commented out for now - if (verbose) {last.started.at=proc.time();cat("binary search(es) done in ...");flush.console()} + if (verbose) {last.started.at=proc.time();cat(gettext("binary search(es) done in ...", domain="R-data.table"));flush.console()} xmatches = indices(uy, x, xintervals, nomatch=0L, roll=roll) if (verbose) {cat(timetaken(last.started.at),"\n");flush.console()} olaps = .Call(Coverlaps, uy, xmatches, mult, type, nomatch, verbose) diff --git a/R/fread.R b/R/fread.R index d57d2cd6fd..290fcc8ea2 100644 --- a/R/fread.R +++ b/R/fread.R @@ -193,7 +193,7 @@ yaml=FALSE, autostart=NA, tmpdir=tempdir()) yaml_header = yaml::yaml.load(yaml_string) yaml_names = names(yaml_header) - if (verbose) cat('Processed', n_read, 'lines of YAML metadata with the following top-level fields:', brackify(yaml_names), '\n') + if (verbose) cat(gettextf('Processed %d lines of YAML metadata with the following top-level fields: %s\n', n_read, brackify(yaml_names), domain="R-data.table")) # process header first since it impacts how to handle colClasses if ('header' %chin% yaml_names) { if ('header' %chin% call_args) message("User-supplied 'header' will override that found in metadata.") @@ -316,7 +316,7 @@ yaml=FALSE, autostart=NA, tmpdir=tempdir()) } else { cols_to_factor = which(vapply_1b(ans, is.character)) } - if (verbose) cat("stringsAsFactors=", stringsAsFactors, " converted ", length(cols_to_factor), " column(s): ", brackify(names(ans)[cols_to_factor]), "\n", sep="") + if (verbose) cat(gettextf("stringsAsFactors=%s converted %d column(s): %s\n", stringsAsFactors, length(cols_to_factor), brackify(names(ans)[cols_to_factor]), domain="R-data.table")) for (j in cols_to_factor) set(ans, j=j, value=as_factor(.subset2(ans, j))) } diff --git a/R/fwrite.R b/R/fwrite.R index 1971c0e4ea..214a7da323 100644 --- a/R/fwrite.R +++ b/R/fwrite.R @@ -58,7 +58,7 @@ fwrite = function(x, file="", append=FALSE, quote="auto", file = path.expand(file) # "~/foo/bar" if (append && (file=="" || file.exists(file))) { if (missing(col.names)) col.names = FALSE - if (verbose) cat("Appending to existing file so setting bom=FALSE and yaml=FALSE\n") + if (verbose) cat(gettext("Appending to existing file so setting bom=FALSE and yaml=FALSE\n", domain="R-data.table")) bom = FALSE yaml = FALSE } diff --git a/R/last.R b/R/last.R index abf4050b40..164185b17b 100644 --- a/R/last.R +++ b/R/last.R @@ -7,12 +7,12 @@ last = function(x, n=1L, ...) { if (nargs()>1L) { if ("package:xts" %chin% search()) { if (verbose) - cat("last: using xts::last: !is.xts(x) & nargs>1 & 'package:xts'%in%search()\n") + cat(gettext("last: using xts::last: !is.xts(x) & nargs>1 & 'package:xts'%in%search()\n", domain="R-data.table")) xts::last(x, n=n, ...) } else { # nocov start if (verbose) - cat("last: using utils::tail: !is.xts(x) & nargs>1 & !'package:xts'%in%search()\n") + cat(gettext("last: using utils::tail: !is.xts(x) & nargs>1 & !'package:xts'%in%search()\n", domain="R-data.table")) utils::tail(x, n=n, ...) # nocov end } @@ -20,16 +20,16 @@ last = function(x, n=1L, ...) { dx = dim(x) if (is.null(dx)) { if (verbose) - cat("last: using 'x[[length(x)]]': !is.xts(x) & !nargs>1 & is.null(dim(x))\n") + cat(gettext("last: using 'x[[length(x)]]': !is.xts(x) & !nargs>1 & is.null(dim(x))\n", domain="R-data.table")) lx = length(x) if (!lx) x else x[[lx]] } else if (is.data.frame(x)) { if (verbose) - cat("last: using 'x[nrow(x),]': !is.xts(x) & !nargs>1 & is.data.frame(x)\n") + cat(gettext("last: using 'x[nrow(x),]': !is.xts(x) & !nargs>1 & is.data.frame(x)\n", domain="R-data.table")) x[dx[1L], , drop=FALSE] } else { if (verbose) - cat("last: using utils::tail: !is.xts(x) & !nargs>1 & !is.null(dim(x)) & !is.data.frame(x)\n") + cat(gettext("last: using utils::tail: !is.xts(x) & !nargs>1 & !is.null(dim(x)) & !is.data.frame(x)\n", domain="R-data.table")) utils::tail(x, n=n, ...) } } @@ -37,7 +37,7 @@ last = function(x, n=1L, ...) { if (!requireNamespace("xts", quietly=TRUE)) stop(gettextf("'xts' class passed to %s function but 'xts' is not available, you should have 'xts' installed already", "data.table::last", domain="R-data.table")) # nocov if (verbose) - cat("last: using xts::last: is.xts(x)\n") + cat(gettext("last: using xts::last: is.xts(x)\n", domain="R-data.table")) xts::last(x, n=n, ...) } } @@ -48,12 +48,12 @@ first = function(x, n=1L, ...) { if (nargs()>1L) { if ("package:xts" %chin% search()) { if (verbose) - cat("first: using xts::first: !is.xts(x) & nargs>1 & 'package:xts'%in%search()\n") + cat(gettext("first: using xts::first: !is.xts(x) & nargs>1 & 'package:xts'%in%search()\n", domain="R-data.table")) xts::first(x, n=n, ...) } else { # nocov start if (verbose) - cat("first: using utils::head: !is.xts(x) & nargs>1 & !'package:xts'%in%search()\n") + cat(gettext("first: using utils::head: !is.xts(x) & nargs>1 & !'package:xts'%in%search()\n", domain="R-data.table")) utils::head(x, n=n, ...) # nocov end } @@ -61,16 +61,16 @@ first = function(x, n=1L, ...) { dx = dim(x) if (is.null(dx)) { if (verbose) - cat("first: using 'x[[1L]]': !is.xts(x) & !nargs>1 & is.null(dim(x))\n") + cat(gettext("first: using 'x[[1L]]': !is.xts(x) & !nargs>1 & is.null(dim(x))\n", domain="R-data.table")) lx = length(x) if (!lx) x else x[[1L]] } else if (is.data.frame(x)) { if (verbose) - cat("first: using 'x[1L,]': !is.xts(x) & !nargs>1 & is.data.frame(x)\n") + cat(gettext("first: using 'x[1L,]': !is.xts(x) & !nargs>1 & is.data.frame(x)\n", domain="R-data.table")) if (!dx[1L]) x else x[1L, , drop=FALSE] } else { if (verbose) - cat("first: using utils::head: !is.xts(x) & !nargs>1 & !is.null(dim(x)) & !is.data.frame(x)\n") + cat(gettext("first: using utils::head: !is.xts(x) & !nargs>1 & !is.null(dim(x)) & !is.data.frame(x)\n", domain="R-data.table")) utils::head(x, n=n, ...) } } @@ -78,7 +78,7 @@ first = function(x, n=1L, ...) { if (!requireNamespace("xts", quietly=TRUE)) stop(gettextf("'xts' class passed to %s function but 'xts' is not available, you should have 'xts' installed already", "data.table::first", domain="R-data.table")) # nocov if (verbose) - cat("first: using xts::first: is.xts(x)\n") + cat(gettext("first: using xts::first: is.xts(x)\n", domain="R-data.table")) xts::first(x, n=n, ...) } } diff --git a/R/print.data.table.R b/R/print.data.table.R index 9bba978f02..1d52e068fc 100644 --- a/R/print.data.table.R +++ b/R/print.data.table.R @@ -43,17 +43,17 @@ print.data.table = function(x, topn=getOption("datatable.print.topn"), topn = max(as.integer(topn),1L) if (print.keys){ if (!is.null(ky <- key(x))) - cat("Key: <", paste(ky, collapse=", "), ">\n", sep="") + cat(gettextf("Key: <%s>\n", paste(ky, collapse=", "), domain="R-data.table")) if (!is.null(ixs <- indices(x))) - cat("Ind", if (length(ixs) > 1L) "ices" else "ex", ": <", + cat(ngettext(length(ixs), "Index: ", "Indices: ", domain="R-data.table"), "<", paste(ixs, collapse=">, <"), ">\n", sep="") } if (any(dim(x)==0L)) { class = if (is.data.table(x)) "table" else "frame" # a data.frame could be passed to print.data.table() directly, #3363 if (all(dim(x)==0L)) { - cat("Null data.",class," (0 rows and 0 cols)\n", sep="") # See FAQ 2.5 and NEWS item in v1.8.9 + cat(gettextf("Null data.%s (0 rows and 0 cols)\n", class, domain="R-data.table")) # See FAQ 2.5 and NEWS item in v1.8.9 } else { - cat("Empty data.",class," (", dim(x)[1L], " rows and ",length(x)," cols)", sep="") + cat(gettextf("Empty data.%s (%d rows and %d cols)", class, NROW(x), NCOL(x), domain="R-data.table")) if (length(x)>0L) cat(": ",paste(head(names(x),6L),collapse=","),if(length(x)>6L)"...",sep="") cat("\n") } @@ -218,7 +218,7 @@ trunc_cols_message = function(not_printed, abbs, class, col.names){ n = length(not_printed) if (class && col.names != "none") classes = paste0(" ", tail(abbs, n)) else classes = "" cat(sprintf( - ngettext(n, + ngettext(n, domain="R-data.table", "%d variable not shown: %s\n", "%d variables not shown: %s\n"), n, brackify(paste0(not_printed, classes)) diff --git a/R/setkey.R b/R/setkey.R index 63c6155f68..de441bbdf6 100644 --- a/R/setkey.R +++ b/R/setkey.R @@ -88,12 +88,12 @@ setkeyv = function(x, cols, verbose=getOption("datatable.verbose"), physical=TRU if (verbose) { tt = suppressMessages(system.time(o <- forderv(x, cols, sort=TRUE, retGrp=FALSE))) # system.time does a gc, so we don't want this always on, until refcnt is on by default in R # suppress needed for tests 644 and 645 in verbose mode - cat("forder took", tt["user.self"]+tt["sys.self"], "sec\n") + cat(gettext("forder took", domain="R-data.table"), tt["user.self"]+tt["sys.self"], "sec\n") } else { o = forderv(x, cols, sort=TRUE, retGrp=FALSE) } } else { - if (verbose) cat("setkey on columns ", brackify(cols), " using existing index '", newkey, "'\n", sep="") + if (verbose) cat(gettextf("setkey on columns %s using existing index '%s'\n", brackify(cols), newkey, domain="R-data.table")) o = getindex(x, newkey) } if (!physical) { @@ -105,9 +105,9 @@ setkeyv = function(x, cols, verbose=getOption("datatable.verbose"), physical=TRU if (length(o)) { if (verbose) { last.started.at = proc.time() } .Call(Creorder,x,o) - if (verbose) { cat("reorder took", timetaken(last.started.at), "\n"); flush.console() } + if (verbose) { cat(gettext("reorder took", domain="R-data.table"), timetaken(last.started.at), "\n"); flush.console() } } else { - if (verbose) cat("x is already ordered by these columns, no need to call reorder\n") + if (verbose) cat(gettext("x is already ordered by these columns, no need to call reorder\n", domain="R-data.table")) } # else empty integer() from forderv means x is already ordered by those cols, nothing to do. setattr(x,"sorted",cols) invisible(x) diff --git a/R/tables.R b/R/tables.R index bcfab0c674..3689519e5a 100644 --- a/R/tables.R +++ b/R/tables.R @@ -8,7 +8,7 @@ tables = function(mb=TRUE, order.col="NAME", width=80, all_obj = objects(envir=env, all.names=TRUE) is_DT = which(vapply_1b(all_obj, function(x) is.data.table(get(x, envir=env)))) if (!length(is_DT)) { - if (!silent) cat("No objects of class data.table exist in", if (identical(env,.GlobalEnv)) ".GlobalEnv" else format(env), "\n") + if (!silent) cat(gettext("No objects of class data.table exist in", domain="R-data.table"), if (identical(env,.GlobalEnv)) ".GlobalEnv" else format(env), "\n") return(invisible(data.table(NULL))) } DT_names = all_obj[is_DT] @@ -36,7 +36,7 @@ tables = function(mb=TRUE, order.col="NAME", width=80, tt[ , NCOL := pretty_format(NCOL, width=4L)] if (mb) tt[ , MB := pretty_format(MB, width=2L)] print(tt, class=FALSE, nrows=Inf) - if (mb) cat("Total: ", prettyNum(sum(info$MB), big.mark=","), "MB\n", sep="") + if (mb) cat(gettext("Total: ", domain="R-data.table"), prettyNum(sum(info$MB), big.mark=","), "MB\n", sep="") } invisible(info) } diff --git a/R/test.data.table.R b/R/test.data.table.R index 33752545d5..79ebaf5a45 100644 --- a/R/test.data.table.R +++ b/R/test.data.table.R @@ -83,9 +83,9 @@ test.data.table = function(script="tests.Rraw", verbose=FALSE, pkg=".", silent=F width = max(getOption('width'), 80L) # some tests (e.g. 1066, 1293) rely on capturing output that will be garbled with small width ) - cat("getDTthreads(verbose=TRUE):\n") # for tracing on CRAN; output to log before anything is attempted + cat(gettext("getDTthreads(verbose=TRUE):\n", domain="R-data.table")) # for tracing on CRAN; output to log before anything is attempted getDTthreads(verbose=TRUE) # includes the returned value in the verbose output (rather than dangling '[1] 4'); e.g. "data.table is using 4 threads" - cat("test.data.table() running:", fn, "\n") # print fn to log before attempting anything on it (in case it is missing); on same line for slightly easier grep + cat(gettext("test.data.table() running:", domain="R-data.table"), fn, "\n") # print fn to log before attempting anything on it (in case it is missing); on same line for slightly easier grep env = new.env(parent=.GlobalEnv) assign("testDir", function(x) file.path(fulldir, x), envir=env) @@ -94,8 +94,7 @@ test.data.table = function(script="tests.Rraw", verbose=FALSE, pkg=".", silent=F foreign = txt != "object 'not__exist__' not found" if (foreign) { # nocov start - cat("\n**** This R session's language is not English. Each test will still check that the correct number of errors and/or\n", - "**** warnings are produced. However, to test the text of each error/warning too, please restart R with LANGUAGE=en\n\n", sep="") + cat(gettext("\n**** This R session's language is not English. Each test will still check that the correct number of errors and/or\n**** warnings are produced. However, to test the text of each error/warning too, please restart R with LANGUAGE=en\n\n", domain="R-data.table")) # nocov end } assign("foreign", foreign, envir=env) @@ -162,10 +161,10 @@ test.data.table = function(script="tests.Rraw", verbose=FALSE, pkg=".", silent=F if ((x<-sum(timings[["nTest"]])) != ntest) { warning("Timings count mismatch:",x,"vs",ntest) # nocov } - cat("10 longest running tests took ", as.integer(tt<-DT[, sum(time)]), "s (", as.integer(100*tt/(ss<-timings[,sum(time)])), "% of ", as.integer(ss), "s)\n", sep="") + cat(gettext("10 longest running tests took ", domain="R-data.table"), as.integer(tt<-DT[, sum(time)]), "s (", as.integer(100*tt/(ss<-timings[,sum(time)])), "% of ", as.integer(ss), "s)\n", sep="") print(DT, class=FALSE) - cat("All ",ntest," tests in ",names(fn)," completed ok in ",timetaken(env$started.at),"\n",sep="") + cat(gettextf("All %d tests in %s completed ok in %s\n", ntest, names(fn), timetaken(env$started.at), domain="R-data.table")) ## this chunk requires to include new suggested deps: graphics, grDevices #memtest.plot = function(.inittime) { @@ -272,7 +271,9 @@ test = function(num,x,y=TRUE,error=NULL,warning=NULL,message=NULL,output=NULL,no timings[ as.integer(num), `:=`(time=time+took, nTest=nTest+1L), verbose=FALSE ] } ) if (showProgress) - cat("\rRunning test id", numStr, " ") # nocov. + # \r can't be in gettextf msg + cat("\r") # nocov + cat(gettextf("Running test id %s ", numStr, domain="R-data.table")) # nocov. # See PR #4090 for comments about change here in Dec 2019. # If a segfault error occurs in future and we'd like to know after which test, then arrange for the # try(sys.source()) in test.data.table() to be run in a separate R process. That process could write out @@ -329,7 +330,7 @@ test = function(num,x,y=TRUE,error=NULL,warning=NULL,message=NULL,output=NULL,no if (.test.data.table) { if (num>\n",sep="") # \n printed as '\\n' so the two lines of output can be compared vertically - cat("Observed: <<",gsub("\n","\\\\n",out),">>\n",sep="") + # \n printed as '\\n' so the two lines of output can be compared vertically + cat(gettextf("Test %s did not produce the correct output:\nExpected: <<%s>>\nObserved <<%s>>\n", numStr, gsub("\n", "\\\\n", output, fixed=TRUE), gsub("\n", "\\\\n", out, fixed=TRUE), domain="R-data.table")) fail = TRUE # nocov end } if (length(notOutput) && string_match(notOutput, out, ignore.case=TRUE)) { # nocov start - cat("Test",numStr,"produced output but should not have:\n") - cat("Expected absent (case insensitive): <<",gsub("\n","\\\\n",notOutput),">>\n",sep="") - cat("Observed: <<",gsub("\n","\\\\n",out),">>\n",sep="") + cat(gettextf("Test %s produced output but should not have:\nExpected absent (case insensitive): <<%s>>\nObserved: <<%s>>\n", numStr, gsub("\n", "\\\\n", notOutput, fixed=TRUE), gsub("\n", "\\\\n", out, fixed=TRUE), domain="R-data.table")) fail = TRUE # nocov end } @@ -393,7 +389,7 @@ test = function(num,x,y=TRUE,error=NULL,warning=NULL,message=NULL,output=NULL,no if (is.data.table(x) && is.data.table(y)) { if (!selfrefok(x) || !selfrefok(y)) { # nocov start - cat("Test ",numStr," ran without errors but selfrefok(", if(!selfrefok(x))"x"else"y", ") is FALSE\n", sep="") + cat(gettextf("Test %s ran without errors but selfrefok(%s) is FALSE\n", numStr, if (selfrefok(x)) "y" else "x", domain="R-data.table")) fail = TRUE # nocov end } else { @@ -415,12 +411,12 @@ test = function(num,x,y=TRUE,error=NULL,warning=NULL,message=NULL,output=NULL,no # For test 617 on r-prerel-solaris-sparc on 7 Mar 2013 # nocov start if (!fail) { - cat("Test", numStr, "ran without errors but failed check that x equals y:\n") + cat(gettextf("Test %s ran without errors but failed check that x equals y:\n", numStr, domain="R-data.table")) failPrint = function(x, xsub) { cat(">", substitute(x), "=", xsub, "\n") if (is.data.table(x)) compactprint(x) else { nn = length(x) - cat(sprintf("First %d of %d (type '%s'): \n", min(nn, 6L), length(x), typeof(x))) + cat(gettextf("First %d of %d (type '%s'): \n", min(nn, 6L), length(x), typeof(x), domain="R-data.table")) # head.matrix doesn't restrict columns if (length(d <- dim(x))) do.call(`[`, c(list(x, drop = FALSE), lapply(pmin(d, 6L), seq_len))) else print(head(x)) diff --git a/inst/po/en@quot/LC_MESSAGES/R-data.table.mo b/inst/po/en@quot/LC_MESSAGES/R-data.table.mo index e52bcf8fafb2e81f09cca9d20c658263d028f5f8..6054b24cf44e54b682a07967de4047f145b7de16 100644 GIT binary patch delta 28465 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\n" "Language-Team: LANGUAGE \n" @@ -106,6 +106,9 @@ msgstr "" msgid "trying to use integer64 class when 'bit64' package is not installed" msgstr "" +msgid "optimised between not available for this data type, fallback to slow R routine" +msgstr "" + msgid "Not yet implemented NAbounds=TRUE for this non-numeric and non-character type" msgstr "" @@ -130,6 +133,15 @@ msgstr "" msgid "the second element should be the upper bound(s)." msgstr "" +msgid "forderv(query) took ..." +msgstr "" + +msgid "Generating final logical vector ..." +msgstr "" + +msgid "done in" +msgstr "" + msgid "x." msgstr "" @@ -151,6 +163,15 @@ msgstr "" msgid ". Only integer, double or character columns may be roll joined." msgstr "" +msgid "Matching i.%s to factor levels to x.%s factor levels." +msgstr "" + +msgid "Coercing factor column i.%s to type character to match type of x.%s." +msgstr "" + +msgid "Matching character column i.%s to factor levels in x.%s." +msgstr "" + msgid "Incompatible join types: x." msgstr "" @@ -163,9 +184,21 @@ msgstr "" msgid "). Factor columns must join to factor or character columns." msgstr "" +msgid "i.%s has same type (%s) as x.%s. No coercion needed." +msgstr "" + +msgid "Coercing all-NA i.%s (%s) to type %s to match type of x.%s." +msgstr "" + +msgid "Coercing all-NA x.%s (%s) to type %s to match type of i.%s." +msgstr "" + msgid ")" msgstr "" +msgid "Coercing %s column %s%s to type integer64 to match type of %s." +msgstr "" + msgid "Incompatible join types:" msgstr "" @@ -175,12 +208,57 @@ msgstr "" msgid "is type double and contains fractions" msgstr "" +msgid "Coercing double column i.%s (which contains no fractions) to type integer to match type of x.%s" +msgstr "" + +msgid "Coercing integer column x.%s to type double to match type of i.%s which contains fractions." +msgstr "" + +msgid "Coercing integer column i.%s to type double for join to match type of x.%s." +msgstr "" + +msgid "on= matches existing key, using key" +msgstr "" + +msgid "on= matches existing index, using index" +msgstr "" + +msgid "Calculated ad hoc index in %s" +msgstr "" + +msgid "Non-equi join operators detected ..." +msgstr "" + msgid "roll is not implemented for non-equi joins yet." msgstr "" +msgid "forder took ..." +msgstr "" + +msgid "Generating group lengths ..." +msgstr "" + +msgid "Generating non-equi group ids ..." +msgstr "" + msgid "Column name '_nqgrp_' is reserved for non-equi joins." msgstr "" +msgid "Recomputing forder with non-equi ids ..." +msgstr "" + +msgid "Found %d non-equi group(s) ..." +msgstr "" + +msgid "Starting bmerge ..." +msgstr "" + +msgid "bmerge done in" +msgstr "" + +msgid "cedta decided '%s' wasn't data.table aware. Here is call stack with [[1L]] applied:" +msgstr "" + msgid "key argument of data.table() must be character" msgstr "" @@ -319,12 +397,27 @@ msgstr "" msgid "Attempting to do natural join but no common columns in provided tables" msgstr "" +msgid "Joining but 'x' has no key, natural join using" +msgstr "" + +msgid "not-join called with 'by=.EACHI'; Replacing !i with i=setdiff_(x,i) ..." +msgstr "" + +msgid "Constructing irows for '!byjoin || nqbyjoin' ..." +msgstr "" + msgid "Internal error. Cannot by=.EACHI when joining to a secondary key, yet" msgstr "" msgid "Internal error. irows has length in by=.EACHI" msgstr "" +msgid "Reorder irows for 'mult==\"all\" && !allGrp1' ..." +msgstr "" + +msgid "Reordering %d rows after bmerge done in ..." +msgstr "" + msgid "logical error. i is not a data.table, but 'on' argument is provided." msgstr "" @@ -346,6 +439,9 @@ msgstr "" msgid "Internal error: notjoin but byjoin or !integer or nomatch==NA" msgstr "" +msgid "Inverting irows for notjoin done in ..." +msgstr "" + msgid "with=FALSE together with := was deprecated in v1.9.4 released Oct 2014. Please wrap the LHS of := with parentheses; e.g., DT[,(myVar):=sum(b),by=a] to assign to column name(s) held in variable myVar. See ?':=' for other examples. As warned in 2014, this is now a warning." msgstr "" @@ -382,9 +478,18 @@ msgstr "" msgid "but one or more items include a comma. Either pass a vector of column names (which can contain spaces, but no commas), or pass a vector length 1 containing comma separated column names. See ?data.table for other possibilities." msgstr "" +msgid "by index '%s' but that index has 0 length. Ignoring." +msgstr "" + msgid "Internal error: irows isn't integer" msgstr "" +msgid "i clause present and columns used in by detected, only these subset:" +msgstr "" + +msgid "i clause present but columns used in by not detected. Having to subset all columns before evaluating 'by': '" +msgstr "" + msgid "'by' appears to evaluate to column names but isn't c() or key(). Use by=list(...) if you can. Otherwise, by=eval" msgstr "" @@ -406,6 +511,9 @@ msgstr "" msgid "The items in the 'by' or 'keyby' list are length(s) (%s). Each must be length %d; the same length as there are rows in x (after subsetting if i is provided)." msgstr "" +msgid "by-expression '%s' is not named, and the auto-generated name '%s' clashed with variable(s) in j. Therefore assigning the entire by-expression as name." +msgstr "" + msgid "Internal error: drop_dot passed" msgstr "" @@ -448,6 +556,15 @@ msgstr "" msgid "This j doesn't use .SD but .SDcols has been supplied. Ignoring .SDcols. See ?data.table." msgstr "" +msgid "Detected that j uses these columns:" +msgstr "" + +msgid "'(m)get' found in j. ansvars being set to all columns. Use .SDcols or a single j=eval(macro) instead. Both will detect the columns used which is important for efficiency.\nOld:" +msgstr "" + +msgid "New:" +msgstr "" + msgid ".SD is locked. Using := in .SD's j is reserved for possible future use; a tortuously flexible way to modify by group. Use := in j directly to modify by group by reference." msgstr "" @@ -463,9 +580,18 @@ msgstr "" msgid "LHS of := isn't column names ('character') or positions ('integer' or 'numeric')" msgstr "" +msgid "No rows match i. No new columns to add so not evaluating RHS of :=\nAssigning to 0 row subset of %d rows" +msgstr "" + msgid "Invalid .internal.selfref detected and fixed by taking a (shallow) copy of the data.table so that := can add this new column by reference. At an earlier point, this data.table has been copied by R (or was created manually using structure() or similar). Avoid names<- and attr<- which in R currently (and oddly) may copy the whole data.table. Use set* syntax instead to avoid copying: ?set, ?setnames and ?setattr. If this message doesn't help, please report your use case to the data.table issue tracker so the root cause can be fixed or this message improved." msgstr "" +msgid "Growing vector of column pointers from truelength %d to %d. A shallow copy has been taken, see ?setalloccol. Only a potential issue if two variables point to the same data (we can't yet detect that well) and if not you can safely ignore this. To avoid this message you could setalloccol() first, deep copy first using copy(), wrap with suppressWarnings() or increase the 'datatable.alloccol' option." +msgstr "" + +msgid "Note that the shallow copy will assign to the environment from which := was called. That means for example that if := was called within a function, the original table may be unaffected." +msgstr "" + msgid "Cannot assign to an under-allocated recursively indexed list -- L[[i]][,:=] syntax is only valid when i is length 1, but it's length" msgstr "" @@ -508,24 +634,72 @@ msgstr "" msgid "The column '.I' can't be grouped because it conflicts with the special .I variable. Try setnames(DT,'.I','I') first." msgstr "" +msgid "Note: forcing units=\"secs\" on implicit difftime by group; call difftime explicitly to choose custom units" +msgstr "" + msgid "logical error. i is not data.table, but mult='all' and 'by'=.EACHI" msgstr "" msgid "Internal error: by= is missing" msgstr "" +msgid "Finding groups using forderv ..." +msgstr "" + +msgid "Finding group sizes from the positions (can be avoided to save RAM) ..." +msgstr "" + +msgid "Getting back original order ..." +msgstr "" + +msgid "Finding groups using uniqlist on key ..." +msgstr "" + msgid "Internal error: byindex not the index name" msgstr "" +msgid "Finding groups using uniqlist on index '%s' ..." +msgstr "" + msgid "Internal error: byindex not found" msgstr "" +msgid "lapply optimization changed j from '%s' to '%s'" +msgstr "" + +msgid "lapply optimization is on, j unchanged as '%s'" +msgstr "" + +msgid "GForce optimized j to '" +msgstr "" + +msgid "GForce is on, left j unchanged" +msgstr "" + msgid "Unable to optimize call to mean() and could be very slow. You must name 'na.rm' like that otherwise if you do mean(x,TRUE) the TRUE is taken to mean 'trim' which is the 2nd argument of mean. 'trim' is not yet optimized." msgstr "" +msgid "Old mean optimization changed j from '%s' to '%s'" +msgstr "" + +msgid "Old mean optimization is on, left j unchanged." +msgstr "" + +msgid "All optimizations are turned off" +msgstr "" + +msgid "Optimization is on but left j unchanged (single plain symbol): '%s'" +msgstr "" + msgid "Internal error: length(irows)!=length(o__)" msgstr "" +msgid "Making each group and running j (GForce %s) ..." +msgstr "" + +msgid "setkey() after the := with keyby= ..." +msgstr "" + msgid "The setkey() normally performed by keyby= has been skipped (as if by= was used) because := is being used together with keyby= but the keyby= contains some expressions. To avoid this warning, use by= instead, or provide existing column names to keyby=." msgstr "" @@ -538,6 +712,9 @@ msgstr "" msgid "and bynames is" msgstr "" +msgid "setkey() afterwards for keyby=.EACHI ..." +msgstr "" + msgid "rownames and rownames.value cannot both be used at the same time" msgstr "" @@ -640,6 +817,9 @@ msgstr "" msgid "Argument 'by' must refer only to atomic-type columns, but the following columns are non-atomic:" msgstr "" +msgid "Processing split.data.table with:" +msgstr "" + msgid "x is not a data.table. Shallow copy is a copy of the vector of column pointers (only), so is only meaningful for data.table" msgstr "" @@ -820,6 +1000,21 @@ msgstr "" msgid "Internal error in .isFastSubsettable. Please report to data.table developers" msgstr "" +msgid "Subsetting optimization disabled because the cross-product of RHS values exceeds 1e4, causing memory problems." +msgstr "" + +msgid "Optimized subsetting with key '" +msgstr "" + +msgid "Optimized subsetting with index '" +msgstr "" + +msgid "Creating new index '" +msgstr "" + +msgid "Creating index %s done in ..." +msgstr "" + msgid "'on' argument should be a named atomic vector of column names indicating which columns in 'i' should be joined with which columns in 'x'." msgstr "" @@ -850,6 +1045,9 @@ msgstr "" msgid "There is no package %s in provided repository." msgstr "" +msgid "Git revision is not available. Most likely data.table was installed from CRAN or local archive.\nGit revision is available when installing from our repositories 'https://Rdatatable.gitlab.io/data.table' and 'https://Rdatatable.github.io/data.table'." +msgstr "" + msgid "'fromLast' must be TRUE or FALSE" msgstr "" @@ -949,6 +1147,9 @@ msgstr "" msgid "Please provide a name to each element of 'measure.vars'." msgstr "" +msgid "Duplicate column names found in molten data.table. Setting unique names using 'make.names'" +msgstr "" + msgid "y and x must both be data.tables. Use `setDT()` to convert list/data.frames to data.tables by reference or as.data.table() to convert to data.tables by copying." msgstr "" @@ -1042,6 +1243,12 @@ msgstr "" msgid "POSIXct interval cols have mixed timezones. Overlaps are performed on the internal numerical representation of POSIXct objects (always in UTC epoch time), therefore printed values may give the impression that values don't overlap but their internal representations do Please ensure that POSIXct type interval cols have identical 'tzone' attributes to avoid confusion." msgstr "" +msgid "unique() + setkey() operations done in ..." +msgstr "" + +msgid "binary search(es) done in ..." +msgstr "" + msgid "Not yet implemented" msgstr "" @@ -1171,6 +1378,9 @@ msgstr "" msgid "\". Please double check the input file is a valid csvy." msgstr "" +msgid "Processed %d lines of YAML metadata with the following top-level fields: %s" +msgstr "" + msgid "User-supplied 'header' will override that found in metadata." msgstr "" @@ -1231,6 +1441,9 @@ msgstr "" msgid "so the column has been left as type '" msgstr "" +msgid "stringsAsFactors=%s converted %d column(s): %s" +msgstr "" + msgid "key argument of data.table() must be a character vector naming columns (NB: col.names are applied before this)" msgstr "" @@ -1249,6 +1462,9 @@ msgstr "" msgid "x being coerced from class: matrix to data.table" msgstr "" +msgid "Appending to existing file so setting bom=FALSE and yaml=FALSE" +msgstr "" + msgid "Input has no columns; doing nothing." msgstr "" @@ -1315,9 +1531,45 @@ msgstr "" msgid "Using integer64 class columns require to have 'bit64' package installed." msgstr "" +msgid "last: using xts::last: !is.xts(x) & nargs>1 & 'package:xts'%in%search()" +msgstr "" + +msgid "last: using utils::tail: !is.xts(x) & nargs>1 & !'package:xts'%in%search()" +msgstr "" + +msgid "last: using 'x[[length(x)]]': !is.xts(x) & !nargs>1 & is.null(dim(x))" +msgstr "" + +msgid "last: using 'x[nrow(x),]': !is.xts(x) & !nargs>1 & is.data.frame(x)" +msgstr "" + +msgid "last: using utils::tail: !is.xts(x) & !nargs>1 & !is.null(dim(x)) & !is.data.frame(x)" +msgstr "" + msgid "'xts' class passed to %s function but 'xts' is not available, you should have 'xts' installed already" msgstr "" +msgid "last: using xts::last: is.xts(x)" +msgstr "" + +msgid "first: using xts::first: !is.xts(x) & nargs>1 & 'package:xts'%in%search()" +msgstr "" + +msgid "first: using utils::head: !is.xts(x) & nargs>1 & !'package:xts'%in%search()" +msgstr "" + +msgid "first: using 'x[[1L]]': !is.xts(x) & !nargs>1 & is.null(dim(x))" +msgstr "" + +msgid "first: using 'x[1L,]': !is.xts(x) & !nargs>1 & is.data.frame(x)" +msgstr "" + +msgid "first: using utils::head: !is.xts(x) & !nargs>1 & !is.null(dim(x)) & !is.data.frame(x)" +msgstr "" + +msgid "first: using xts::first: is.xts(x)" +msgstr "" + msgid "Argument 'sort' should be logical TRUE/FALSE" msgstr "" @@ -1462,6 +1714,15 @@ msgstr "" msgid "Column classes will be suppressed when col.names is 'none'" msgstr "" +msgid "Key: <%s>" +msgstr "" + +msgid "Null data.%s (0 rows and 0 cols)" +msgstr "" + +msgid "Empty data.%s (%d rows and %d cols)" +msgstr "" + msgid "Internal structure doesn't seem to be a list. Possibly corrupt data.table." msgstr "" @@ -1504,6 +1765,18 @@ msgstr "" msgid "Internal error. 'cols' should be character at this point in setkey; please report." msgstr "" +msgid "forder took" +msgstr "" + +msgid "setkey on columns %s using existing index '%s'" +msgstr "" + +msgid "reorder took" +msgstr "" + +msgid "x is already ordered by these columns, no need to call reorder" +msgstr "" + msgid "Internal error: index '" msgstr "" @@ -1558,7 +1831,7 @@ msgstr "" msgid "is non-atomic, which can't be sorted; try setting sorted = FALSE" msgstr "" -msgid "Cross product of elements provided to CJ() would result in %d rows which exceeds .Machine$integer.max == %d" +msgid "Cross product of elements provided to CJ() would result in %.0f rows which exceeds .Machine$integer.max == %d" msgstr "" msgid "x and y must both be data.tables" @@ -1639,12 +1912,18 @@ msgstr "" msgid "argument 'fill' ignored, only make sense for type='const'" msgstr "" +msgid "No objects of class data.table exist in" +msgstr "" + msgid "order.col='" msgstr "" msgid "' not a column name of info" msgstr "" +msgid "Total:" +msgstr "" + msgid "data.table package is loaded. Unload or start a fresh R session." msgstr "" @@ -1654,6 +1933,15 @@ msgstr "" msgid "Neither %s nor %s exist in %s" msgstr "" +msgid "getDTthreads(verbose=TRUE):" +msgstr "" + +msgid "test.data.table() running:" +msgstr "" + +msgid "**** This R session's language is not English. Each test will still check that the correct number of errors and/or\n**** warnings are produced. However, to test the text of each error/warning too, please restart R with LANGUAGE=en" +msgstr "" + msgid "Failed after test" msgstr "" @@ -1675,12 +1963,48 @@ msgstr "" msgid "vs" msgstr "" +msgid "10 longest running tests took" +msgstr "" + +msgid "All %d tests in %s completed ok in %s" +msgstr "" + +msgid "Running test id %s" +msgstr "" + msgid "Test" msgstr "" msgid "is invalid: when error= is provided it does not make sense to pass y as well" msgstr "" +msgid "Test id %s is not in increasing order" +msgstr "" + +msgid "Test %s produced %d %ss but expected %d" +msgstr "" + +msgid "Test %s didn't produce the correct %s:\nExpected: %s\nObserved: %s" +msgstr "" + +msgid "Output captured before unexpected warning/error/message:" +msgstr "" + +msgid "Test %s did not produce the correct output:\nExpected: <<%s>>\nObserved <<%s>>" +msgstr "" + +msgid "Test %s produced output but should not have:\nExpected absent (case insensitive): <<%s>>\nObserved: <<%s>>" +msgstr "" + +msgid "Test %s ran without errors but selfrefok(%s) is FALSE" +msgstr "" + +msgid "Test %s ran without errors but failed check that x equals y:" +msgstr "" + +msgid "First %d of %d (type '%s'):" +msgstr "" + msgid "Use started.at=proc.time() not Sys.time() (POSIXt and slow)" msgstr "" @@ -1744,6 +2068,11 @@ msgstr "" msgid "Following columns are not numeric and will be omitted:" msgstr "" +msgid "Index: " +msgid_plural "Indices: " +msgstr[0] "" +msgstr[1] "" + msgid "%d variable not shown: %s\n" msgid_plural "%d variables not shown: %s\n" msgstr[0] "" diff --git a/po/R-zh_CN.po b/po/R-zh_CN.po index e74646eb14..05e8f1f82b 100644 --- a/po/R-zh_CN.po +++ b/po/R-zh_CN.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: data.table 1.12.5\n" -"POT-Creation-Date: 2019-12-29 22:35\n" +"POT-Creation-Date: 2019-12-31 14:30\n" "PO-Revision-Date: 2019-11-16 18:37+0800\n" "Last-Translator: Xianying Tan \n" "Language-Team: Mandarin\n" @@ -136,6 +136,11 @@ msgstr "。将采用 UTC 时间进行比较。" msgid "trying to use integer64 class when 'bit64' package is not installed" msgstr "试图使用 intger64 类型但 'bit64' 包尚未安装" +msgid "" +"optimised between not available for this data type, fallback to slow R " +"routine" +msgstr "" + msgid "" "Not yet implemented NAbounds=TRUE for this non-numeric and non-character type" msgstr "" @@ -165,6 +170,15 @@ msgstr "第一个元素应为下界;" msgid "the second element should be the upper bound(s)." msgstr "第二个元素应为上界。" +msgid "forderv(query) took ..." +msgstr "" + +msgid "Generating final logical vector ..." +msgstr "" + +msgid "done in" +msgstr "" + msgid "x." msgstr "x." @@ -188,6 +202,15 @@ msgstr "" "联接时。但只有整数(integer)、双精度(double)或字符(character)类型的列可" "以使用滚动联接(roll join)。" +msgid "Matching i.%s to factor levels to x.%s factor levels." +msgstr "" + +msgid "Coercing factor column i.%s to type character to match type of x.%s." +msgstr "" + +msgid "Matching character column i.%s to factor levels in x.%s." +msgstr "" + msgid "Incompatible join types: x." msgstr "不兼容的联结类型: x。" @@ -200,9 +223,21 @@ msgstr ")和 i。" msgid "). Factor columns must join to factor or character columns." msgstr ")。 因子类型的列必须与因子类型或字符类型的列才可以联结" +msgid "i.%s has same type (%s) as x.%s. No coercion needed." +msgstr "" + +msgid "Coercing all-NA i.%s (%s) to type %s to match type of x.%s." +msgstr "" + +msgid "Coercing all-NA x.%s (%s) to type %s to match type of i.%s." +msgstr "" + msgid ")" msgstr ")" +msgid "Coercing %s column %s%s to type integer64 to match type of %s." +msgstr "" + msgid "Incompatible join types:" msgstr "不兼容的联结类型" @@ -212,12 +247,65 @@ msgstr "是 integer64 类型但是" msgid "is type double and contains fractions" msgstr "是 double 类型并且包含分数" +msgid "" +"Coercing double column i.%s (which contains no fractions) to type integer to " +"match type of x.%s" +msgstr "" + +msgid "" +"Coercing integer column x.%s to type double to match type of i.%s which " +"contains fractions." +msgstr "" + +msgid "" +"Coercing integer column i.%s to type double for join to match type of x.%s." +msgstr "" + +msgid "on= matches existing key, using key" +msgstr "" + +msgid "on= matches existing index, using index" +msgstr "" + +msgid "Calculated ad hoc index in %s" +msgstr "" + +msgid "Non-equi join operators detected ..." +msgstr "" + msgid "roll is not implemented for non-equi joins yet." msgstr "不等长联结还不能执行 roll " +msgid "forder took ..." +msgstr "" + +#, fuzzy +msgid "Generating group lengths ..." +msgstr ";其长度应为 2。" + +msgid "Generating non-equi group ids ..." +msgstr "" + msgid "Column name '_nqgrp_' is reserved for non-equi joins." msgstr "列名 '_nqgrp_' 是为不等长联结保留的" +msgid "Recomputing forder with non-equi ids ..." +msgstr "" + +msgid "Found %d non-equi group(s) ..." +msgstr "" + +msgid "Starting bmerge ..." +msgstr "" + +msgid "bmerge done in" +msgstr "" + +msgid "" +"cedta decided '%s' wasn't data.table aware. Here is call stack with [[1L]] " +"applied:" +msgstr "" + msgid "key argument of data.table() must be character" msgstr "data.table() 的主参数必须是字符" @@ -422,12 +510,27 @@ msgstr "" msgid "Attempting to do natural join but no common columns in provided tables" msgstr "尝试进行自然连接然而并没有找到表格中相同的列" +msgid "Joining but 'x' has no key, natural join using" +msgstr "" + +msgid "not-join called with 'by=.EACHI'; Replacing !i with i=setdiff_(x,i) ..." +msgstr "" + +msgid "Constructing irows for '!byjoin || nqbyjoin' ..." +msgstr "" + msgid "Internal error. Cannot by=.EACHI when joining to a secondary key, yet" msgstr "内部错误:目前尚无法对次键使用by=.EACH命令" msgid "Internal error. irows has length in by=.EACHI" msgstr "内部错误:by=.EACHI 中 irows 有长度" +msgid "Reorder irows for 'mult==\"all\" && !allGrp1' ..." +msgstr "" + +msgid "Reordering %d rows after bmerge done in ..." +msgstr "" + msgid "logical error. i is not a data.table, but 'on' argument is provided." msgstr "逻辑错误。当 i 并非一个 data.table时,不应提供'on'参数" @@ -454,6 +557,9 @@ msgstr "" msgid "Internal error: notjoin but byjoin or !integer or nomatch==NA" msgstr "内部错误。原因可能为:notjoin 而非 byjoin;非整数;nomatch 为空" +msgid "Inverting irows for notjoin done in ..." +msgstr "" + msgid "" "with=FALSE together with := was deprecated in v1.9.4 released Oct 2014. " "Please wrap the LHS of := with parentheses; e.g., DT[,(myVar):=sum(b),by=a] " @@ -508,9 +614,20 @@ msgstr "" "包含逗号),或传入一个长度为1,由逗号分隔的列名组成的向量输入 ?data.table查看" "其他的选项。" +msgid "by index '%s' but that index has 0 length. Ignoring." +msgstr "" + msgid "Internal error: irows isn't integer" msgstr "内部错误:irows 不是整型" +msgid "i clause present and columns used in by detected, only these subset:" +msgstr "" + +msgid "" +"i clause present but columns used in by not detected. Having to subset all " +"columns before evaluating 'by': '" +msgstr "" + msgid "" "'by' appears to evaluate to column names but isn't c() or key(). Use " "by=list(...) if you can. Otherwise, by=eval" @@ -545,7 +662,14 @@ msgid "" "The items in the 'by' or 'keyby' list are length(s) (%s). Each must be " "length %d; the same length as there are rows in x (after subsetting if i is " "provided)." -msgstr "在'by'或'keyby'列表中的项长度为 %s。每一项的长度须均为%d,即应与 x (或经 i 筛选后的子集)中所包含行数相同。" +msgstr "" +"在'by'或'keyby'列表中的项长度为 %s。每一项的长度须均为%d,即应与 x (或经 i " +"筛选后的子集)中所包含行数相同。" + +msgid "" +"by-expression '%s' is not named, and the auto-generated name '%s' clashed " +"with variable(s) in j. Therefore assigning the entire by-expression as name." +msgstr "" msgid "Internal error: drop_dot passed" msgstr "内部错误:drop_dot 传入的参数有" @@ -556,7 +680,8 @@ msgstr "项" msgid "Item %d of the .() or list() passed to j is missing" msgstr "传递给j的 .() 或 list()中第%d项缺失" -msgid "Different branches of j expression produced different auto-named columns:" +msgid "" +"Different branches of j expression produced different auto-named columns:" msgstr "j表达式中的不同分支自动生成的列名不同:" msgid "%s!=%s" @@ -565,8 +690,13 @@ msgstr "%s!=%s" msgid "; using the most \"last\" names" msgstr ";将使用最晚生成的名字" -msgid "When .SDcols is a function, it is applied to each column; the output of this function must be a non-missing boolean scalar signalling inclusion/exclusion of the column. However, these conditions were not met for:" -msgstr "当传入 .SDcols 的参数为一个方程时,该方程将应用于每一列,并须返回单个非缺失值的布尔值指示该列是否应当被包含/排除。然而上述条件对如下列并不满足:" +msgid "" +"When .SDcols is a function, it is applied to each column; the output of this " +"function must be a non-missing boolean scalar signalling inclusion/exclusion " +"of the column. However, these conditions were not met for:" +msgstr "" +"当传入 .SDcols 的参数为一个方程时,该方程将应用于每一列,并须返回单个非缺失值" +"的布尔值指示该列是否应当被包含/排除。然而上述条件对如下列并不满足:" msgid ".SDcols missing at the following indices:" msgstr ".SDcols 的如下位置为缺失值:" @@ -591,6 +721,19 @@ msgid "" "data.table." msgstr "此处 j 不使用 .SD 但提供了 .SDcols ,因此忽略 .SDcols详见 ?data.table" +msgid "Detected that j uses these columns:" +msgstr "" + +msgid "" +"'(m)get' found in j. ansvars being set to all columns. Use .SDcols or a " +"single j=eval(macro) instead. Both will detect the columns used which is " +"important for efficiency.\n" +"Old:" +msgstr "" + +msgid "New:" +msgstr "" + msgid "" ".SD is locked. Using := in .SD's j is reserved for possible future use; a " "tortuously flexible way to modify by group. Use := in j directly to modify " @@ -616,6 +759,11 @@ msgid "" "'numeric')" msgstr ":= 的 LHS 不是列名('字符')或列的位置('整数'或'数值')" +msgid "" +"No rows match i. No new columns to add so not evaluating RHS of :=\n" +"Assigning to 0 row subset of %d rows" +msgstr "" + msgid "" "Invalid .internal.selfref detected and fixed by taking a (shallow) copy of " "the data.table so that := can add this new column by reference. At an " @@ -633,6 +781,21 @@ msgstr "" "及 ?setattr如果以上讯息无法提供帮助,请回报你的案例至 data.table 问题追踪以助" "于修复根本原因或改进本讯息" +msgid "" +"Growing vector of column pointers from truelength %d to %d. A shallow copy " +"has been taken, see ?setalloccol. Only a potential issue if two variables " +"point to the same data (we can't yet detect that well) and if not you can " +"safely ignore this. To avoid this message you could setalloccol() first, " +"deep copy first using copy(), wrap with suppressWarnings() or increase the " +"'datatable.alloccol' option." +msgstr "" + +msgid "" +"Note that the shallow copy will assign to the environment from which := was " +"called. That means for example that if := was called within a function, the " +"original table may be unaffected." +msgstr "" + msgid "" "Cannot assign to an under-allocated recursively indexed list -- L[[i]][,:=] " "syntax is only valid when i is length 1, but it's length" @@ -704,18 +867,50 @@ msgstr "" "无法对 '.I' 列进行分组,因为与 data.table 特有的 .I 变量冲突请先尝试 " "setnames(DT,'.I','I')" +msgid "" +"Note: forcing units=\"secs\" on implicit difftime by group; call difftime " +"explicitly to choose custom units" +msgstr "" + msgid "logical error. i is not data.table, but mult='all' and 'by'=.EACHI" msgstr "逻辑错误: i 不是data.table,但 mult='all' 及 'by'=.EACHI" msgid "Internal error: by= is missing" msgstr "内部错误 : 缺少 by=" +msgid "Finding groups using forderv ..." +msgstr "" + +msgid "Finding group sizes from the positions (can be avoided to save RAM) ..." +msgstr "" + +msgid "Getting back original order ..." +msgstr "" + +msgid "Finding groups using uniqlist on key ..." +msgstr "" + msgid "Internal error: byindex not the index name" msgstr "内部错误 : byindex 不是索引名称" +msgid "Finding groups using uniqlist on index '%s' ..." +msgstr "" + msgid "Internal error: byindex not found" msgstr "内部错误 : 找不到 byindex" +msgid "lapply optimization changed j from '%s' to '%s'" +msgstr "" + +msgid "lapply optimization is on, j unchanged as '%s'" +msgstr "" + +msgid "GForce optimized j to '" +msgstr "" + +msgid "GForce is on, left j unchanged" +msgstr "" + msgid "" "Unable to optimize call to mean() and could be very slow. You must name 'na." "rm' like that otherwise if you do mean(x,TRUE) the TRUE is taken to mean " @@ -725,9 +920,27 @@ msgstr "" "果您直接使用 mean(x,TRUE)会被认定为 trim=TRUE,trim 是 mean() 中尚未被优化的" "第二顺位参数" +msgid "Old mean optimization changed j from '%s' to '%s'" +msgstr "" + +msgid "Old mean optimization is on, left j unchanged." +msgstr "" + +msgid "All optimizations are turned off" +msgstr "" + +msgid "Optimization is on but left j unchanged (single plain symbol): '%s'" +msgstr "" + msgid "Internal error: length(irows)!=length(o__)" msgstr "内部错误:length(irows)!=length(o__)" +msgid "Making each group and running j (GForce %s) ..." +msgstr "" + +msgid "setkey() after the := with keyby= ..." +msgstr "" + msgid "" "The setkey() normally performed by keyby= has been skipped (as if by= was " "used) because := is being used together with keyby= but the keyby= contains " @@ -747,6 +960,9 @@ msgstr "但是ans(答案)是" msgid "and bynames is" msgstr "同时bynames是" +msgid "setkey() afterwards for keyby=.EACHI ..." +msgstr "" + msgid "rownames and rownames.value cannot both be used at the same time" msgstr "rownames和rownames.value 不能同时使用" @@ -870,6 +1086,9 @@ msgid "" "columns are non-atomic:" msgstr "参数 'by' 只适用于原子类型的纵列,但现在关联的纵列不是原子类型" +msgid "Processing split.data.table with:" +msgstr "" + msgid "" "x is not a data.table. Shallow copy is a copy of the vector of column " "pointers (only), so is only meaningful for data.table" @@ -1103,6 +1322,23 @@ msgid "" "Internal error in .isFastSubsettable. Please report to data.table developers" msgstr ".isFastSubsettable 产生了内部错误。请向 data.table 开发者报告" +msgid "" +"Subsetting optimization disabled because the cross-product of RHS values " +"exceeds 1e4, causing memory problems." +msgstr "" + +msgid "Optimized subsetting with key '" +msgstr "" + +msgid "Optimized subsetting with index '" +msgstr "" + +msgid "Creating new index '" +msgstr "" + +msgid "Creating index %s done in ..." +msgstr "" + msgid "" "'on' argument should be a named atomic vector of column names indicating " "which columns in 'i' should be joined with which columns in 'x'." @@ -1137,6 +1373,14 @@ msgstr "." msgid "There is no package %s in provided repository." msgstr "所提供的资料库中不含包%s" +msgid "" +"Git revision is not available. Most likely data.table was installed from " +"CRAN or local archive.\n" +"Git revision is available when installing from our repositories 'https://" +"Rdatatable.gitlab.io/data.table' and 'https://Rdatatable.github.io/data." +"table'." +msgstr "" + msgid "'fromLast' must be TRUE or FALSE" msgstr "'fromLast' 必须为 TRUE 或 FALSE" @@ -1152,22 +1396,38 @@ msgstr "' 作为 value 列。可使用 'value.var' 修改" msgid "The dcast generic in data.table has been passed a" msgstr "data.table 中的 dcast 泛型函数被传递了" -msgid ", but data.table::dcast currently only has a method for data.tables. Please confirm your input is a data.table, with setDT(" -msgstr ",但目前 data.table::dcast 仅提供了针对 data.table 的方法。您可通过如下两种方法确保您的输入为一个 data.table对象,即setDT(" +msgid "" +", but data.table::dcast currently only has a method for data.tables. Please " +"confirm your input is a data.table, with setDT(" +msgstr "" +",但目前 data.table::dcast 仅提供了针对 data.table 的方法。您可通过如下两种方" +"法确保您的输入为一个 data.table对象,即setDT(" msgid ") or as.data.table(" msgstr ") 或 as.data.table(" -msgid "). If you intend to use a reshape2::dcast, try installing that package first, but do note that reshape2 is deprecated and you should be migrating your code away from using it." -msgstr ")。若您想使用reshape2::dcast,尝试先安装reshape2。但请注意reshape2已经不推荐使用,您应修改您的代码以不再使用它。" +msgid "" +"). If you intend to use a reshape2::dcast, try installing that package " +"first, but do note that reshape2 is deprecated and you should be migrating " +"your code away from using it." +msgstr "" +")。若您想使用reshape2::dcast,尝试先安装reshape2。但请注意reshape2已经不推荐" +"使用,您应修改您的代码以不再使用它。" -msgid "and will attempt to redirect to the reshape2::dcast; please note that reshape2 is deprecated, and this redirection is now deprecated as well. Please do this redirection yourself like reshape2::dcast(" -msgstr ",将尝试重定向到reshape2::dcast。请注意reshape2已经不推荐使用,故该重定向目前也不推荐使用。请手动执行该重定向,如reshape2::dcast(" +msgid "" +"and will attempt to redirect to the reshape2::dcast; please note that " +"reshape2 is deprecated, and this redirection is now deprecated as well. " +"Please do this redirection yourself like reshape2::dcast(" +msgstr "" +",将尝试重定向到reshape2::dcast。请注意reshape2已经不推荐使用,故该重定向目前" +"也不推荐使用。请手动执行该重定向,如reshape2::dcast(" msgid "). In the next version, this warning will become an error." msgstr ")。在下一个版本中,此警告将变成为错误。" -msgid "Invalid formula. Cast formula should be of the form LHS ~ RHS, for e.g., a + b ~ c." +msgid "" +"Invalid formula. Cast formula should be of the form LHS ~ RHS, for e.g., a + " +"b ~ c." msgstr "无效的公式。所转换的公式的形式应为LHS ~ RHS,如a + b ~ c。" msgid "data.table to cast must have unique column names" @@ -1179,8 +1439,12 @@ msgstr "value.var 的值 [" msgid "] are not found in 'data'." msgstr "] 无法在 'data' 中找到" -msgid "When 'fun.aggregate' and 'value.var' are both lists, 'value.var' must be either of length =1 or =length(fun.aggregate)." -msgstr "当 'fun.aggregate' 和 'value.var' 同为 list时, 'value.var' 的长度必须为 1 或 length(fun.aggregate)。" +msgid "" +"When 'fun.aggregate' and 'value.var' are both lists, 'value.var' must be " +"either of length =1 or =length(fun.aggregate)." +msgstr "" +"当 'fun.aggregate' 和 'value.var' 同为 list时, 'value.var' 的长度必须为 1 或 " +"length(fun.aggregate)。" msgid "'data' must be a data.table." msgstr "'data' 必须为 data.table" @@ -1253,6 +1517,11 @@ msgstr "将被优先使用。" msgid "Please provide a name to each element of 'measure.vars'." msgstr "请为 'measure.vars' 中的每个元素提供一个名称。" +msgid "" +"Duplicate column names found in molten data.table. Setting unique names " +"using 'make.names'" +msgstr "" + msgid "" "y and x must both be data.tables. Use `setDT()` to convert list/data.frames " "to data.tables by reference or as.data.table() to convert to data.tables by " @@ -1392,6 +1661,12 @@ msgstr "" "显示却重叠'的印象,(所以)请确保POSIXct类型的间隔列具有相同的'时区'属性以避" "免混乱。" +msgid "unique() + setkey() operations done in ..." +msgstr "" + +msgid "binary search(es) done in ..." +msgstr "" + msgid "Not yet implemented" msgstr "尚未实现" @@ -1591,6 +1866,10 @@ msgstr "正则 \"" msgid "\". Please double check the input file is a valid csvy." msgstr "从这里开始" +msgid "" +"Processed %d lines of YAML metadata with the following top-level fields: %s" +msgstr "" + msgid "User-supplied 'header' will override that found in metadata." msgstr "用户提供的'header'将覆盖元数据中的表头" @@ -1657,6 +1936,9 @@ msgstr ":" msgid "so the column has been left as type '" msgstr "所以该列已经被保存为类型" +msgid "stringsAsFactors=%s converted %d column(s): %s" +msgstr "" + msgid "" "key argument of data.table() must be a character vector naming columns (NB: " "col.names are applied before this)" @@ -1683,6 +1965,9 @@ msgstr "" msgid "x being coerced from class: matrix to data.table" msgstr "x 的类将强制从 matrix 转变为 data.table" +msgid "Appending to existing file so setting bom=FALSE and yaml=FALSE" +msgstr "" + msgid "Input has no columns; doing nothing." msgstr "输入没有列,不执行任何操作。" @@ -1778,9 +2063,54 @@ msgid "" "Using integer64 class columns require to have 'bit64' package installed." msgstr "要在列中使用 integer64 类,需要先安装 'bit64' 包。" -msgid "'xts' class passed to %s function but 'xts' is not available, you should have 'xts' installed already" +msgid "last: using xts::last: !is.xts(x) & nargs>1 & 'package:xts'%in%search()" +msgstr "" + +msgid "" +"last: using utils::tail: !is.xts(x) & nargs>1 & !'package:xts'%in%search()" +msgstr "" + +msgid "last: using 'x[[length(x)]]': !is.xts(x) & !nargs>1 & is.null(dim(x))" +msgstr "" + +msgid "last: using 'x[nrow(x),]': !is.xts(x) & !nargs>1 & is.data.frame(x)" +msgstr "" + +msgid "" +"last: using utils::tail: !is.xts(x) & !nargs>1 & !is.null(dim(x)) & !is.data." +"frame(x)" +msgstr "" + +msgid "" +"'xts' class passed to %s function but 'xts' is not available, you should " +"have 'xts' installed already" msgstr "'xts'类对象传递给了%s方程,但是'xts'包不可用。您应首先安装'xts'包" +msgid "last: using xts::last: is.xts(x)" +msgstr "" + +msgid "" +"first: using xts::first: !is.xts(x) & nargs>1 & 'package:xts'%in%search()" +msgstr "" + +msgid "" +"first: using utils::head: !is.xts(x) & nargs>1 & !'package:xts'%in%search()" +msgstr "" + +msgid "first: using 'x[[1L]]': !is.xts(x) & !nargs>1 & is.null(dim(x))" +msgstr "" + +msgid "first: using 'x[1L,]': !is.xts(x) & !nargs>1 & is.data.frame(x)" +msgstr "" + +msgid "" +"first: using utils::head: !is.xts(x) & !nargs>1 & !is.null(dim(x)) & !is." +"data.frame(x)" +msgstr "" + +msgid "first: using xts::first: is.xts(x)" +msgstr "" + msgid "Argument 'sort' should be logical TRUE/FALSE" msgstr "参数 'sort' 应为逻辑值 TRUE 或 FALSE" @@ -1989,6 +2319,15 @@ msgstr "对col.names有效的参数为'auto', 'top', and 'none'" msgid "Column classes will be suppressed when col.names is 'none'" msgstr "当col.names为'none'时,列的类型将被抑制" +msgid "Key: <%s>" +msgstr "" + +msgid "Null data.%s (0 rows and 0 cols)" +msgstr "" + +msgid "Empty data.%s (%d rows and %d cols)" +msgstr "" + msgid "" "Internal structure doesn't seem to be a list. Possibly corrupt data.table." msgstr "内部类型可能不是一个列表,该操作可能会损坏data.table" @@ -2052,6 +2391,18 @@ msgid "" "report." msgstr "内部错误: 目前在setkey中,'cols'应该是字符类型, 请报告" +msgid "forder took" +msgstr "" + +msgid "setkey on columns %s using existing index '%s'" +msgstr "" + +msgid "reorder took" +msgstr "" + +msgid "x is already ordered by these columns, no need to call reorder" +msgstr "" + msgid "Internal error: index '" msgstr "内部错误:索引" @@ -2084,13 +2435,23 @@ msgstr "" msgid "Internal code should not be being called on type double" msgstr "内部代码不应被调用给双精度类型" -msgid "Input is not a vector of type double. New parallel sort has only been done for double vectors so far. Using one thread." -msgstr "输入一个并非双精度类型的向量。目前新的并行排序方法仅可应用于双精确度向量。将使用单线程进行计算" +msgid "" +"Input is not a vector of type double. New parallel sort has only been done " +"for double vectors so far. Using one thread." +msgstr "" +"输入一个并非双精度类型的向量。目前新的并行排序方法仅可应用于双精确度向量。将" +"使用单线程进行计算" -msgid "New parallel sort has not been implemented for decreasing=TRUE so far. Using one thread." -msgstr "目前新的并行排序方法尚无法在decreasing=TRUE的条件下使用。将使用单线程进行计算。" +msgid "" +"New parallel sort has not been implemented for decreasing=TRUE so far. Using " +"one thread." +msgstr "" +"目前新的并行排序方法尚无法在decreasing=TRUE的条件下使用。将使用单线程进行计" +"算。" -msgid "New parallel sort has not been implemented for vectors containing NA values so far. Using one thread." +msgid "" +"New parallel sort has not been implemented for vectors containing NA values " +"so far. Using one thread." msgstr "目前新的并行排序方法尚无法用于包含缺失值的向量。将使用单线程。" msgid "x must be a data.frame or data.table" @@ -2099,11 +2460,16 @@ msgstr "x 必须为 data.frame 或 data.table" msgid "na.last must be logical TRUE/FALSE" msgstr "na.last 必须为逻辑 TRUE/FALSE" -msgid "cols is not a character vector. Please see further information in ?setorder." +msgid "" +"cols is not a character vector. Please see further information in ?setorder." msgstr "cols并非一个字符向量。请参考 ?setorder以获得更多信息。" -msgid "cols is a character vector of zero length. Use NULL instead, or wrap with suppressWarnings() to avoid this warning." -msgstr "cols为一长度为零的字符向量。请使用NULL代替,或将本函数使用suppressWarnings()包裹以阻止该警告。" +msgid "" +"cols is a character vector of zero length. Use NULL instead, or wrap with " +"suppressWarnings() to avoid this warning." +msgstr "" +"cols为一长度为零的字符向量。请使用NULL代替,或将本函数使用suppressWarnings()" +"包裹以阻止该警告。" msgid "' which is not supported for ordering currently." msgstr "',该类型目前尚不支持排序。" @@ -2114,7 +2480,10 @@ msgstr "'sorted' 为 TRUE 但元素" msgid "is non-atomic, which can't be sorted; try setting sorted = FALSE" msgstr "并非原子类型,无法排序。请尝试使用 sorted=FALSE" -msgid "Cross product of elements provided to CJ() would result in %d rows which exceeds .Machine$integer.max == %d" +#, fuzzy +msgid "" +"Cross product of elements provided to CJ() would result in %.0f rows which " +"exceeds .Machine$integer.max == %d" msgstr "CJ()中元素的叉积将产生 %d 行,已超过 .Machine$integer.max == %d" msgid "x and y must both be data.tables" @@ -2207,12 +2576,18 @@ msgstr "内部错误:此时不匹配的因子类型应已被发现" msgid "argument 'fill' ignored, only make sense for type='const'" msgstr "参数 'fill' 将被忽略,因其仅当 type='const'时有意义" +msgid "No objects of class data.table exist in" +msgstr "" + msgid "order.col='" msgstr "order.col='" msgid "' not a column name of info" msgstr "' 并非info的一个列名" +msgid "Total:" +msgstr "" + msgid "data.table package is loaded. Unload or start a fresh R session." msgstr "data.table 包已被加载。请将其卸载或启动一个新的 R 会话。" @@ -2226,6 +2601,19 @@ msgstr "" msgid "Neither %s nor %s exist in %s" msgstr "%3$s 中 %1$s 也 %2$s 不存在" +msgid "getDTthreads(verbose=TRUE):" +msgstr "" + +msgid "test.data.table() running:" +msgstr "" + +msgid "" +"**** This R session's language is not English. Each test will still check " +"that the correct number of errors and/or\n" +"**** warnings are produced. However, to test the text of each error/warning " +"too, please restart R with LANGUAGE=en" +msgstr "" + msgid "Failed after test" msgstr "错误出现于测试" @@ -2247,6 +2635,15 @@ msgstr "计时不一致:" msgid "vs" msgstr "vs" +msgid "10 longest running tests took" +msgstr "" + +msgid "All %d tests in %s completed ok in %s" +msgstr "" + +msgid "Running test id %s" +msgstr "" + msgid "Test" msgstr "测试" @@ -2254,6 +2651,42 @@ msgid "" "is invalid: when error= is provided it does not make sense to pass y as well" msgstr "无效:当使用了error=,不应再输入y" +msgid "Test id %s is not in increasing order" +msgstr "" + +msgid "Test %s produced %d %ss but expected %d" +msgstr "" + +msgid "" +"Test %s didn't produce the correct %s:\n" +"Expected: %s\n" +"Observed: %s" +msgstr "" + +msgid "Output captured before unexpected warning/error/message:" +msgstr "" + +msgid "" +"Test %s did not produce the correct output:\n" +"Expected: <<%s>>\n" +"Observed <<%s>>" +msgstr "" + +msgid "" +"Test %s produced output but should not have:\n" +"Expected absent (case insensitive): <<%s>>\n" +"Observed: <<%s>>" +msgstr "" + +msgid "Test %s ran without errors but selfrefok(%s) is FALSE" +msgstr "" + +msgid "Test %s ran without errors but failed check that x equals y:" +msgstr "" + +msgid "First %d of %d (type '%s'):" +msgstr "" + msgid "Use started.at=proc.time() not Sys.time() (POSIXt and slow)" msgstr "使用started.at=proc.time()而非Sys.time() (返回POSIXt类型,处理较慢)" @@ -2334,6 +2767,10 @@ msgstr "" msgid "Following columns are not numeric and will be omitted:" msgstr "以下的列并非数值类型,将被忽略:" +msgid "Index: " +msgid_plural "Indices: " +msgstr[0] "" + msgid "%d variable not shown: %s\n" msgid_plural "%d variables not shown: %s\n" msgstr[0] "%d变量没显示: %s\n" From 813aeac50830d49cc6813054e8184b415fae9e29 Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Tue, 31 Dec 2019 14:40:12 +0800 Subject: [PATCH 02/28] remove fuzzy --- .dev/CRAN_Release.cmd | 6 ++++++ po/R-zh_CN.po | 6 ++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/.dev/CRAN_Release.cmd b/.dev/CRAN_Release.cmd index 736bd66be1..27e3c84621 100644 --- a/.dev/CRAN_Release.cmd +++ b/.dev/CRAN_Release.cmd @@ -47,6 +47,12 @@ cd .. ## (as opposed to cat(gettext(["'] instances) and wraps them ## in gettext. Some manual inspection is required as this approach ## is over-eager (e.g. cat("\n") -> cat(gettext("\n")) is unnecessary) +## Run 2nd time with '[^']*' to find cat(' (none so far) +for SRC_FILE in R/*; + do sed -E "s/cat[(](\"[^\"]*\")/cat(gettext(\1, domain=\"R-data.table\")/g" $SRC_FILE > out; + mv out $SRC_FILE; +done + R --no-save ## a bug fix in R still hadn't made the 2019-12-12 release, ## so run the following to source the corrected function manually diff --git a/po/R-zh_CN.po b/po/R-zh_CN.po index 05e8f1f82b..803f23ec53 100644 --- a/po/R-zh_CN.po +++ b/po/R-zh_CN.po @@ -279,9 +279,8 @@ msgstr "不等长联结还不能执行 roll " msgid "forder took ..." msgstr "" -#, fuzzy msgid "Generating group lengths ..." -msgstr ";其长度应为 2。" +msgstr "" msgid "Generating non-equi group ids ..." msgstr "" @@ -2480,11 +2479,10 @@ msgstr "'sorted' 为 TRUE 但元素" msgid "is non-atomic, which can't be sorted; try setting sorted = FALSE" msgstr "并非原子类型,无法排序。请尝试使用 sorted=FALSE" -#, fuzzy msgid "" "Cross product of elements provided to CJ() would result in %.0f rows which " "exceeds .Machine$integer.max == %d" -msgstr "CJ()中元素的叉积将产生 %d 行,已超过 .Machine$integer.max == %d" +msgstr "CJ()中元素的叉积将产生 %.0f 行,已超过 .Machine$integer.max == %d" msgid "x and y must both be data.tables" msgstr "x 和 y 均需为 data.table" From d03ba8327d6de6ae45f46207ca4c44a8a3807e9d Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Tue, 31 Dec 2019 15:14:53 +0800 Subject: [PATCH 03/28] consistency of key/index, template repetitive msg in last --- R/data.table.R | 2 +- R/last.R | 24 +++--- inst/po/en@quot/LC_MESSAGES/R-data.table.mo | Bin 104426 -> 102582 bytes inst/po/zh_CN/LC_MESSAGES/R-data.table.mo | Bin 87135 -> 87609 bytes inst/po/zh_CN/LC_MESSAGES/data.table.mo | Bin 138485 -> 138523 bytes po/R-data.table.pot | 39 +-------- po/R-zh_CN.po | 88 ++++++-------------- po/zh_CN.po | 8 +- 8 files changed, 44 insertions(+), 117 deletions(-) diff --git a/R/data.table.R b/R/data.table.R index ac36066cbe..444ba2e972 100644 --- a/R/data.table.R +++ b/R/data.table.R @@ -484,7 +484,7 @@ replace_dot_alias = function(e) { if (identical(nomatch, 0L) && allLen1) irows = irows[irows != 0L] } else { if (length(xo) && missing(on)) - stop("Internal error. Cannot by=.EACHI when joining to a secondary key, yet") # nocov + stop("Internal error. Cannot by=.EACHI when joining to an index, yet") # nocov # since f__ refers to xo later in grouping, so xo needs to be passed through to dogroups too. if (length(irows)) stop("Internal error. irows has length in by=.EACHI") # nocov diff --git a/R/last.R b/R/last.R index 164185b17b..2d1efea4d0 100644 --- a/R/last.R +++ b/R/last.R @@ -7,12 +7,12 @@ last = function(x, n=1L, ...) { if (nargs()>1L) { if ("package:xts" %chin% search()) { if (verbose) - cat(gettext("last: using xts::last: !is.xts(x) & nargs>1 & 'package:xts'%in%search()\n", domain="R-data.table")) + cat(gettextf("%s: using %s: %s\n", "last", "xts::last", "!is.xts(x) & nargs>1 & 'package:xts'%in%search()", domain="R-data.table")) xts::last(x, n=n, ...) } else { # nocov start if (verbose) - cat(gettext("last: using utils::tail: !is.xts(x) & nargs>1 & !'package:xts'%in%search()\n", domain="R-data.table")) + cat(gettextf("%s: using %s: %s\n", "last", "utils::tail", "!is.xts(x) & nargs>1 & !'package:xts'%in%search()", domain="R-data.table")) utils::tail(x, n=n, ...) # nocov end } @@ -20,16 +20,16 @@ last = function(x, n=1L, ...) { dx = dim(x) if (is.null(dx)) { if (verbose) - cat(gettext("last: using 'x[[length(x)]]': !is.xts(x) & !nargs>1 & is.null(dim(x))\n", domain="R-data.table")) + cat(gettextf("%s: using %s: %s\n", "last", "'x[[length(x)]]'", "!is.xts(x) & !nargs>1 & is.null(dim(x))", domain="R-data.table")) lx = length(x) if (!lx) x else x[[lx]] } else if (is.data.frame(x)) { if (verbose) - cat(gettext("last: using 'x[nrow(x),]': !is.xts(x) & !nargs>1 & is.data.frame(x)\n", domain="R-data.table")) + cat(gettextf("%s: using %s: %s\n", "last", "'x[nrow(x),]'", "!is.xts(x) & !nargs>1 & is.data.frame(x)", domain="R-data.table")) x[dx[1L], , drop=FALSE] } else { if (verbose) - cat(gettext("last: using utils::tail: !is.xts(x) & !nargs>1 & !is.null(dim(x)) & !is.data.frame(x)\n", domain="R-data.table")) + cat(gettextf("%s: using %s: %s\n", "last", "utils::tail", "!is.xts(x) & !nargs>1 & !is.null(dim(x)) & !is.data.frame(x)", domain="R-data.table")) utils::tail(x, n=n, ...) } } @@ -37,7 +37,7 @@ last = function(x, n=1L, ...) { if (!requireNamespace("xts", quietly=TRUE)) stop(gettextf("'xts' class passed to %s function but 'xts' is not available, you should have 'xts' installed already", "data.table::last", domain="R-data.table")) # nocov if (verbose) - cat(gettext("last: using xts::last: is.xts(x)\n", domain="R-data.table")) + cat(gettextf("%s: using %s: %s\n", "last", "xts::last", "is.xts(x)", domain="R-data.table")) xts::last(x, n=n, ...) } } @@ -48,12 +48,12 @@ first = function(x, n=1L, ...) { if (nargs()>1L) { if ("package:xts" %chin% search()) { if (verbose) - cat(gettext("first: using xts::first: !is.xts(x) & nargs>1 & 'package:xts'%in%search()\n", domain="R-data.table")) + cat(gettextf("%s: using %s: %s\n", "first", "xts::first", "!is.xts(x) & nargs>1 & 'package:xts'%in%search()", domain="R-data.table")) xts::first(x, n=n, ...) } else { # nocov start if (verbose) - cat(gettext("first: using utils::head: !is.xts(x) & nargs>1 & !'package:xts'%in%search()\n", domain="R-data.table")) + cat(gettextf("%s: using %s: %s\n", "first", "utils::head", "!is.xts(x) & nargs>1 & !'package:xts'%in%search()", domain="R-data.table")) utils::head(x, n=n, ...) # nocov end } @@ -61,16 +61,16 @@ first = function(x, n=1L, ...) { dx = dim(x) if (is.null(dx)) { if (verbose) - cat(gettext("first: using 'x[[1L]]': !is.xts(x) & !nargs>1 & is.null(dim(x))\n", domain="R-data.table")) + cat(gettextf("%s: using %s: %s\n", "first", "'x[[1L]]'", "!is.xts(x) & !nargs>1 & is.null(dim(x))", domain="R-data.table")) lx = length(x) if (!lx) x else x[[1L]] } else if (is.data.frame(x)) { if (verbose) - cat(gettext("first: using 'x[1L,]': !is.xts(x) & !nargs>1 & is.data.frame(x)\n", domain="R-data.table")) + cat(gettextf("%s: using %s: %s\n", "first", "'x[1L,]'", "!is.xts(x) & !nargs>1 & is.data.frame(x)", domain="R-data.table")) if (!dx[1L]) x else x[1L, , drop=FALSE] } else { if (verbose) - cat(gettext("first: using utils::head: !is.xts(x) & !nargs>1 & !is.null(dim(x)) & !is.data.frame(x)\n", domain="R-data.table")) + cat(gettextf("%s: using %s: %s\n", "first", "utils::head", "!is.xts(x) & !nargs>1 & !is.null(dim(x)) & !is.data.frame(x)", domain="R-data.table")) utils::head(x, n=n, ...) } } @@ -78,7 +78,7 @@ first = function(x, n=1L, ...) { if (!requireNamespace("xts", quietly=TRUE)) stop(gettextf("'xts' class passed to %s function but 'xts' is not available, you should have 'xts' installed already", "data.table::first", domain="R-data.table")) # nocov if (verbose) - cat(gettext("first: using xts::first: is.xts(x)\n", domain="R-data.table")) + cat(gettextf("%s: using %s: %s\n", "first", "xts::first", "is.xts(x)", domain="R-data.table")) xts::first(x, n=n, ...) } } diff --git a/inst/po/en@quot/LC_MESSAGES/R-data.table.mo b/inst/po/en@quot/LC_MESSAGES/R-data.table.mo index 5c52c9a079aaa72330d2eb1bd3b7f2bebfd7632d..36930aa6412dc636e5c9d2a4c54dae198e324788 100644 GIT binary patch delta 14691 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 delta 12671 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 diff --git a/inst/po/zh_CN/LC_MESSAGES/data.table.mo b/inst/po/zh_CN/LC_MESSAGES/data.table.mo index c5d63fb7d333e36e882685abafccd4c609d72aa0..02d1a5b05e72a8ca51535b4365defbd8f57f35a4 100644 GIT binary patch delta 5846 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\n" "Language-Team: LANGUAGE \n" @@ -406,7 +406,7 @@ msgstr "" msgid "Constructing irows for '!byjoin || nqbyjoin' ..." msgstr "" -msgid "Internal error. Cannot by=.EACHI when joining to a secondary key, yet" +msgid "Internal error. Cannot by=.EACHI when joining to an index, yet" msgstr "" msgid "Internal error. irows has length in by=.EACHI" @@ -1531,45 +1531,12 @@ msgstr "" msgid "Using integer64 class columns require to have 'bit64' package installed." msgstr "" -msgid "last: using xts::last: !is.xts(x) & nargs>1 & 'package:xts'%in%search()" -msgstr "" - -msgid "last: using utils::tail: !is.xts(x) & nargs>1 & !'package:xts'%in%search()" -msgstr "" - -msgid "last: using 'x[[length(x)]]': !is.xts(x) & !nargs>1 & is.null(dim(x))" -msgstr "" - -msgid "last: using 'x[nrow(x),]': !is.xts(x) & !nargs>1 & is.data.frame(x)" -msgstr "" - -msgid "last: using utils::tail: !is.xts(x) & !nargs>1 & !is.null(dim(x)) & !is.data.frame(x)" +msgid "%s: using %s: %s" msgstr "" msgid "'xts' class passed to %s function but 'xts' is not available, you should have 'xts' installed already" msgstr "" -msgid "last: using xts::last: is.xts(x)" -msgstr "" - -msgid "first: using xts::first: !is.xts(x) & nargs>1 & 'package:xts'%in%search()" -msgstr "" - -msgid "first: using utils::head: !is.xts(x) & nargs>1 & !'package:xts'%in%search()" -msgstr "" - -msgid "first: using 'x[[1L]]': !is.xts(x) & !nargs>1 & is.null(dim(x))" -msgstr "" - -msgid "first: using 'x[1L,]': !is.xts(x) & !nargs>1 & is.data.frame(x)" -msgstr "" - -msgid "first: using utils::head: !is.xts(x) & !nargs>1 & !is.null(dim(x)) & !is.data.frame(x)" -msgstr "" - -msgid "first: using xts::first: is.xts(x)" -msgstr "" - msgid "Argument 'sort' should be logical TRUE/FALSE" msgstr "" diff --git a/po/R-zh_CN.po b/po/R-zh_CN.po index 63d32bf3a1..3b54b5c750 100644 --- a/po/R-zh_CN.po +++ b/po/R-zh_CN.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: data.table 1.12.5\n" -"POT-Creation-Date: 2019-12-31 14:30\n" +"POT-Creation-Date: 2019-12-31 14:55\n" "PO-Revision-Date: 2019-11-16 18:37+0800\n" "Last-Translator: Xianying Tan \n" "Language-Team: Mandarin\n" @@ -171,13 +171,13 @@ msgid "the second element should be the upper bound(s)." msgstr "第二个元素应为上界。" msgid "forderv(query) took ..." -msgstr "" +msgstr "forderv(query) 用了 ..." msgid "Generating final logical vector ..." msgstr "" msgid "done in" -msgstr "" +msgstr "结束了" msgid "x." msgstr "x." @@ -277,7 +277,7 @@ msgid "roll is not implemented for non-equi joins yet." msgstr "不等长联结还不能执行 roll " msgid "forder took ..." -msgstr "" +msgstr "forder 用了 ..." msgid "Generating group lengths ..." msgstr "" @@ -298,7 +298,7 @@ msgid "Starting bmerge ..." msgstr "" msgid "bmerge done in" -msgstr "" +msgstr "bmerge 结束了" msgid "" "cedta decided '%s' wasn't data.table aware. Here is call stack with [[1L]] " @@ -306,7 +306,7 @@ msgid "" msgstr "" msgid "key argument of data.table() must be character" -msgstr "data.table() 的主参数必须是字符" +msgstr "data.table() 的key参数必须是字符" msgid "Object '" msgstr "对象 '" @@ -504,7 +504,7 @@ msgstr "" "但i是一个 data.table (或者是字符向量),必须使用 'on=' 参数指明参与连接的列 " "(参见 ?data.table),可以是keying x(比如,已排序过,和标记已排序过,请参见?" "setkey),或者是在x和i共用列的名字(比如,自然连接)。如果x有在内存被排序过," -"Keyed连接的速度会在非常大的数据上有较明显的提高。" +"键(keyed)连接的速度会在非常大的数据上有较明显的提高。" msgid "Attempting to do natural join but no common columns in provided tables" msgstr "尝试进行自然连接然而并没有找到表格中相同的列" @@ -518,8 +518,8 @@ msgstr "" msgid "Constructing irows for '!byjoin || nqbyjoin' ..." msgstr "" -msgid "Internal error. Cannot by=.EACHI when joining to a secondary key, yet" -msgstr "内部错误:目前尚无法对次键使用by=.EACH命令" +msgid "Internal error. Cannot by=.EACHI when joining to an index, yet" +msgstr "内部错误:目前尚无法对索引(index)使用by=.EACH命令" msgid "Internal error. irows has length in by=.EACHI" msgstr "内部错误:by=.EACHI 中 irows 有长度" @@ -731,7 +731,7 @@ msgid "" msgstr "" msgid "New:" -msgstr "" +msgstr "新:" msgid "" ".SD is locked. Using := in .SD's j is reserved for possible future use; a " @@ -890,7 +890,7 @@ msgid "Finding groups using uniqlist on key ..." msgstr "" msgid "Internal error: byindex not the index name" -msgstr "内部错误 : byindex 不是索引名称" +msgstr "内部错误 : byindex 不是索引(index)名称" msgid "Finding groups using uniqlist on index '%s' ..." msgstr "" @@ -982,7 +982,7 @@ msgstr "" "行名长度为零,`length(rownames)==0`,但应该为单一列名,单一数值,或NULL" msgid "rownames is TRUE but key has multiple columns" -msgstr "rownames是TRUE但key不只一个列" +msgstr "rownames是TRUE但键(key)不只一个列" msgid "; taking first column x[,1] as rownames" msgstr "; 取第一列, `column x[,1]`, 为rownames" @@ -1548,7 +1548,7 @@ msgid "" "'y' must be keyed (i.e., sorted, and, marked as sorted). Call setkey(y, ...) " "first, see ?setkey. Also check the examples in ?foverlaps." msgstr "" -"'y' 必须有主键(已经排序并且标记为已排序)。请先用 setkey(y, ...) 设置主键," +"'y' 必须有键(key:已经排序并且标记为已排序)。请先用 setkey(y, ...) 设置主键," "可以参考 ?setkey 以及 ?foverlaps 中提供的例子。" msgid "" @@ -1580,7 +1580,7 @@ msgid "The first" msgstr "首先" msgid "columns of y's key must be identical to the columns specified in by.y." -msgstr "在'by.y'中,y键的列必须与指定的列相同" +msgstr "在'by.y'中,y键(key)的列必须与指定的列相同" msgid "Elements listed in 'by.x' must be valid names in data.table 'x'" msgstr "对于data.table中的'X','by.x'中的元素必须是有效名称" @@ -1942,7 +1942,7 @@ msgid "" "key argument of data.table() must be a character vector naming columns (NB: " "col.names are applied before this)" msgstr "" -"data.table()的关键参数必须是字符向量命名的列(NB:col.names在这之前被使用过)" +"data.table()的key参数必须是字符向量命名的列(NB:col.names在这之前被使用过)" msgid "" "index argument of data.table() must be a character vector naming columns " @@ -2062,54 +2062,14 @@ msgid "" "Using integer64 class columns require to have 'bit64' package installed." msgstr "要在列中使用 integer64 类,需要先安装 'bit64' 包。" -msgid "last: using xts::last: !is.xts(x) & nargs>1 & 'package:xts'%in%search()" -msgstr "" - -msgid "" -"last: using utils::tail: !is.xts(x) & nargs>1 & !'package:xts'%in%search()" -msgstr "" - -msgid "last: using 'x[[length(x)]]': !is.xts(x) & !nargs>1 & is.null(dim(x))" -msgstr "" - -msgid "last: using 'x[nrow(x),]': !is.xts(x) & !nargs>1 & is.data.frame(x)" -msgstr "" - -msgid "" -"last: using utils::tail: !is.xts(x) & !nargs>1 & !is.null(dim(x)) & !is.data." -"frame(x)" -msgstr "" +msgid "%s: using %s: %s" +msgstr "%s: 用 %s: %s" msgid "" "'xts' class passed to %s function but 'xts' is not available, you should " "have 'xts' installed already" msgstr "'xts'类对象传递给了%s方程,但是'xts'包不可用。您应首先安装'xts'包" -msgid "last: using xts::last: is.xts(x)" -msgstr "" - -msgid "" -"first: using xts::first: !is.xts(x) & nargs>1 & 'package:xts'%in%search()" -msgstr "" - -msgid "" -"first: using utils::head: !is.xts(x) & nargs>1 & !'package:xts'%in%search()" -msgstr "" - -msgid "first: using 'x[[1L]]': !is.xts(x) & !nargs>1 & is.null(dim(x))" -msgstr "" - -msgid "first: using 'x[1L,]': !is.xts(x) & !nargs>1 & is.data.frame(x)" -msgstr "" - -msgid "" -"first: using utils::head: !is.xts(x) & !nargs>1 & !is.null(dim(x)) & !is." -"data.frame(x)" -msgstr "" - -msgid "first: using xts::first: is.xts(x)" -msgstr "" - msgid "Argument 'sort' should be logical TRUE/FALSE" msgstr "参数 'sort' 应为逻辑值 TRUE 或 FALSE" @@ -2320,7 +2280,7 @@ msgid "Column classes will be suppressed when col.names is 'none'" msgstr "当col.names为'none'时,列的类型将被抑制" msgid "Key: <%s>" -msgstr "" +msgstr "键(key): <%s>" msgid "Null data.%s (0 rows and 0 cols)" msgstr "" @@ -2357,7 +2317,7 @@ msgid "" "the original data's order by group. Try setindex() instead. Or, set*(copy(." "SD)) as a (slow) last resort." msgstr "" -"在.SD设置一个物理的键的功能被保留,以备未来的需求; 如需通过分组修改原数据顺序" +"在.SD设置一个物理的键(key)的功能被保留,以备未来的需求; 如需通过分组修改原数据顺序" "请使用setindex(), 或者set*(copy(.SD))作为最终(该方式缓慢)的方法" msgid "" @@ -2368,7 +2328,7 @@ msgstr "" "来避免警告" msgid "cols is the empty string. Use NULL to remove the key." -msgstr "列为一个空字符串,请使用NULL以删除键值。" +msgstr "列为一个空字符串,请使用NULL以删除键(key)值。" msgid "cols contains some blanks." msgstr "列中包含空白" @@ -2384,7 +2344,7 @@ msgid "' is type '" msgstr "是类型" msgid "' which is not supported as a key column type, currently." -msgstr "目前不是一种被支持的列类型" +msgstr "目前不是一种被支持的键(key)列类型" msgid "" "Internal error. 'cols' should be character at this point in setkey; please " @@ -2404,7 +2364,7 @@ msgid "x is already ordered by these columns, no need to call reorder" msgstr "" msgid "Internal error: index '" -msgstr "内部错误:索引" +msgstr "内部错误:索引(index) '" msgid "' exists but is invalid" msgstr "存在但无效" @@ -2753,7 +2713,7 @@ msgid "" "rownames=FALSE` and add index manually as another column." msgstr "" "输入的xts对象不能含有'index'列,因这会导致出现重复的列名。请尝试重新命名xts中" -"的'index'列或者使用`keep.rownames=FALSE`并手动添加index为另外的列" +"的'index'列或者使用`keep.rownames=FALSE`并手动添加索引(index)为另外的列" msgid "" "data.table must have a time based column in first position, use " @@ -2768,7 +2728,7 @@ msgstr "以下的列并非数值类型,将被忽略:" msgid "Index: " msgid_plural "Indices: " -msgstr[0] "" +msgstr[0] "索引(index): " msgid "%d variable not shown: %s\n" msgid_plural "%d variables not shown: %s\n" diff --git a/po/zh_CN.po b/po/zh_CN.po index 6a95727f07..a3da635c2a 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -442,12 +442,12 @@ msgid "" "Dropping index '%s' as it doesn't have '__' at the beginning of its name. It " "was very likely created by v1.9.4 of data.table.\n" msgstr "" -"丢掉索引 '%s' 因为它的名字前面没有 '__' 。这个很可能是 data.table v1.9.4 创建" +"丢掉索引(index) '%s' 因为它的名字前面没有 '__' 。这个很可能是 data.table v1.9.4 创建" "的\n" #: assign.c:562 msgid "Internal error: index name ends with trailing __" -msgstr "内部错误: 索引名称以 __ 结尾" +msgstr "内部错误: 索引(index)名称以 __ 结尾" #: assign.c:567 msgid "Internal error: Couldn't allocate memory for s4." @@ -460,12 +460,12 @@ msgstr "内部错误: 不能给 s5 分配内存" #: assign.c:599 assign.c:615 #, c-format msgid "Dropping index '%s' due to an update on a key column\n" -msgstr " 因为一个主列的更新,丢掉索引 '%s'\n" +msgstr " 因为一个键(key)列的更新,丢掉索引(index) '%s'\n" #: assign.c:608 #, c-format msgid "Shortening index '%s' to '%s' due to an update on a key column\n" -msgstr "因为一个主列的更新,缩短索引 '%s' 到 '%s'\n" +msgstr "因为一个键(key)列的更新,缩短索引(index) '%s' 到 '%s'\n" #: assign.c:680 #, c-format From 0d6dd6e108145b6b0bdec44839a0a762ee83cd9a Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Tue, 31 Dec 2019 15:39:30 +0800 Subject: [PATCH 04/28] translated the easy ones --- R/tables.R | 2 +- R/test.data.table.R | 2 +- inst/po/en@quot/LC_MESSAGES/R-data.table.mo | Bin 102582 -> 102516 bytes inst/po/zh_CN/LC_MESSAGES/R-data.table.mo | Bin 87609 -> 88535 bytes po/R-data.table.pot | 7 +-- po/R-zh_CN.po | 47 +++++++++----------- 6 files changed, 26 insertions(+), 32 deletions(-) diff --git a/R/tables.R b/R/tables.R index 3689519e5a..7813bd19ac 100644 --- a/R/tables.R +++ b/R/tables.R @@ -8,7 +8,7 @@ tables = function(mb=TRUE, order.col="NAME", width=80, all_obj = objects(envir=env, all.names=TRUE) is_DT = which(vapply_1b(all_obj, function(x) is.data.table(get(x, envir=env)))) if (!length(is_DT)) { - if (!silent) cat(gettext("No objects of class data.table exist in", domain="R-data.table"), if (identical(env,.GlobalEnv)) ".GlobalEnv" else format(env), "\n") + if (!silent) cat(gettextf("No objects of class data.table exist in %s\n", if (identical(env, .GlobalEnv)) ".GlobalEnv" else format(env), domain="R-data.table")) return(invisible(data.table(NULL))) } DT_names = all_obj[is_DT] diff --git a/R/test.data.table.R b/R/test.data.table.R index 79ebaf5a45..ba876693d0 100644 --- a/R/test.data.table.R +++ b/R/test.data.table.R @@ -83,7 +83,7 @@ test.data.table = function(script="tests.Rraw", verbose=FALSE, pkg=".", silent=F width = max(getOption('width'), 80L) # some tests (e.g. 1066, 1293) rely on capturing output that will be garbled with small width ) - cat(gettext("getDTthreads(verbose=TRUE):\n", domain="R-data.table")) # for tracing on CRAN; output to log before anything is attempted + cat("getDTthreads(verbose=TRUE):\n") # for tracing on CRAN; output to log before anything is attempted getDTthreads(verbose=TRUE) # includes the returned value in the verbose output (rather than dangling '[1] 4'); e.g. "data.table is using 4 threads" cat(gettext("test.data.table() running:", domain="R-data.table"), fn, "\n") # print fn to log before attempting anything on it (in case it is missing); on same line for slightly easier grep env = new.env(parent=.GlobalEnv) diff --git a/inst/po/en@quot/LC_MESSAGES/R-data.table.mo b/inst/po/en@quot/LC_MESSAGES/R-data.table.mo index 36930aa6412dc636e5c9d2a4c54dae198e324788..c70037499f145dd98568f9c50035ffcc20917544 100644 GIT binary patch delta 12614 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 delta 12673 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 diff --git a/inst/po/zh_CN/LC_MESSAGES/R-data.table.mo b/inst/po/zh_CN/LC_MESSAGES/R-data.table.mo index 3c8cef2c6c4cf53b18b7ccc7c8381403f1d059b1..b5091228650e1c5ad5e8a0c9031ea1ad296086ee 100644 GIT binary patch delta 13725 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 diff --git a/po/R-data.table.pot b/po/R-data.table.pot index 20bd7c4214..4c35f11761 100644 --- a/po/R-data.table.pot +++ b/po/R-data.table.pot @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: data.table 1.12.9\n" -"POT-Creation-Date: 2019-12-31 15:04\n" +"POT-Creation-Date: 2019-12-31 15:31\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -1876,7 +1876,7 @@ msgstr "" msgid "argument 'fill' ignored, only make sense for type='const'" msgstr "" -msgid "No objects of class data.table exist in" +msgid "No objects of class data.table exist in %s" msgstr "" msgid "order.col='" @@ -1897,9 +1897,6 @@ msgstr "" msgid "Neither %s nor %s exist in %s" msgstr "" -msgid "getDTthreads(verbose=TRUE):" -msgstr "" - msgid "test.data.table() running:" msgstr "" diff --git a/po/R-zh_CN.po b/po/R-zh_CN.po index 3b54b5c750..c3ae6ed8da 100644 --- a/po/R-zh_CN.po +++ b/po/R-zh_CN.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: data.table 1.12.5\n" -"POT-Creation-Date: 2019-12-31 14:55\n" +"POT-Creation-Date: 2019-12-31 15:31\n" "PO-Revision-Date: 2019-11-16 18:37+0800\n" "Last-Translator: Xianying Tan \n" "Language-Team: Mandarin\n" @@ -503,8 +503,8 @@ msgid "" msgstr "" "但i是一个 data.table (或者是字符向量),必须使用 'on=' 参数指明参与连接的列 " "(参见 ?data.table),可以是keying x(比如,已排序过,和标记已排序过,请参见?" -"setkey),或者是在x和i共用列的名字(比如,自然连接)。如果x有在内存被排序过," -"键(keyed)连接的速度会在非常大的数据上有较明显的提高。" +"setkey),或者是在x和i共用列的名字(比如,自然连接)。如果x有在内存被排序过,键" +"(keyed)连接的速度会在非常大的数据上有较明显的提高。" msgid "Attempting to do natural join but no common columns in provided tables" msgstr "尝试进行自然连接然而并没有找到表格中相同的列" @@ -1548,8 +1548,8 @@ msgid "" "'y' must be keyed (i.e., sorted, and, marked as sorted). Call setkey(y, ...) " "first, see ?setkey. Also check the examples in ?foverlaps." msgstr "" -"'y' 必须有键(key:已经排序并且标记为已排序)。请先用 setkey(y, ...) 设置主键," -"可以参考 ?setkey 以及 ?foverlaps 中提供的例子。" +"'y' 必须有键(key:已经排序并且标记为已排序)。请先用 setkey(y, ...) 设置主" +"键,可以参考 ?setkey 以及 ?foverlaps 中提供的例子。" msgid "" "'by.x' and 'by.y' should contain at least two column names (or numbers) each " @@ -1679,7 +1679,7 @@ msgid "length(na.last) > 1, only the first element will be used" msgstr "当na.last长度大于1时,只会使用第一个元素" msgid "x is a single vector, non-NULL 'cols' doesn't make sense" -msgstr "x是单个向量,非空的'cols'没有意义" +msgstr "x是单个向量,非NULL的'cols'没有意义" msgid "x is a list, 'cols' can not be 0-length" msgstr "x是一个list, 'cols'不能为0长度" @@ -2140,7 +2140,7 @@ msgid "" "**********" msgstr "" "**********\n" -"用中文运行data.table。软件包只提供英语支持。当在在线搜索帮助时,也要确保检查" +"用中文执行data.table。软件包只提供英语支持。当在在线搜索帮助时,也要确保检查" "英语错误信息。这个可以通过查看软件包源文件中的po/R-zh_CN.po和po/zh_CN.po文件" "获得,这个文件可以并排找到母语和英语错误信息。\n" "**********" @@ -2283,10 +2283,10 @@ msgid "Key: <%s>" msgstr "键(key): <%s>" msgid "Null data.%s (0 rows and 0 cols)" -msgstr "" +msgstr "NULL data.%s (0行,0列)" msgid "Empty data.%s (%d rows and %d cols)" -msgstr "" +msgstr "空的 data.%s (%d行,%d列)" msgid "" "Internal structure doesn't seem to be a list. Possibly corrupt data.table." @@ -2317,8 +2317,8 @@ msgid "" "the original data's order by group. Try setindex() instead. Or, set*(copy(." "SD)) as a (slow) last resort." msgstr "" -"在.SD设置一个物理的键(key)的功能被保留,以备未来的需求; 如需通过分组修改原数据顺序" -"请使用setindex(), 或者set*(copy(.SD))作为最终(该方式缓慢)的方法" +"在.SD设置一个物理的键(key)的功能被保留,以备未来的需求; 如需通过分组修改原数" +"据顺序请使用setindex(), 或者set*(copy(.SD))作为最终(该方式缓慢)的方法" msgid "" "cols is a character vector of zero length. Removed the key, but use NULL " @@ -2352,13 +2352,13 @@ msgid "" msgstr "内部错误: 目前在setkey中,'cols'应该是字符类型, 请报告" msgid "forder took" -msgstr "" +msgstr "forder 用了" msgid "setkey on columns %s using existing index '%s'" -msgstr "" +msgstr "setkey到列%s用现有索引(index) '%s'" msgid "reorder took" -msgstr "" +msgstr "reorder 用了" msgid "x is already ordered by these columns, no need to call reorder" msgstr "" @@ -2535,8 +2535,8 @@ msgstr "内部错误:此时不匹配的因子类型应已被发现" msgid "argument 'fill' ignored, only make sense for type='const'" msgstr "参数 'fill' 将被忽略,因其仅当 type='const'时有意义" -msgid "No objects of class data.table exist in" -msgstr "" +msgid "No objects of class data.table exist in %s" +msgstr "%s中没有 data.table类型的对象" msgid "order.col='" msgstr "order.col='" @@ -2545,7 +2545,7 @@ msgid "' not a column name of info" msgstr "' 并非info的一个列名" msgid "Total:" -msgstr "" +msgstr "共计:" msgid "data.table package is loaded. Unload or start a fresh R session." msgstr "data.table 包已被加载。请将其卸载或启动一个新的 R 会话。" @@ -2560,11 +2560,8 @@ msgstr "" msgid "Neither %s nor %s exist in %s" msgstr "%3$s 中 %1$s 也 %2$s 不存在" -msgid "getDTthreads(verbose=TRUE):" -msgstr "" - msgid "test.data.table() running:" -msgstr "" +msgstr "test.data.table() 执行:" msgid "" "**** This R session's language is not English. Each test will still check " @@ -2595,13 +2592,13 @@ msgid "vs" msgstr "vs" msgid "10 longest running tests took" -msgstr "" +msgstr "最慢10个测试用了" msgid "All %d tests in %s completed ok in %s" -msgstr "" +msgstr "%2$s中每%1$d个测试在%3$s结束了ok" msgid "Running test id %s" -msgstr "" +msgstr "执行测试 id %s" msgid "Test" msgstr "测试" @@ -2644,7 +2641,7 @@ msgid "Test %s ran without errors but failed check that x equals y:" msgstr "" msgid "First %d of %d (type '%s'):" -msgstr "" +msgstr "第%d之%d (类型 '%s'):" msgid "Use started.at=proc.time() not Sys.time() (POSIXt and slow)" msgstr "使用started.at=proc.time()而非Sys.time() (返回POSIXt类型,处理较慢)" From 965e59776300cc3ac7b3a2a179ba9419dbaaf40c Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Tue, 31 Dec 2019 15:54:10 +0800 Subject: [PATCH 05/28] correct mistaken gettext -> gettextf --- R/bmerge.R | 2 +- R/cedta.R | 2 +- R/data.table.R | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/R/bmerge.R b/R/bmerge.R index 171b097040..23a696fcc8 100644 --- a/R/bmerge.R +++ b/R/bmerge.R @@ -174,7 +174,7 @@ bmerge = function(i, x, icols, xcols, roll, rollends, nomatch, mult, ops, verbos xo = forderv(nqx, c(ncol(nqx), xcols)) if (verbose) {cat(gettext("done in", domain="R-data.table"),timetaken(last.started.at),"\n"); flush.console()} } else nqgrp = integer(0L) - if (verbose) cat(gettext(" Found %d non-equi group(s) ...\n", nqmaxgrp, domain="R-data.table")) + if (verbose) cat(gettextf(" Found %d non-equi group(s) ...\n", nqmaxgrp, domain="R-data.table")) } if (verbose) {last.started.at=proc.time();cat(gettext("Starting bmerge ...\n", domain="R-data.table"));flush.console()} diff --git a/R/cedta.R b/R/cedta.R index 3f6c894fbf..ce19796ad7 100644 --- a/R/cedta.R +++ b/R/cedta.R @@ -40,7 +40,7 @@ cedta = function(n=2L) { tryCatch("data.table" %chin% get(".Depends",paste("package",nsname,sep=":"),inherits=FALSE),error=function(e)FALSE) # both ns$.Depends and get(.Depends,ns) are not sufficient if (!ans && getOption("datatable.verbose")) { # nocov start - cat(gettext("cedta decided '%s' wasn't data.table aware. Here is call stack with [[1L]] applied:\n", nsname, domain="R-data.table")) + cat(gettextf("cedta decided '%s' wasn't data.table aware. Here is call stack with [[1L]] applied:\n", nsname, domain="R-data.table")) print(sapply(sys.calls(), "[[", 1L)) # nocov end # so we can trace the namespace name that may need to be added (very unusually) diff --git a/R/data.table.R b/R/data.table.R index 444ba2e972..f54c7fb963 100644 --- a/R/data.table.R +++ b/R/data.table.R @@ -755,7 +755,7 @@ replace_dot_alias = function(e) { if (!is.na(w)) { byindex = indices(x)[w] if (!length(getindex(x, byindex))) { - if (verbose) cat(gettext("by index '%s' but that index has 0 length. Ignoring.\n", byindex, domain="R-data.table")) + if (verbose) cat(gettextf("by index '%s' but that index has 0 length. Ignoring.\n", byindex, domain="R-data.table")) byindex=FALSE } } From e0b2a87249aa4789d5a87b26a582132048895989 Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Tue, 31 Dec 2019 16:26:30 +0800 Subject: [PATCH 06/28] adding more translations --- inst/po/zh_CN/LC_MESSAGES/R-data.table.mo | Bin 88535 -> 90911 bytes po/R-zh_CN.po | 50 +++++++++++----------- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/inst/po/zh_CN/LC_MESSAGES/R-data.table.mo b/inst/po/zh_CN/LC_MESSAGES/R-data.table.mo index b5091228650e1c5ad5e8a0c9031ea1ad296086ee..5e301096c8051669cccf137f44b7f02b1a73d6ef 100644 GIT binary patch delta 15473 zcma*t30zcF|M>AUg60Y+Anptx0*Zh;qKLbwxGzX(I>M+ZFbLyXHttI9qPgb2l)Iv# zxMpf)rCB~%Y30J=mYJDlw){TdITs&${?GGz{qO5_c%SdN=iYnPI|F(pxAgjRr5)c@ zab2!BGD;~`3)gxo)y0K;kd!JF*;J|e*bI~NA`RXe&{uDex8G-68mGZ;pcmW4tZw!i3Di|lCG-x9Z!Xro( zRi%|u5g3Pa8GI~HSC zY(nMHIK}Wb_95=qmTAPTC>^NUPN`WKiHGq7$_PwouREH9j>Q!0BO|u!pfCI!&BTvU zhS0mCQUTZ=r6(g$hJGbB#J%W_-(n^F0kiQL$}*bONrqaf-N+!TkFf{3c4qu#$oqEI z54NGq`4W^HzK7C)OIRKMGRmtlu2$k;lzIzs4z5EJ){Av6E)|SRhp?u@T2ju2#4R5Z$zyoyYxdL4&iJ|4sx-RM1DM43|u^CTmbkLf(|K4udq z(%mUoh|-Xxp4=0y4l5f{hVCi`p;vExzBMxaDgn*73S}|o zqfFUjl%7`Wqes{eWm|T@By>zAbB;^_y5P>fB;1QlFtMLr^@}is_^{zk^d_#@U(c;S zO3&J&OhtPQ>55+)Silgu_vQd=ZApKq#hTg=Sj7^5{ zTExM)9JgXKZ1svBiLn?-d>G5%PxuD@hGv{WFDl{|oQeC<1Dg-iYpV+;6TgfL@FY6q zMm;Qgk@Uw7#6t`>8s&u;Mfn4i28GZa>FH3E8!khc!l&qkKCG-X3`LfST8#nt0NFUI z3Ky}w)Zk>sUn=gUK!&U~n>q%&p*-*n!?PGotVZY?wZTe+!*L>JAPZgH!O9plQjbs^ z)+FwS&C!N+a2v|hoE_=V1y3pPp`aQoNO}-~>#-9CV<85iTZ;ZPY>u6XEm#e=qde#o zN&~K;T>k)D;=8PS!_V{hXJMOTN@uOfN*2jJ5i&wEDK0_Iqwqtbz z2cgX6XDBy%jBN57mjw}=zndR63Z(=ps|8A3%dWnJ{ zlpBPjR7f!5Sw_4UWtCsWLHHC|m#Xh%-JruLJwJ{z$G0&GE4`}MN-TO3FT@_W3C%oT zJtQNGp)wQN2y0*%#-R-Dt0+_Q7QTtc(PmPr{}iR>6Q6lqe|YubX3~){=#5zziP_j3 zPos43DMnzxRL0+fOn)*mgjVEUDivku?qN74PSYbY533O8;UPSaGjQs3y=`3yDwr5* z^rgJ_O#P{sfij{Gur=10rAH!u7UM6AVhjZ`$9qtQ?i9LWA=>e-;n3OoGvYGJNZmr2 zYwtO_p}r^&?uBxl4d227()m;t-s(NN>kNY)2fqSa)EueE*7}U>A#x*#U5y@DtSLtW0xQ&$8S)qsY6vh)bTdB9z0!$(P4y$17D*eVx#D~N)k=v

#f=$=(fq}1}3m(N#Jc(|2A189*GYsKL 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 JW7=Q#{{SI#lKKDu delta 13111 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 diff --git a/po/R-zh_CN.po b/po/R-zh_CN.po index c3ae6ed8da..d7bb712d95 100644 --- a/po/R-zh_CN.po +++ b/po/R-zh_CN.po @@ -262,16 +262,16 @@ msgid "" msgstr "" msgid "on= matches existing key, using key" -msgstr "" +msgstr "on=和现有键(key)相等,用键" msgid "on= matches existing index, using index" -msgstr "" +msgstr "on=和现有索引(index)相等,用索引" msgid "Calculated ad hoc index in %s" msgstr "" msgid "Non-equi join operators detected ..." -msgstr "" +msgstr "侦测到不等长联结操作符(operator)..." msgid "roll is not implemented for non-equi joins yet." msgstr "不等长联结还不能执行 roll " @@ -292,10 +292,10 @@ msgid "Recomputing forder with non-equi ids ..." msgstr "" msgid "Found %d non-equi group(s) ..." -msgstr "" +msgstr "找到%d不等长分组 ..." msgid "Starting bmerge ..." -msgstr "" +msgstr "bmerge开始..." msgid "bmerge done in" msgstr "bmerge 结束了" @@ -303,7 +303,7 @@ msgstr "bmerge 结束了" msgid "" "cedta decided '%s' wasn't data.table aware. Here is call stack with [[1L]] " "applied:" -msgstr "" +msgstr "cedta决定'%s'不认识data.table.使用[[1L]]后的呼叫堆疊就是:" msgid "key argument of data.table() must be character" msgstr "data.table() 的key参数必须是字符" @@ -525,10 +525,10 @@ msgid "Internal error. irows has length in by=.EACHI" msgstr "内部错误:by=.EACHI 中 irows 有长度" msgid "Reorder irows for 'mult==\"all\" && !allGrp1' ..." -msgstr "" +msgstr "对'mult==\"all\" && !allGrp1'再排序irows ..." msgid "Reordering %d rows after bmerge done in ..." -msgstr "" +msgstr "再排序%d行。bmerge用了..." msgid "logical error. i is not a data.table, but 'on' argument is provided." msgstr "逻辑错误。当 i 并非一个 data.table时,不应提供'on'参数" @@ -557,7 +557,7 @@ msgid "Internal error: notjoin but byjoin or !integer or nomatch==NA" msgstr "内部错误。原因可能为:notjoin 而非 byjoin;非整数;nomatch 为空" msgid "Inverting irows for notjoin done in ..." -msgstr "" +msgstr "对 notjoin 求逆 irows 用了 ..." msgid "" "with=FALSE together with := was deprecated in v1.9.4 released Oct 2014. " @@ -721,7 +721,7 @@ msgid "" msgstr "此处 j 不使用 .SD 但提供了 .SDcols ,因此忽略 .SDcols详见 ?data.table" msgid "Detected that j uses these columns:" -msgstr "" +msgstr "侦测 j 用这个列:" msgid "" "'(m)get' found in j. ansvars being set to all columns. Use .SDcols or a " @@ -899,16 +899,16 @@ msgid "Internal error: byindex not found" msgstr "内部错误 : 找不到 byindex" msgid "lapply optimization changed j from '%s' to '%s'" -msgstr "" +msgstr "lapply优化改变j从'%s'成'%s'" msgid "lapply optimization is on, j unchanged as '%s'" -msgstr "" +msgstr "lapply优化打开了, j ('%s')没有区别" msgid "GForce optimized j to '" -msgstr "" +msgstr "GForce优化 j 到 '" msgid "GForce is on, left j unchanged" -msgstr "" +msgstr "GForce打开了, j 没有区别" msgid "" "Unable to optimize call to mean() and could be very slow. You must name 'na." @@ -920,13 +920,13 @@ msgstr "" "第二顺位参数" msgid "Old mean optimization changed j from '%s' to '%s'" -msgstr "" +msgstr "旧mean优化改变j 从'%s'成'%s'" msgid "Old mean optimization is on, left j unchanged." -msgstr "" +msgstr "旧mean优化打开了,j没有区别。" msgid "All optimizations are turned off" -msgstr "" +msgstr "所有优化关掉了" msgid "Optimization is on but left j unchanged (single plain symbol): '%s'" msgstr "" @@ -938,7 +938,7 @@ msgid "Making each group and running j (GForce %s) ..." msgstr "" msgid "setkey() after the := with keyby= ..." -msgstr "" +msgstr "keyby=中,:=后setkey() ..." msgid "" "The setkey() normally performed by keyby= has been skipped (as if by= was " @@ -960,7 +960,7 @@ msgid "and bynames is" msgstr "同时bynames是" msgid "setkey() afterwards for keyby=.EACHI ..." -msgstr "" +msgstr "keyby=.EACHI中到底setkey() ..." msgid "rownames and rownames.value cannot both be used at the same time" msgstr "rownames和rownames.value 不能同时使用" @@ -1327,16 +1327,16 @@ msgid "" msgstr "" msgid "Optimized subsetting with key '" -msgstr "" +msgstr "优化的子集用键(key) '" msgid "Optimized subsetting with index '" -msgstr "" +msgstr "优化的子集用索引(index) '" msgid "Creating new index '" -msgstr "" +msgstr "造成新索引(index) '" msgid "Creating index %s done in ..." -msgstr "" +msgstr "造成新索引(index) %s 用了 ..." msgid "" "'on' argument should be a named atomic vector of column names indicating " @@ -1661,7 +1661,7 @@ msgstr "" "免混乱。" msgid "unique() + setkey() operations done in ..." -msgstr "" +msgstr "unique() + setkey() 执行用了 ..." msgid "binary search(es) done in ..." msgstr "" @@ -1936,7 +1936,7 @@ msgid "so the column has been left as type '" msgstr "所以该列已经被保存为类型" msgid "stringsAsFactors=%s converted %d column(s): %s" -msgstr "" +msgstr "stringsAsFactors=%s 改变 %d 列: %s" msgid "" "key argument of data.table() must be a character vector naming columns (NB: " From ed4f0caac9ab9665d6f10cfcd205313405f47ed8 Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Tue, 31 Dec 2019 16:30:37 +0800 Subject: [PATCH 07/28] minor tweaks --- R/bmerge.R | 2 +- inst/po/en@quot/LC_MESSAGES/R-data.table.mo | Bin 102516 -> 102510 bytes inst/tests/tests.Rraw | 2 +- po/R-data.table.pot | 4 ++-- po/R-zh_CN.po | 4 ++-- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/R/bmerge.R b/R/bmerge.R index 23a696fcc8..e8c181ce02 100644 --- a/R/bmerge.R +++ b/R/bmerge.R @@ -49,7 +49,7 @@ bmerge = function(i, x, icols, xcols, roll, rollends, nomatch, mult, ops, verbos if (roll!=0.0 && a==length(icols)) stop("Attempting roll join on factor column when joining x.",names(x)[xc]," to i.",names(i)[ic],". Only integer, double or character columns may be roll joined.") if (xclass=="factor" && iclass=="factor") { - if (verbose) cat(gettextf("Matching i.%s to factor levels to x.%s factor levels.\n", names(i)[ic], names(x)[xc], domain="R-data.table")) + if (verbose) cat(gettextf("Matching i.%s factor levels to x.%s factor levels.\n", names(i)[ic], names(x)[xc], domain="R-data.table")) set(i, j=ic, value=chmatch(levels(i[[ic]]), levels(x[[xc]]), nomatch=0L)[i[[ic]]]) # nomatch=0L otherwise a level that is missing would match to NA values next } else { diff --git a/inst/po/en@quot/LC_MESSAGES/R-data.table.mo b/inst/po/en@quot/LC_MESSAGES/R-data.table.mo index c70037499f145dd98568f9c50035ffcc20917544..940a5a7ef03dfb6244f9f492d1e4178df7b67838 100644 GIT binary patch delta 8499 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 KbtlJ`4fsDZ%1~ke delta 8506 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 Rv()0)bGy|2F5NF?{U1BHPM`n) diff --git a/inst/tests/tests.Rraw b/inst/tests/tests.Rraw index 6e1387585f..6a03f530af 100644 --- a/inst/tests/tests.Rraw +++ b/inst/tests/tests.Rraw @@ -13715,7 +13715,7 @@ test(1967.75, x[!y, sum(i4), on = 'i1', by = .EACHI, verbose = TRUE], data.table(i1 = c(169L, 369L), V1 = c(270L, 179L)), output = "not-join called with 'by=.EACHI'.*done") test(1967.76, x[!y, sum(i4), on = 'i1', verbose = TRUE], 510L, - output = 'Inverting irows for notjoin.*sec') + output = 'Inverting irows for notjoin.*[0-9]s') x[ , v := 0] ### hitting by = A:B branch test(1967.77, x[ , .(v = sum(v)), by = i1:i4], x[-10L]) diff --git a/po/R-data.table.pot b/po/R-data.table.pot index 4c35f11761..19a47a84e6 100644 --- a/po/R-data.table.pot +++ b/po/R-data.table.pot @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: data.table 1.12.9\n" -"POT-Creation-Date: 2019-12-31 15:31\n" +"POT-Creation-Date: 2019-12-31 16:28\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -163,7 +163,7 @@ msgstr "" msgid ". Only integer, double or character columns may be roll joined." msgstr "" -msgid "Matching i.%s to factor levels to x.%s factor levels." +msgid "Matching i.%s factor levels to x.%s factor levels." msgstr "" msgid "Coercing factor column i.%s to type character to match type of x.%s." diff --git a/po/R-zh_CN.po b/po/R-zh_CN.po index d7bb712d95..1dac52ba88 100644 --- a/po/R-zh_CN.po +++ b/po/R-zh_CN.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: data.table 1.12.5\n" -"POT-Creation-Date: 2019-12-31 15:31\n" +"POT-Creation-Date: 2019-12-31 16:28\n" "PO-Revision-Date: 2019-11-16 18:37+0800\n" "Last-Translator: Xianying Tan \n" "Language-Team: Mandarin\n" @@ -202,7 +202,7 @@ msgstr "" "联接时。但只有整数(integer)、双精度(double)或字符(character)类型的列可" "以使用滚动联接(roll join)。" -msgid "Matching i.%s to factor levels to x.%s factor levels." +msgid "Matching i.%s factor levels to x.%s factor levels." msgstr "" msgid "Coercing factor column i.%s to type character to match type of x.%s." From f0239fadf313f3ba6c4a8f2981c77927a5086239 Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Tue, 31 Dec 2019 17:55:10 +0800 Subject: [PATCH 08/28] simplification & extension of gettextf in bmerge --- R/bmerge.R | 34 ++++---- inst/po/en@quot/LC_MESSAGES/R-data.table.mo | Bin 102510 -> 102174 bytes inst/po/zh_CN/LC_MESSAGES/R-data.table.mo | Bin 90911 -> 90740 bytes po/R-data.table.pot | 61 ++++---------- po/R-zh_CN.po | 84 +++++++------------- 5 files changed, 60 insertions(+), 119 deletions(-) diff --git a/R/bmerge.R b/R/bmerge.R index e8c181ce02..473c1d6475 100644 --- a/R/bmerge.R +++ b/R/bmerge.R @@ -43,74 +43,76 @@ bmerge = function(i, x, icols, xcols, roll, rollends, nomatch, mult, ops, verbos xc = xcols[a] xclass = getClass(x[[xc]]) iclass = getClass(i[[ic]]) - if (!xclass %chin% supported) stop("x.", names(x)[xc]," is type ", xclass, " which is not supported by data.table join") - if (!iclass %chin% supported) stop("i.", names(i)[ic]," is type ", iclass, " which is not supported by data.table join") + xname = paste0("x.", names(x)[xc]) + iname = paste0("i.", names(i)[ic]) + if (!xclass %chin% supported) stop(gettextf("%s is type %s which is not supported by data.table join", xname, xclass, domain="R-data.table")) + if (!iclass %chin% supported) stop(gettextf("%s is type %s which is not supported by data.table join", iname, iclass, domain="R-data.table")) if (xclass=="factor" || iclass=="factor") { if (roll!=0.0 && a==length(icols)) - stop("Attempting roll join on factor column when joining x.",names(x)[xc]," to i.",names(i)[ic],". Only integer, double or character columns may be roll joined.") + stop(gettextf("Attempting roll join on factor column when joining %s to %s. Only integer, double or character columns may be roll joined.", xname, iname, domain="R-data.table")) if (xclass=="factor" && iclass=="factor") { - if (verbose) cat(gettextf("Matching i.%s factor levels to x.%s factor levels.\n", names(i)[ic], names(x)[xc], domain="R-data.table")) + if (verbose) cat(gettextf("Matching %s factor levels to %s factor levels.\n", iname, xname, domain="R-data.table")) set(i, j=ic, value=chmatch(levels(i[[ic]]), levels(x[[xc]]), nomatch=0L)[i[[ic]]]) # nomatch=0L otherwise a level that is missing would match to NA values next } else { if (xclass=="character") { - if (verbose) cat(gettextf("Coercing factor column i.%s to type character to match type of x.%s.\n", names(i)[ic], names(x)[xc], domain="R-data.table")) + if (verbose) cat(gettextf("Coercing factor column %s to type character to match type of %s.\n", iname, xname, domain="R-data.table")) set(i, j=ic, value=val<-as.character(i[[ic]])) set(callersi, j=ic, value=val) # factor in i joining to character in x will return character and not keep x's factor; e.g. for antaresRead #3581 next } else if (iclass=="character") { - if (verbose) cat(gettextf("Matching character column i.%s to factor levels in x.%s.\n", names(i)[ic], names(x)[xc], domain="R-data.table")) + if (verbose) cat(gettextf("Matching character column %s to factor levels in %s.\n", iname, xname, domain="R-data.table")) newvalue = chmatch(i[[ic]], levels(x[[xc]]), nomatch=0L) if (anyNA(i[[ic]])) newvalue[is.na(i[[ic]])] = NA_integer_ # NA_character_ should match to NA in factor, #3809 set(i, j=ic, value=newvalue) next } } - stop("Incompatible join types: x.", names(x)[xc], " (",xclass,") and i.", names(i)[ic], " (",iclass,"). Factor columns must join to factor or character columns.") + stop(gettextf("Incompatible join types: %s (%s) and %s (%s). Factor columns must join to factor or character columns.", xname, xclass, iname, iclass, domain="R-data.table")) } if (xclass == iclass) { - if (verbose) cat(gettextf("i.%s has same type (%s) as x.%s. No coercion needed.\n", names(i)[ic], xclass, names(x)[xc], domain="R-data.table")) + if (verbose) cat(gettextf("%s has same type (%s) as %s. No coercion needed.\n", iname, xclass, xname, domain="R-data.table")) next } if (xclass=="character" || iclass=="character" || xclass=="logical" || iclass=="logical" || xclass=="factor" || iclass=="factor") { if (anyNA(i[[ic]]) && allNA(i[[ic]])) { - if (verbose) cat(gettextf("Coercing all-NA i.%s (%s) to type %s to match type of x.%s.\n", names(i)[ic], iclass, xclass, names(x)[xc], domain="R-data.table")) + if (verbose) cat(gettextf("Coercing all-NA %s (%s) to type %s to match type of %s.\n", iname, iclass, xclass, xname, domain="R-data.table")) set(i, j=ic, value=match.fun(paste0("as.", xclass))(i[[ic]])) next } else if (anyNA(x[[xc]]) && allNA(x[[xc]])) { - if (verbose) cat(gettextf("Coercing all-NA x.%s (%s) to type %s to match type of i.%s.\n", names(x)[xc], xclass, iclass, names(i)[ic], domain="R-data.table")) + if (verbose) cat(gettextf("Coercing all-NA %s (%s) to type %s to match type of %s.\n", xname, xclass, iclass, iname, domain="R-data.table")) set(x, j=xc, value=match.fun(paste0("as.", iclass))(x[[xc]])) next } - stop("Incompatible join types: x.", names(x)[xc], " (",xclass,") and i.", names(i)[ic], " (",iclass,")") + stop(gettextf("Incompatible join types: %s (%s) and %s (%s)", xname, xclass, iname, iclass, domain="R-data.table")) } if (xclass=="integer64" || iclass=="integer64") { - nm = paste0(c("i.","x."), c(names(i)[ic], names(x)[xc])) + nm = c(iname, xname) if (xclass=="integer64") { w=i; wc=ic; wclass=iclass; } else { w=x; wc=xc; wclass=xclass; nm=rev(nm) } # w is which to coerce if (wclass=="integer" || (wclass=="double" && !isReallyReal(w[[wc]]))) { if (verbose) cat(gettextf("Coercing %s column %s%s to type integer64 to match type of %s.\n", wclass, nm[1L], if (wclass=="double") " (which contains no fractions)" else "", nm[2L], domain="R-data.table")) set(w, j=wc, value=bit64::as.integer64(w[[wc]])) - } else stop("Incompatible join types: ", nm[2L], " is type integer64 but ", nm[1L], " is type double and contains fractions") + } else stop(gettextf("Incompatible join types: %s is type integer64 but %s is type double and contains fractions", nm[2L], nm[1L], domain="R-data.table")) } else { # just integer and double left if (iclass=="double") { if (!isReallyReal(i[[ic]])) { # common case of ad hoc user-typed integers missing L postfix joining to correct integer keys # we've always coerced to int and returned int, for convenience. - if (verbose) cat(gettextf("Coercing double column i.%s (which contains no fractions) to type integer to match type of x.%s", names(i)[ic], names(x)[xc], domain="R-data.table")) + if (verbose) cat(gettextf("Coercing double column %s (which contains no fractions) to type integer to match type of %s", iname, xname, domain="R-data.table")) val = as.integer(i[[ic]]) if (!is.null(attributes(i[[ic]]))) attributes(val) = attributes(i[[ic]]) # to retain Date for example; 3679 set(i, j=ic, value=val) set(callersi, j=ic, value=val) # change the shallow copy of i up in [.data.table to reflect in the result, too. } else { - if (verbose) cat(gettextf("Coercing integer column x.%s to type double to match type of i.%s which contains fractions.\n", names(x)[xc], names(i)[ic], domain="R-data.table")) + if (verbose) cat(gettextf("Coercing integer column %s to type double to match type of %s which contains fractions.\n", xname, iname, domain="R-data.table")) set(x, j=xc, value=as.double(x[[xc]])) } } else { - if (verbose) cat(gettextf("Coercing integer column i.%s to type double for join to match type of x.%s.\n", names(i)[ic], names(x)[xc], domain="R-data.table")) + if (verbose) cat(gettextf("Coercing integer column %s to type double for join to match type of %s.\n", iname, xname, domain="R-data.table")) set(i, j=ic, value=as.double(i[[ic]])) } } diff --git a/inst/po/en@quot/LC_MESSAGES/R-data.table.mo b/inst/po/en@quot/LC_MESSAGES/R-data.table.mo index 940a5a7ef03dfb6244f9f492d1e4178df7b67838..288b5306f6114aa02b9a7af41b16b3abe970c99c 100644 GIT binary patch delta 15120 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 Owk~<)knMK+=zjrxKgGZR delta 15391 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 Xj?8l>tL!Y8?AW3nSg^O3WB307K(y$o diff --git a/po/R-data.table.pot b/po/R-data.table.pot index 19a47a84e6..9fea79b579 100644 --- a/po/R-data.table.pot +++ b/po/R-data.table.pot @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: data.table 1.12.9\n" -"POT-Creation-Date: 2019-12-31 16:28\n" +"POT-Creation-Date: 2019-12-31 17:43\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -142,79 +142,46 @@ msgstr "" msgid "done in" msgstr "" -msgid "x." +msgid "%s is type %s which is not supported by data.table join" msgstr "" -msgid "is type" +msgid "Attempting roll join on factor column when joining %s to %s. Only integer, double or character columns may be roll joined." msgstr "" -msgid "which is not supported by data.table join" +msgid "Matching %s factor levels to %s factor levels." msgstr "" -msgid "i." +msgid "Coercing factor column %s to type character to match type of %s." msgstr "" -msgid "Attempting roll join on factor column when joining x." +msgid "Matching character column %s to factor levels in %s." msgstr "" -msgid "to i." +msgid "Incompatible join types: %s (%s) and %s (%s). Factor columns must join to factor or character columns." msgstr "" -msgid ". Only integer, double or character columns may be roll joined." +msgid "%s has same type (%s) as %s. No coercion needed." msgstr "" -msgid "Matching i.%s factor levels to x.%s factor levels." +msgid "Coercing all-NA %s (%s) to type %s to match type of %s." msgstr "" -msgid "Coercing factor column i.%s to type character to match type of x.%s." -msgstr "" - -msgid "Matching character column i.%s to factor levels in x.%s." -msgstr "" - -msgid "Incompatible join types: x." -msgstr "" - -msgid "(" -msgstr "" - -msgid ") and i." -msgstr "" - -msgid "). Factor columns must join to factor or character columns." -msgstr "" - -msgid "i.%s has same type (%s) as x.%s. No coercion needed." -msgstr "" - -msgid "Coercing all-NA i.%s (%s) to type %s to match type of x.%s." -msgstr "" - -msgid "Coercing all-NA x.%s (%s) to type %s to match type of i.%s." -msgstr "" - -msgid ")" +msgid "Incompatible join types: %s (%s) and %s (%s)" msgstr "" msgid "Coercing %s column %s%s to type integer64 to match type of %s." msgstr "" -msgid "Incompatible join types:" -msgstr "" - -msgid "is type integer64 but" -msgstr "" - -msgid "is type double and contains fractions" +msgid "Incompatible join types: %s is type integer64 but %s is type double and contains fractions" msgstr "" -msgid "Coercing double column i.%s (which contains no fractions) to type integer to match type of x.%s" +msgid "Coercing double column %s (which contains no fractions) to type integer to match type of %s" msgstr "" -msgid "Coercing integer column x.%s to type double to match type of i.%s which contains fractions." +msgid "Coercing integer column %s to type double to match type of %s which contains fractions." msgstr "" -msgid "Coercing integer column i.%s to type double for join to match type of x.%s." +msgid "Coercing integer column %s to type double for join to match type of %s." msgstr "" msgid "on= matches existing key, using key" diff --git a/po/R-zh_CN.po b/po/R-zh_CN.po index 1dac52ba88..b192d3019e 100644 --- a/po/R-zh_CN.po +++ b/po/R-zh_CN.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: data.table 1.12.5\n" -"POT-Creation-Date: 2019-12-31 16:28\n" +"POT-Creation-Date: 2019-12-31 17:43\n" "PO-Revision-Date: 2019-11-16 18:37+0800\n" "Last-Translator: Xianying Tan \n" "Language-Team: Mandarin\n" @@ -179,86 +179,58 @@ msgstr "" msgid "done in" msgstr "结束了" -msgid "x." -msgstr "x." +msgid "%s is type %s which is not supported by data.table join" +msgstr "%s的类型为%s,该类型无法用于 data.table 的联接" -msgid "is type" -msgstr "的类型为" - -msgid "which is not supported by data.table join" -msgstr ",该类型无法用于 data.table 的联接" - -msgid "i." -msgstr "i." - -msgid "Attempting roll join on factor column when joining x." -msgstr "试图滚动联接(roll join)因子类型(factor)的列,这发生于将 x." - -msgid "to i." -msgstr "与 i." - -msgid ". Only integer, double or character columns may be roll joined." +msgid "" +"Attempting roll join on factor column when joining %s to %s. Only integer, " +"double or character columns may be roll joined." msgstr "" -"联接时。但只有整数(integer)、双精度(double)或字符(character)类型的列可" -"以使用滚动联接(roll join)。" +"联接%s与%s时试图滚动联接(roll join)因子类型(factor)的列。但只有整数(integer)、双精度(double)或字符(character)类型的列可" +"以使用滚动联接。" -msgid "Matching i.%s factor levels to x.%s factor levels." +msgid "Matching %s factor levels to %s factor levels." msgstr "" -msgid "Coercing factor column i.%s to type character to match type of x.%s." +msgid "Coercing factor column %s to type character to match type of %s." msgstr "" -msgid "Matching character column i.%s to factor levels in x.%s." +msgid "Matching character column %s to factor levels in %s." msgstr "" -msgid "Incompatible join types: x." -msgstr "不兼容的联结类型: x。" - -msgid "(" -msgstr "(" - -msgid ") and i." -msgstr ")和 i。" - -msgid "). Factor columns must join to factor or character columns." -msgstr ")。 因子类型的列必须与因子类型或字符类型的列才可以联结" - -msgid "i.%s has same type (%s) as x.%s. No coercion needed." -msgstr "" +msgid "" +"Incompatible join types: %s (%s) and %s (%s). Factor columns must join to " +"factor or character columns." +msgstr "不兼容的联结类型: %s (%s) 和 %s (%s)。 因子类型的列必须与因子类型或字符类型的列才可以联结" -msgid "Coercing all-NA i.%s (%s) to type %s to match type of x.%s." +msgid "%s has same type (%s) as %s. No coercion needed." msgstr "" -msgid "Coercing all-NA x.%s (%s) to type %s to match type of i.%s." +msgid "Coercing all-NA %s (%s) to type %s to match type of %s." msgstr "" -msgid ")" -msgstr ")" +msgid "Incompatible join types: %s (%s) and %s (%s)" +msgstr "不兼容的联结类型: %s (%s) 和 %s (%s)。" msgid "Coercing %s column %s%s to type integer64 to match type of %s." msgstr "" -msgid "Incompatible join types:" -msgstr "不兼容的联结类型" - -msgid "is type integer64 but" -msgstr "是 integer64 类型但是" - -msgid "is type double and contains fractions" -msgstr "是 double 类型并且包含分数" +msgid "" +"Incompatible join types: %s is type integer64 but %s is type double and " +"contains fractions" +msgstr "不兼容的联结类型: %s 是 integer64 类型的列但 %s 是有分数的双精度类型列。" msgid "" -"Coercing double column i.%s (which contains no fractions) to type integer to " -"match type of x.%s" +"Coercing double column %s (which contains no fractions) to type integer to " +"match type of %s" msgstr "" msgid "" -"Coercing integer column x.%s to type double to match type of i.%s which " -"contains fractions." +"Coercing integer column %s to type double to match type of %s which contains " +"fractions." msgstr "" -msgid "" -"Coercing integer column i.%s to type double for join to match type of x.%s." +msgid "Coercing integer column %s to type double for join to match type of %s." msgstr "" msgid "on= matches existing key, using key" From 4a37506a30fb0fbd01f839efdbf0c3ecca7a02b4 Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Tue, 31 Dec 2019 18:58:55 +0800 Subject: [PATCH 09/28] more usage of gettextf --- R/onLoad.R | 2 +- R/setops.R | 6 +- R/test.data.table.R | 12 ++- inst/po/en@quot/LC_MESSAGES/R-data.table.mo | Bin 102174 -> 102248 bytes inst/po/zh_CN/LC_MESSAGES/R-data.table.mo | Bin 90740 -> 90721 bytes po/R-data.table.pot | 48 +++-------- po/R-zh_CN.po | 91 ++++++++------------ 7 files changed, 61 insertions(+), 98 deletions(-) diff --git a/R/onLoad.R b/R/onLoad.R index 3e9d7781ed..accbb9648f 100644 --- a/R/onLoad.R +++ b/R/onLoad.R @@ -25,7 +25,7 @@ if (dllV != RV) { dll = if (.Platform$OS.type=="windows") "dll" else "so" # https://bugs.r-project.org/bugzilla/show_bug.cgi?id=17478 - stop("The datatable.",dll," version (",dllV,") does not match the package (",RV,"). Please close all R sessions to release the old ",toupper(dll)," and reinstall data.table in a fresh R session. The root cause is that R's package installer can in some unconfirmed circumstances leave a package in a state that is apparently functional but where new R code is calling old C code silently: https://bugs.r-project.org/bugzilla/show_bug.cgi?id=17478. Once a package is in this mismatch state it may produce wrong results silently until you next upgrade the package. Please help by adding precise circumstances to 17478 to move the status to confirmed. This mismatch between R and C code can happen with any package not just data.table. It is just that data.table has added this check.") + stop(gettextf("The datatable.%s version (%s) does not match the package (%s). Please close all R sessions to release the old %s and reinstall data.table in a fresh R session. The root cause is that R's package installer can in some unconfirmed circumstances leave a package in a state that is apparently functional but where new R code is calling old C code silently: https://bugs.r-project.org/bugzilla/show_bug.cgi?id=17478. Once a package is in this mismatch state it may produce wrong results silently until you next upgrade the package. Please help by adding precise circumstances to 17478 to move the status to confirmed. This mismatch between R and C code can happen with any package not just data.table. It is just that data.table has added this check.", dll, dllV, RV, toupper(dll), domain="R-data.table")) } builtUsing = readRDS(system.file("Meta/package.rds",package="data.table"))$Built$R if (!identical(base::getRversion()>="4.0.0", builtUsing>="4.0.0")) { diff --git a/R/setops.R b/R/setops.R index 62368b79ab..3d8d22672d 100644 --- a/R/setops.R +++ b/R/setops.R @@ -14,11 +14,11 @@ setdiff_ = function(x, y, by.x=seq_along(x), by.y=seq_along(y), use.names=FALSE) icnam = names(y)[lc] xcnam = names(x)[rc] if ( is.character(x[[rc]]) && !(is.character(y[[lc]]) || is.factor(y[[lc]])) ) { - stop("When x's column ('",xcnam,"') is character, the corresponding column in y ('",icnam,"') should be factor or character, but found incompatible type '",typeof(y[[lc]]),"'.") + stop(gettextf("When x's column ('%s') is character, the corresponding column in y ('%s') should be factor or character, but found incompatible type '%s'.", xcnam, icnam, typeof(y[[lc]]), domain="R-data.table")) } else if ( is.factor(x[[rc]]) && !(is.character(y[[lc]]) || is.factor(y[[lc]])) ) { - stop("When x's column ('",xcnam,"') is factor, the corresponding column in y ('",icnam,"') should be character or factor, but found incompatible type '",typeof(y[[lc]]),"'.") + stop(gettextf("When x's column ('%s') is factor, the corresponding column in y ('%s') should be character or factor, but found incompatible type '%s'.", xcnam, icnam, typeof(y[[lc]]), domain="R-data.table")) } else if ( (is.integer(x[[rc]]) || is.double(x[[rc]])) && (is.logical(y[[lc]]) || is.character(y[[lc]])) ) { - stop("When x's column ('",xcnam,"') is integer or numeric, the corresponding column in y ('",icnam,"') can not be character or logical types, but found incompatible type '",typeof(y[[lc]]),"'.") + stop(gettextf("When x's column ('%s') is integer or numeric, the corresponding column in y ('%s') can not be character or logical types, but found incompatible type '%s'.", xcnam, icnam, typeof(y[[lc]]), domain="R-data.table")) } } ux = unique(shallow(x, by.x)) diff --git a/R/test.data.table.R b/R/test.data.table.R index ba876693d0..bc96c1f35f 100644 --- a/R/test.data.table.R +++ b/R/test.data.table.R @@ -149,8 +149,16 @@ test.data.table = function(script="tests.Rraw", verbose=FALSE, pkg=".", silent=F ntest = env$ntest if (nfail > 0L) { # nocov start - if (nfail > 1L) {s1="s";s2="s: "} else {s1="";s2=" "} - stop(nfail," error",s1," out of ",ntest,". Search ",names(fn)," for test number",s2,paste(env$whichfail,collapse=", "),".") + # see https://bugs.r-project.org/bugzilla/show_bug.cgi?id=17682 + # for why this isn't stop(sprintf(...)) + msg = sprintf( + ngettext( + nfail, domain="R-data.table", + "%d error out of %d. Search %s for test number %s", + "%d errors out of %d. Search %s for test numbers %s" + ), nfail, ntest, names(fn), paste(env$whichfail, collapse=", ") + ) + stop(msg) # important to stop() here, so that 'R CMD check' fails # nocov end } diff --git a/inst/po/en@quot/LC_MESSAGES/R-data.table.mo b/inst/po/en@quot/LC_MESSAGES/R-data.table.mo index 288b5306f6114aa02b9a7af41b16b3abe970c99c..a37e7e429d8bff4a1eef34584defbe2c870c9f11 100644 GIT binary patch delta 14793 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 delta 14739 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 MXXJlB;LRNW2ZpazzyJUM diff --git a/inst/po/zh_CN/LC_MESSAGES/R-data.table.mo b/inst/po/zh_CN/LC_MESSAGES/R-data.table.mo index e4e6ef7675d1bc2fe24b851be7604d1bafb804fd..bcf72a4a8e1efe8bbc0edf02b7652385ba142b8e 100644 GIT binary patch delta 13646 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 KH_0^5{=Wc++xCJ0 delta 13600 zcmZA72Y8Ox`@r$@WDz4IVkMHiNkkGOBqWkpiJ1^FV#SV#P3#flwO5U(S({QLcC;~z zR*m{mTPbRWs99B1@&DfMdGvDqpX)k4_kEsy*83)L`>5kzM;)y<-5eGwwjOp$mBEB! zN`>1iHKv@@D%HHIQsuD)M&KCJY^+ZH2%XTcno>nE7#%Sh4UEB>SQnkqiY_<woSgsK}>!R0ueCOD0a z$lK5ip|}!xb9EM@xxe~IPzR%HX)}=CQ2S6Wd=M>IqP9{^usX)$BJNsaAb>yV2MWGw>n0VQQk@Kio=Gjc|uZI@$t|)_S0{Y{A%#XjLwA@2vIH>}R)KqMQ$1n@+aWDfU3x^{! zS6Tg9>e1W=gQdcB6BZ}GfYN7qC~uT6NjI@G9weWKa$K`kdj6-O2l;T67np}~{$6y! zD=06Ji}aFJSz7Bi?um>$wc7M9hLM+Rqx&)$dy!j_0k0n72n=kiA7B+)$iGE;LtRF> zkuOt7y0QaS!u=>Ml!t*b|H~!o!Ig+|!_jELZRmr)U}b!U)zGKCKE4%76HdTx_$|_^ zs#FK17`LhqGF;RS48nhq;iUXK(#_ZpGq}I9>tt&RH5MbukD?R4$C>ERSwGNREJVHo zC*wgZigkHCH%!9r*aK(dDU|CZchzI0E7l|LZMqe$GI(APMB_ggj^Qc#P5Yu;a5Z|N zBd_U>{@5QQk?vRDpg;bD^2Xk&OfBq%a@>Bbh{0T}4z@wL-=glczXa!~sD*`?%yOZ| zSQrQ3NF0L4`Y73kGJtDj=-~h z^=yl?_S5roFji+r6zx?G2jMVWf@9ESfF2uPU@7vWn1DA>n!0?to)u%U68QmajE_)S zBz&M=A6j8~^5N)%)-?q6365Y%bQ+|e&>N*I7NJ~dANr!>VEurBC>KgZ>AF#-Iartc z70QD|4$*G)PPUD@#%r7J$51D2z`s$vCn!Y&w$JqIGmZptG>627kgp)Ac zU{H=#Y8Ls-ar#rMBqzz6gko`w!bog}5jY*?4G&=z%)_GSF{mH46V|1I|(YI z?*!cfEzpg8EPjibI0+k0)bsaeENIZwRQga~VzU0!i$H0?-B=TEVKMZYqQ^uiN*52s zvN&}L?e9R4Ma59uVHz-1e^@Lqef=BCgWgBEaq(&Tyl`AWz8SfMikq%IgVF-6 zW-uOj;3@cy{Ps*e2yc8r)5r;-v~LLJpxh`IrSG33Gf>6P*0UoAmy-X2PS|G-4~2uU z6E>Zzr(+hzl7B#XftXC)a)XhnuXbS#^tR5^P17Eus91s0bXPD2-M`cawno`M4_o6Y zlri8tUw^0sqwF7y(zIK!0G`7_cpaG_Di1GW$^vE*EnGCN1HE1J|J&x_qTqPG5XZ-Wa)_szLLJwa^3Wpd+?N>9Vd^3CAPLfmLlIh@)aB z2ID{25z8*q-&iJKMe-@=g1c}eXCA>|?i9U}pBns<>KrWjsoYj6@mjyRZa? z@|JZl4!vdmPbUbcVgt(Py@7Hg=e2tDmO^RDiYO0Q9pyqPD94S&J2(x4u+P`J&*!78 z6F*@|e2#@N|2n-?mq3I2tJVbNuq`IxIFuWlM;R=6D5JjhdKM9!g6UZE8-2ko=s~^@ z8Sv^74#CbF^wN7C6UeKE;UuH>uHDuZJefjb^Dy@)~Nd1yhmP5KK;Rg{*VN%qC9cz0sU1f6=TRJVj27qS_#zX=d_!fC%^$r_jhwqtX++Te|Abt7^2H*$Tfn^WrvC$OUkY}LmKZnu+ zuTjqPIjnykNW{Y2=>mFCfBT63`u;CU%cT6Er(=JVmR*U~2!bsH(Rdf@q4$q^ly)rZ?e%22#6Vu7Fuq=9>(z7K7rHO~*YMhL6mtV+ELIpp{^cdz zH5W`@V@2vcFYA_!Go6YK)E~uUJc&Ls|NXD%A3*A1B0E;%0DNNF@mD>KPT_Rwt6bG@ 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 diff --git a/po/R-data.table.pot b/po/R-data.table.pot index 9fea79b579..bee7099481 100644 --- a/po/R-data.table.pot +++ b/po/R-data.table.pot @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: data.table 1.12.9\n" -"POT-Creation-Date: 2019-12-31 17:43\n" +"POT-Creation-Date: 2019-12-31 18:45\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -1582,19 +1582,7 @@ msgstr "" msgid "The option 'datatable.nomatch' is being used and is not set to the default NA. This option is still honored for now but will be deprecated in future. Please see NEWS for 1.12.4 for detailed information and motivation. To specify inner join, please specify `nomatch=NULL` explicitly in your calls rather than changing the default using this option." msgstr "" -msgid "The datatable." -msgstr "" - -msgid "version (" -msgstr "" - -msgid ") does not match the package (" -msgstr "" - -msgid "). Please close all R sessions to release the old" -msgstr "" - -msgid "and reinstall data.table in a fresh R session. The root cause is that R's package installer can in some unconfirmed circumstances leave a package in a state that is apparently functional but where new R code is calling old C code silently: https://bugs.r-project.org/bugzilla/show_bug.cgi?id=17478. Once a package is in this mismatch state it may produce wrong results silently until you next upgrade the package. Please help by adding precise circumstances to 17478 to move the status to confirmed. This mismatch between R and C code can happen with any package not just data.table. It is just that data.table has added this check." +msgid "The datatable.%s version (%s) does not match the package (%s). Please close all R sessions to release the old %s and reinstall data.table in a fresh R session. The root cause is that R's package installer can in some unconfirmed circumstances leave a package in a state that is apparently functional but where new R code is calling old C code silently: https://bugs.r-project.org/bugzilla/show_bug.cgi?id=17478. Once a package is in this mismatch state it may produce wrong results silently until you next upgrade the package. Please help by adding precise circumstances to 17478 to move the status to confirmed. This mismatch between R and C code can happen with any package not just data.table. It is just that data.table has added this check." msgstr "" msgid "This is R" @@ -1771,25 +1759,13 @@ msgstr "" msgid "length(by.x) != length(by.y)" msgstr "" -msgid "When x's column ('" -msgstr "" - -msgid "') is character, the corresponding column in y ('" +msgid "When x's column ('%s') is character, the corresponding column in y ('%s') should be factor or character, but found incompatible type '%s'." msgstr "" -msgid "') should be factor or character, but found incompatible type '" +msgid "When x's column ('%s') is factor, the corresponding column in y ('%s') should be character or factor, but found incompatible type '%s'." msgstr "" -msgid "') is factor, the corresponding column in y ('" -msgstr "" - -msgid "') should be character or factor, but found incompatible type '" -msgstr "" - -msgid "') is integer or numeric, the corresponding column in y ('" -msgstr "" - -msgid "') can not be character or logical types, but found incompatible type '" +msgid "When x's column ('%s') is integer or numeric, the corresponding column in y ('%s') can not be character or logical types, but found incompatible type '%s'." msgstr "" msgid "argument 'all' should be logical of length one" @@ -1876,15 +1852,6 @@ msgstr "" msgid "before the next test() call in" msgstr "" -msgid "out of" -msgstr "" - -msgid ". Search" -msgstr "" - -msgid "for test number" -msgstr "" - msgid "Timings count mismatch:" msgstr "" @@ -2005,3 +1972,8 @@ msgid "%d variable not shown: %s\n" msgid_plural "%d variables not shown: %s\n" msgstr[0] "" msgstr[1] "" + +msgid "%d error out of %d. Search %s for test number %s" +msgid_plural "%d errors out of %d. Search %s for test numbers %s" +msgstr[0] "" +msgstr[1] "" diff --git a/po/R-zh_CN.po b/po/R-zh_CN.po index b192d3019e..a8779f87f6 100644 --- a/po/R-zh_CN.po +++ b/po/R-zh_CN.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: data.table 1.12.5\n" -"POT-Creation-Date: 2019-12-31 17:43\n" +"POT-Creation-Date: 2019-12-31 18:45\n" "PO-Revision-Date: 2019-11-16 18:37+0800\n" "Last-Translator: Xianying Tan \n" "Language-Team: Mandarin\n" @@ -186,8 +186,8 @@ msgid "" "Attempting roll join on factor column when joining %s to %s. Only integer, " "double or character columns may be roll joined." msgstr "" -"联接%s与%s时试图滚动联接(roll join)因子类型(factor)的列。但只有整数(integer)、双精度(double)或字符(character)类型的列可" -"以使用滚动联接。" +"联接%s与%s时试图滚动联接(roll join)因子类型(factor)的列。但只有整数" +"(integer)、双精度(double)或字符(character)类型的列可以使用滚动联接。" msgid "Matching %s factor levels to %s factor levels." msgstr "" @@ -201,7 +201,9 @@ msgstr "" msgid "" "Incompatible join types: %s (%s) and %s (%s). Factor columns must join to " "factor or character columns." -msgstr "不兼容的联结类型: %s (%s) 和 %s (%s)。 因子类型的列必须与因子类型或字符类型的列才可以联结" +msgstr "" +"不兼容的联结类型: %s (%s) 和 %s (%s)。 因子类型的列必须与因子类型或字符类型的" +"列才可以联结" msgid "%s has same type (%s) as %s. No coercion needed." msgstr "" @@ -218,7 +220,8 @@ msgstr "" msgid "" "Incompatible join types: %s is type integer64 but %s is type double and " "contains fractions" -msgstr "不兼容的联结类型: %s 是 integer64 类型的列但 %s 是有分数的双精度类型列。" +msgstr "" +"不兼容的联结类型: %s 是 integer64 类型的列但 %s 是有分数的双精度类型列。" msgid "" "Coercing double column %s (which contains no fractions) to type integer to " @@ -2162,30 +2165,20 @@ msgstr "" "用,但在未来不会被使用。相关的详细信息和动机,请参阅1.12.4的信息。要指定内部" "连接,请在调用中明确指定`nomatch = NULL`,而不要使用此选项更改默认值。" -msgid "The datatable." -msgstr "datatable" - -msgid "version (" -msgstr "版本(" - -msgid ") does not match the package (" -msgstr ")和包不匹配 (" - -msgid "). Please close all R sessions to release the old" -msgstr ").请关闭所有R会话以释放旧版本" - msgid "" -"and reinstall data.table in a fresh R session. The root cause is that R's " -"package installer can in some unconfirmed circumstances leave a package in a " -"state that is apparently functional but where new R code is calling old C " -"code silently: https://bugs.r-project.org/bugzilla/show_bug.cgi?id=17478. " -"Once a package is in this mismatch state it may produce wrong results " -"silently until you next upgrade the package. Please help by adding precise " -"circumstances to 17478 to move the status to confirmed. This mismatch " -"between R and C code can happen with any package not just data.table. It is " -"just that data.table has added this check." +"The datatable.%s version (%s) does not match the package (%s). Please close " +"all R sessions to release the old %s and reinstall data.table in a fresh R " +"session. The root cause is that R's package installer can in some " +"unconfirmed circumstances leave a package in a state that is apparently " +"functional but where new R code is calling old C code silently: https://bugs." +"r-project.org/bugzilla/show_bug.cgi?id=17478. Once a package is in this " +"mismatch state it may produce wrong results silently until you next upgrade " +"the package. Please help by adding precise circumstances to 17478 to move " +"the status to confirmed. This mismatch between R and C code can happen with " +"any package not just data.table. It is just that data.table has added this " +"check." msgstr "" -"并在全新的R会话中重新安装data.table。根本原因是R包安装程序可能在某些未经确认" +"data.table.%s版本(%s)和包不匹配版本(%s)。请关闭所有R会话以释放旧%s并在全新的R会话中重新安装data.table。根本原因是R包安装程序可能在某些未经确认" "的条件下将包置于显然可以正常工作的状态,但是新的R代码正在默默地调用旧的C代" "码:https://bugs.r-project.org/bugzilla/show_bug.cgi?id=17478。一旦安装包处于" "这不匹配的状态下,在您下次升级程序包之前,它可能会默默地产生错误的结果请提交" @@ -2423,26 +2416,21 @@ msgstr "x 和 y 均需为 data.table" msgid "length(by.x) != length(by.y)" msgstr "length(by.x) != length(by.y)" -msgid "When x's column ('" -msgstr "当 x 的列 ('" - -msgid "') is character, the corresponding column in y ('" -msgstr "') 是字符,y 中相应的列 ('" - -msgid "') should be factor or character, but found incompatible type '" -msgstr "') 应该是因子或字符,然而此类型并不兼容:'" - -msgid "') is factor, the corresponding column in y ('" -msgstr "') 是因子,y 中相应的列 ('" - -msgid "') should be character or factor, but found incompatible type '" -msgstr "') 应该是字符或因子,然而此类型并不兼容:'" +msgid "" +"When x's column ('%s') is character, the corresponding column in y ('%s') " +"should be factor or character, but found incompatible type '%s'." +msgstr "当 x 的列('%s') 是字符,y 中相应的列 ('%s') 应该是因子或字符,然而此类型并不兼容:'%s'." -msgid "') is integer or numeric, the corresponding column in y ('" -msgstr "') 是整数或数值,y 中相应的列 ('" +msgid "" +"When x's column ('%s') is factor, the corresponding column in y ('%s') " +"should be character or factor, but found incompatible type '%s'." +msgstr "当 x 的列('%s') 是因子, y 中相应的列 ('%s') 应该是字符或因子,然而此类型并不兼容:'%s'." -msgid "') can not be character or logical types, but found incompatible type '" -msgstr "') 不能是字符或逻辑类型,然而此类型不兼容:'" +msgid "" +"When x's column ('%s') is integer or numeric, the corresponding column in y " +"('%s') can not be character or logical types, but found incompatible type " +"'%s'." +msgstr "当 x 的列('%s') 是整数或数值,y 中相应的列('%s') 不能是字符或逻辑类型,然而此类型不兼容:'%s'." msgid "argument 'all' should be logical of length one" msgstr "参数 'all' 应该是长度为 1 的逻辑型" @@ -2548,15 +2536,6 @@ msgstr "错误出现于测试" msgid "before the next test() call in" msgstr "后,先于下一调用test()于" -msgid "out of" -msgstr "总数为" - -msgid ". Search" -msgstr ". 搜索" - -msgid "for test number" -msgstr "以获得测试编号" - msgid "Timings count mismatch:" msgstr "计时不一致:" @@ -2702,3 +2681,7 @@ msgstr[0] "索引(index): " msgid "%d variable not shown: %s\n" msgid_plural "%d variables not shown: %s\n" msgstr[0] "%d变量没显示: %s\n" + +msgid "%d error out of %d. Search %s for test number %s" +msgid_plural "%d errors out of %d. Search %s for test numbers %s" +msgstr[0] "%d错误总数为%d. %s中搜索测试编号%s" From c62ab6c9fedf05a4185dee5cf669b760b926e5c2 Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Thu, 2 Jan 2020 11:05:38 +0800 Subject: [PATCH 10/28] added a few more translations --- inst/po/zh_CN/LC_MESSAGES/R-data.table.mo | Bin 90721 -> 91428 bytes po/R-zh_CN.po | 10 +++++----- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/inst/po/zh_CN/LC_MESSAGES/R-data.table.mo b/inst/po/zh_CN/LC_MESSAGES/R-data.table.mo index bcf72a4a8e1efe8bbc0edf02b7652385ba142b8e..230cdcc0a328015a88e9038f4c6c506c4785dea5 100644 GIT binary patch delta 13784 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 a;_~ml;_oUMv%7wR>t?pyed@Y)7x^y=dJake diff --git a/po/R-zh_CN.po b/po/R-zh_CN.po index a8779f87f6..14d7386a3d 100644 --- a/po/R-zh_CN.po +++ b/po/R-zh_CN.po @@ -190,13 +190,13 @@ msgstr "" "(integer)、双精度(double)或字符(character)类型的列可以使用滚动联接。" msgid "Matching %s factor levels to %s factor levels." -msgstr "" +msgstr "匹配 %s 的因子水平和 %s 的因子水平。" msgid "Coercing factor column %s to type character to match type of %s." -msgstr "" +msgstr "将因子类型列 %s 强制转换成字符来匹配目 %s。" msgid "Matching character column %s to factor levels in %s." -msgstr "" +msgstr "匹配字符类型列 %s 和 %s 的因子水平。" msgid "" "Incompatible join types: %s (%s) and %s (%s). Factor columns must join to " @@ -589,13 +589,13 @@ msgstr "" "其他的选项。" msgid "by index '%s' but that index has 0 length. Ignoring." -msgstr "" +msgstr "by 索引(index) '%s' 但那索引的长度为0。将被忽视。" msgid "Internal error: irows isn't integer" msgstr "内部错误:irows 不是整型" msgid "i clause present and columns used in by detected, only these subset:" -msgstr "" +msgstr "有 i 子句和在 by 用的列被侦测, 子集只有这个:" msgid "" "i clause present but columns used in by not detected. Having to subset all " From 9c27b12eb895268d6f6b11da773a1667b712900d Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Thu, 2 Jan 2020 12:18:02 +0800 Subject: [PATCH 11/28] another translation --- po/R-zh_CN.po | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/po/R-zh_CN.po b/po/R-zh_CN.po index 14d7386a3d..fa5d6b0feb 100644 --- a/po/R-zh_CN.po +++ b/po/R-zh_CN.po @@ -243,7 +243,7 @@ msgid "on= matches existing index, using index" msgstr "on=和现有索引(index)相等,用索引" msgid "Calculated ad hoc index in %s" -msgstr "" +msgstr "计算临时索引用了 %s" msgid "Non-equi join operators detected ..." msgstr "侦测到不等长联结操作符(operator)..." From b425d2888897a665be8034c6c1d1f3bb1ee0f7e5 Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Thu, 2 Jan 2020 12:18:14 +0800 Subject: [PATCH 12/28] another translation(.mo) --- inst/po/zh_CN/LC_MESSAGES/R-data.table.mo | Bin 91428 -> 91502 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/inst/po/zh_CN/LC_MESSAGES/R-data.table.mo b/inst/po/zh_CN/LC_MESSAGES/R-data.table.mo index 230cdcc0a328015a88e9038f4c6c506c4785dea5..57d39fd42a115872f20950ce66fabac45e14c6b4 100644 GIT binary patch delta 13043 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 Date: Thu, 2 Jan 2020 21:47:22 +0800 Subject: [PATCH 13/28] more translation --- po/R-zh_CN.po | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/po/R-zh_CN.po b/po/R-zh_CN.po index fa5d6b0feb..19482f798d 100644 --- a/po/R-zh_CN.po +++ b/po/R-zh_CN.po @@ -174,7 +174,7 @@ msgid "forderv(query) took ..." msgstr "forderv(query) 用了 ..." msgid "Generating final logical vector ..." -msgstr "" +msgstr "产生最后的逻辑向量 ..." msgid "done in" msgstr "结束了" From ea8fd344a73799a02e15643a21ec6a1798edb127 Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Fri, 3 Jan 2020 15:43:24 +0800 Subject: [PATCH 14/28] slight progress --- po/R-zh_CN.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/po/R-zh_CN.po b/po/R-zh_CN.po index 19482f798d..ad144c86eb 100644 --- a/po/R-zh_CN.po +++ b/po/R-zh_CN.po @@ -485,13 +485,13 @@ msgid "Attempting to do natural join but no common columns in provided tables" msgstr "尝试进行自然连接然而并没有找到表格中相同的列" msgid "Joining but 'x' has no key, natural join using" -msgstr "" +msgstr "联结但 'x' 没有键 (key),自然联结用" msgid "not-join called with 'by=.EACHI'; Replacing !i with i=setdiff_(x,i) ..." msgstr "" msgid "Constructing irows for '!byjoin || nqbyjoin' ..." -msgstr "" +msgstr "造成 irows 与 '!byjoin || nqbyjoin' ..." msgid "Internal error. Cannot by=.EACHI when joining to an index, yet" msgstr "内部错误:目前尚无法对索引(index)使用by=.EACH命令" @@ -703,7 +703,7 @@ msgid "" "single j=eval(macro) instead. Both will detect the columns used which is " "important for efficiency.\n" "Old:" -msgstr "" +msgstr "j 中找到了 '(m)get'。旧:" msgid "New:" msgstr "新:" From 8449f1e6405d37f8ba106cf67648fc48a7cae141 Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Mon, 6 Jan 2020 12:49:44 +0800 Subject: [PATCH 15/28] simplify given feedback from r-core --- R/test.data.table.R | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/R/test.data.table.R b/R/test.data.table.R index bc96c1f35f..477bc7f1be 100644 --- a/R/test.data.table.R +++ b/R/test.data.table.R @@ -149,16 +149,14 @@ test.data.table = function(script="tests.Rraw", verbose=FALSE, pkg=".", silent=F ntest = env$ntest if (nfail > 0L) { # nocov start - # see https://bugs.r-project.org/bugzilla/show_bug.cgi?id=17682 - # for why this isn't stop(sprintf(...)) - msg = sprintf( + # domain=NA since it's already translated by then + stop(domain = NA, sprintf( ngettext( nfail, domain="R-data.table", "%d error out of %d. Search %s for test number %s", "%d errors out of %d. Search %s for test numbers %s" ), nfail, ntest, names(fn), paste(env$whichfail, collapse=", ") - ) - stop(msg) + )) # important to stop() here, so that 'R CMD check' fails # nocov end } From 0e6ba9aad9609ade72551e9d2a372c093afe0b59 Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Mon, 20 Jan 2020 16:41:08 +0800 Subject: [PATCH 16/28] add zhis suggestions/feedback --- inst/po/zh_CN/LC_MESSAGES/R-data.table.mo | Bin 91502 -> 92704 bytes inst/po/zh_CN/LC_MESSAGES/data.table.mo | Bin 138523 -> 138519 bytes po/R-zh_CN.po | 12 ++++++------ po/zh_CN.po | 3 +-- 4 files changed, 7 insertions(+), 8 deletions(-) diff --git a/inst/po/zh_CN/LC_MESSAGES/R-data.table.mo b/inst/po/zh_CN/LC_MESSAGES/R-data.table.mo index 57d39fd42a115872f20950ce66fabac45e14c6b4..1c18ff41c4d1023472a74ffc678e9ba0b0da8f32 100644 GIT binary patch delta 14464 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

ALZES#%Y_(^kaX)7pGGth?dyN{_wsWdIVMKy- zbhOPr+Gb-Gq}UDXC~HEJHJX8wzP88H{jpZN)!AzSMjZVVZH*Z&y_uerGTP{2&>Y%s z%RYGckXL|_w{o_0V*c`J`JWxmT|MWw%qcksvhJDFb7)ik!Zmp-Gjr$9qf72(9=>~QLGJto_hx?N9M-%Y>vLCb zmMXL6=O3OXRTdr3J@hGWum9Uy$a2cP?%l}?^ACTVbCm93X!AZ_M=#%7xYO`wcxyg6 zGWYJxt@+dT=~^^?|5OQ({Nxw{VDJ-#e|Qx^S{m$lREsO8ggjx5cc zyEu3E^1PK>b9b)JpSPQvOLbH10Ek2l+y@*Eb-_g@@!t;Ls D&5aW> delta 13277 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 WEnA?7Nyu9NuC4M`i-Gn?&i?^LoM=`6 delta 5706 zcmZYC37pMUAII@?E@Nvd? zW+^m?P@?d(phOBiwlXD^$MSr>_xz`NJ*2Rp6GH>7NyFw?4X0vBT!S5O7sg}hLDt-Zb+8Ez z#Y9|*4e_{dnZa&?9dQ@!&kv4R(}O~XA=Y%Z#;n5G)MFm8rWf`3cpF}Q)S5UfGt``4F{wLo?(^x5CUafO}ChEbyGWus!Mxa!~1Y1(g+b zrn{xiLaoqRR1D>z_Po~fZoKiR7kdY_72o0*^}pciOEID-zC=McCco$&@C??bz8dkjS{1PfgZlJDDiR8GwoQO)RL#PAfmVdYhC8FMBuwP$?N~iOFz42=<7)PLj^E0f2 zF|S)w1Cvof*ax)|IjEI9fXb#wxdpBx-FFP?Kv{{s@N3irnk;mAJq2~Z>_r7#iAC<9 zYKy9GK)pyFcEPHPUH{Xl^Wg{7gqpk&9WP>@prEMEMeXGo)Ib%NSW^YF@D-el+LG{_ z);x?|@gnZROnhglTM6?|YbsIii8>!9p|rYgoXm|x+NWk3W{T>Eh)6o9jQsEz01bCa2;xkzQ+f#!X~%$<1mi;*VqRyU`K4X z*_wIy2I?Sd`kpl(@M0t0Bmc|NaQ7B#R$@mij&`dXpahntJ`$JUi>S1zx6Qrb7)+C6HCM4UPuGgI+!=9&VLRO(&-XosN~4OqtSN^b zuqO`1Zg>F8@PO*O-Naga=vMA5eno$YkE}U}7w|>gwuj#l*!E+$_d`%G@^ zxDR)t-h3v9gwk>g>cJ(xaT82Kz4;K-QM(wG&flO`ve+^AWtW1H)-+6^ppFBm8w(tF zOVk)Oa2M2<%d=P#H=_pJkILt(s0r2m)|!);jrwhvc7iNH4|V@a)b+)1@%R)fO=n{Qu15v!7pSAV_z&*rwHu!ObLVF7FXWZTmLej#_#OnAKYRSLAXq2NSQv57$Z22jLdgIRL z+z*dQs4ZQKNAMcf!$aqtu@~ILQ&B4)8Am~T@g_#|9yMU>kJfyI4N>_V_{o|DSOr!8 z5Ve%&a2__fXwA*|C1&ACjKk)6Zo-`~o%(R>g`1Ed=luWK?Og*@uwDL zF>2-ZptkHhw#7mPUHt*ndGQ$PC_alivdhP`3`Cc@ZcHG0GPOf3-Be7##n>NrqL#Ww zp+IzR??+8!FzTS%u1FXrI(m%N!hj)2Xbhhx%E6Qh zV9Fk@sP6Y9_&vc}1JUC}SL@i&cp0?iUzguD#mh?%hxXBIi#!02Es4nHB!(VOly{wFIwLSDGqx8`imwGD2x!6;iz8uvy%v+cdw#U3J8R1Z< zgbQ{(L93$vvEGG@aLhJ(Zt?Om;!_F)Dbc5ojuu^0o3{UruX||I;i*sldvx%6w+x0B z(xX+=Q)2kj2)W+0mf_G*dNihb3i>_QyiF}Dg&LF$M88edlRw%pFOSi-(No{QC%@;i zSEg0CTsRbnj<0)^N^%^3dfsBMeXDTj09VxZd-CJCm^YzSFqBd1uea3t>Yglb8TY(E zPqu%LqDeh@-jP<}lpgVcKjT=rpq>SPYxDfJ#-#(%|9Lc@C4O7jOUw+G>rf^T-C6bI z&#Sn9#UihFW-!H+{p)S@rK@LT)0RM4cjd>DN1M*Yzqftry`32jl@9-Ze1*LenZa6* z(W6!P`#m#g({uFEcdnjyowhr@-Wl=Ls@>+YN4@#88ARJnYT(n1Ki#o@Qt#I9_HJ$G kl__|7?&^d&*ZSJhg?@N-axs%IXW2Ge>D|Wt?9q+?1)KS7rvLx| diff --git a/po/R-zh_CN.po b/po/R-zh_CN.po index ad144c86eb..20fb1d95ff 100644 --- a/po/R-zh_CN.po +++ b/po/R-zh_CN.po @@ -139,7 +139,7 @@ msgstr "试图使用 intger64 类型但 'bit64' 包尚未安装" msgid "" "optimised between not available for this data type, fallback to slow R " "routine" -msgstr "" +msgstr "对这种数据类型的优化尚未实现,使用备用较慢的R方法。" msgid "" "Not yet implemented NAbounds=TRUE for this non-numeric and non-character type" @@ -177,7 +177,7 @@ msgid "Generating final logical vector ..." msgstr "产生最后的逻辑向量 ..." msgid "done in" -msgstr "结束了" +msgstr "结束在" msgid "%s is type %s which is not supported by data.table join" msgstr "%s的类型为%s,该类型无法用于 data.table 的联接" @@ -206,16 +206,16 @@ msgstr "" "列才可以联结" msgid "%s has same type (%s) as %s. No coercion needed." -msgstr "" +msgstr "%s 有 %s 的类型。不需要强制转换。" msgid "Coercing all-NA %s (%s) to type %s to match type of %s." -msgstr "" +msgstr "强制转换 all-NA %s (%s) 为 %s 类型用来匹配 %s 类型。" msgid "Incompatible join types: %s (%s) and %s (%s)" msgstr "不兼容的联结类型: %s (%s) 和 %s (%s)。" msgid "Coercing %s column %s%s to type integer64 to match type of %s." -msgstr "" +msgstr "强制转换 %s 个列 %s%s 为整数64类型用来匹配 %s 类型。" msgid "" "Incompatible join types: %s is type integer64 but %s is type double and " @@ -255,7 +255,7 @@ msgid "forder took ..." msgstr "forder 用了 ..." msgid "Generating group lengths ..." -msgstr "" +msgstr "正在生成组的长度。。。" msgid "Generating non-equi group ids ..." msgstr "" diff --git a/po/zh_CN.po b/po/zh_CN.po index a3da635c2a..82cf1982c4 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -442,8 +442,7 @@ msgid "" "Dropping index '%s' as it doesn't have '__' at the beginning of its name. It " "was very likely created by v1.9.4 of data.table.\n" msgstr "" -"丢掉索引(index) '%s' 因为它的名字前面没有 '__' 。这个很可能是 data.table v1.9.4 创建" -"的\n" +"丢掉索引(index) '%s' 因为它的名字前面没有 '__' 。这个很可能由data.table v1.9.4 创建\n" #: assign.c:562 msgid "Internal error: index name ends with trailing __" From 7b47443c1754f364537bb87eda292ec39aa4858a Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Tue, 21 Jan 2020 11:25:39 +0800 Subject: [PATCH 17/28] added remainder of zhis translations/fixes --- inst/po/zh_CN/LC_MESSAGES/R-data.table.mo | Bin 92704 -> 99638 bytes po/R-zh_CN.po | 96 +++++++++++++--------- 2 files changed, 57 insertions(+), 39 deletions(-) diff --git a/inst/po/zh_CN/LC_MESSAGES/R-data.table.mo b/inst/po/zh_CN/LC_MESSAGES/R-data.table.mo index 1c18ff41c4d1023472a74ffc678e9ba0b0da8f32..8ec3b6ca5b897dce20f17171eb6f404d858761e5 100644 GIT binary patch delta 20641 zcma)?2S60p)_`ZNvG>?zEC?!Ki&0Tx7kg|m8cSSYfmPVWU5cpB#Rgaq6npF~F)Em# zVnfn2y_n*kUfBiG)bzxZ|2uOB)OoAQZLiifY zf|KE#FijI>orJQW>u@Ig7P2NS{63|j6)+$9NtlT$B8F&MHRjj88ftccI&%0hO&bqm z;aGSYE`WcUv=7&`Dadcb1lVe#m9!V#Q{)X#vj)0vPVwInE-cm|4wZkzR;JyVtHhe9zHD-_i~0!2l|5IfU8gORYq zG)=n-SHkLW>~u{#4kyCC@K+cJgCEeeZg7UlG}r?9ao8R{1!bY0kI9HCKZQjwc7|%$ z^+DyogJB!WCqh|yER+Fqptx-wl!X^T%tZSc%1-Z_iPm6>$qTR#@*hx+tk*2Y691n; z29MB+VG8^cwt&eGDa~wvQhyS1yxP}rAnZR|o#7%FjC>7>rv8Gm(7|(*Ek!|@coWp& zbI=cZVNdb@nsYVn9t!$FF}?**RJk2Sz?UJ%rG?DXG(1L2gV>>V6^g1GV@VjaHV|%w zE8!B@YQEA)E*yaTKCA_sSv74PYy;afzjlO-4xfefVF_FfZ^6benN>7}888a&f?4n{ zD4NN_F#5w+Ae+}}&}b-}55wUB$f;=MP!=!@SGo(1fu0d$rjQYCH7nkOp~#=Zez1MC z($F->7+NOm1;2sqVTTxk3mgpN;S`8{YQ?ZKY{o&0#`;4}Pg?=8XYIpS^e-KH+Lh|} zz#+&lL0LfE1&X6!7;+kv0WZS_@N>8r-h_CdW?!gjP2dGs3%&xw;agCLZR6D4F&G9S z$Hk%lwq&+az{RFL0Xx7lC^k@=)rmX^wuBEsS%3?+gWF(7SOERtJMb6yBh0pN2RM{w zmM3W1KFV{UOx$;oGSWF7GTkXy4M)Lz7zBTWXjkjxQYu>un;@4!8R#b{Ua-xrLi8K3 z3v#tYb+!TUGvr=SysBxEiU;f9Rpir9Y{s)RSzVh2kTUIkxC~CFmsstquobL@o+m&* zI2Fc0F}`9L4F81VU{I>kSPB%)Y=g4Fb5Jz&1sn;h<037^|HqJF4sAXZ)xHa5px>bk z5WZ9`&<Agm-7EGaUf8A&;j2(4Xiaa?%plkc+F)b2 z4a(6x3YWt?7zl&2)RD}9as*dl5BL*o3OjAov@@_DM2Xs08`1v|GR|zykrn4dKje!! z>c0N~$^f%Asmo;z6cs)L9q>9F4o7WP?wJWi^}ApVSPUn?=ipG-Bv;wmR2YlA#6xB< znJ-{JsBcl%;|z%FYRgRCg5}kS30u{XOx~f4a3z$TZh*4zOHlfK2=~A#JJmbk4UxVa0H?yK2e^3P5!f4+!Xe`Stq<}_O~EWU2ws81q2-W@a3i5;XgM4TFG6Ye zyIDWru%dLogUV3#-9fP;}W~_~?K!usVDW2Ei9#L--@?#!NNxHSKxikW=ci z`U!?0H+w>9W;paLr(hYGyWwrfnP^R)R55%i6r)@O#S0#V?crNcCb|WiL9IZkwmFmq z`av0QER=Th;pfl^MI%#BD;rpP8vS>t;3NfNOz*-5@Fu(m{s|?p^gW|4o0p)du+CX^ zC)9(}ko&;9VLB9B+5^Qa>J(}kS#2P6!kbXWpMOrh)H=?g|4a(jQs9P735VlgI-CHn zLD4{m3(CKz!}`e4usL*_%!IPDJy3^N;b>S2>%x$WiUZ+w&w1r+PP3HLz1 zt4b3^P;B8Ihs=Y-BkU+gT4~+^1oG_?yW-FX5uhuPq?c2RdOVco5cwS4_SEC6avrJHi$( zt1qAaP$t?A#S0F@aQF*s1Bbq%tbI1DjckW?;360RmqJfxGKa`ag3rTh@a|XDPFlmk z$o_CGjDWJhub~Xo=rtANTf_RuDNxE+Ls9ug7z-~$S$M$fDz1!$Ly==&NB?pb$0(46 zT!q2#OV}E=dPCVpA80}T1U?KugX7?^Ys&35z!2m!&>xnV<#pdwHqsZ)pnN`*`a&og z_~=daFCA;Xr9Qdtfeo1HJQNi^|F-(#`5e|m4u40v=QP*=c{RKjZib=oMK}W1z{$JA zF(%!xG4ft0-jolI!{If?^N&h9W2<2wO+!z(Zh{tRWpe($Pw zsW2XS1?&ZHK+%-`9>>MT7D63)>HA6pp512VIp{~l*HAjv|3LX|7_5oB4vOk>ps4Pw z$&cZ^$hAIHRvre$Sd(E3cnTUv3zs5)33V9#kr9$TS_YXe6#NYP!FC@j)lP-`k>^91 z*zyTy%?<)!SLDf`D*sM_a)cT1Zg>`o{3;X;{SIrv(9hImGz`jyCPRz({|qvr6wHKT zy}7U<+yh0`C!h{Lh8^Kw&a8`UT>Ywa8T6z6I(!KJ1Si2MU#gJ1-(;h&l$R`rnbdy) zyTQ1xdH09g;FGZDH%c>~L)l=BZ_$4e8U0&z{ceMzy1F-%(F8$}CqpqN7aR#Qp?Jxw zFc^Lc8^MM*Re1-v1i3ft3{Sw8@C_*a%ishUd<*@{N|xMG0cRTwK|TeWz)wv17L*C~ z?-cvOS;(VJc|SaYTmaj_S>LO8k_>Ag--eB$_JeZwCQxjntA|WAGWSDK-BfrOegH*v zX+J9CZ2c1pdtXy(k&@73>Kc)U+6HzhN*4*=2Gc zv?0F&$G|?d)PPIjDC8%h4Ezgx7`F+R;!LpdV9yDY{Fix&<-4y;4`6P3l1$%ZMg zEv#MFV%+ncVSVJ$&<&@-2Jm?(8hHm!g=KIp9K z<((T?JciLM;?5Q0NrJMnRFmgnP2^vpoY`McG}O1D#c?m;}2tu^5-mE+}XH6cp9gXsXx?igC?> z;vE_AE_f6!h57Iy*rS=UnRHkic{dcz9EQ@r)I&zju4!|N@v1cwwnp9xd%=7tNAf8g z2Y-itFuaAucyEY-A}@ntL%X3Y^fHt{^dCYak= zttb_WTOEcY;hRtv(z1=k_`Tp57=e5RHiCg|Eyl0!20%HwQ&5cdCX^kvZ)Y(swK4Eb zd^|wT&3U>C=(y;V9|8=HcWs&!UZtePkF^PC}&$sw-_4efy4#s6Ob`Hh(I`&aVlivsb7r%U;0`Y>+p`7KPP-6Pvz82$}bU~T;I25CL-DHh> zluZnTa&$AH3oeAx|6>>loA*;1SPVszk3wnxiieD0{ZInO(RZ+1|4cp;PDU<=!(iw*Wo*l!oNY0j z0Dpw?Dm8q(vhJl&7Ip^8oltLr>fap7d&LZ>!;SDR@&9}>b>TTEDt;Ee1^Z3J3(!cN zNvdPU{TA&h%8OwFOq;CS=oXZP_Mf6`AQL7dm%=1CZ>l*gpYc zxC<0LUF4@ zusJ*ndCAmXhRvW4%7T7_w_v@8*uNi{KOR#4-+s2T_JObkg>HS^0h_XIB8zVE2dB3&?Re z4*3Qg0z>Dk9WH^Q@@y#mw?SF(F(?{43){nYp)B|(D7Mzis^}R+M&s{jxQ~kP2=&fZ z3gr&y7ilrRf+L~vVgh9W`A}@*29yOfi&7hD14Zr*hyHFzI<2kNl-LQ_LfB4i{S1~?ZSIf~=(Uic*J1k26x z`iqp&G=rg(cYv~^Sx^?90%fAN;2iiVd;o^Il%{f_X!2=T6JBxQ|6&|3Qy^#i5fs(b zcB_EW4a$O&q3q-zPy)_ccpjdH(%zA%UR-kEB;;MNAuNXyf`5T>?OKv7#y{nBg`JTf zNy7iTk}0Mj2>PJ7QL|)qBwe8_Yy=cl$3vMo9a`Yf6lGk);RNJ-sKei(^lQIZX($}Z zLT#p;0ppO5c*w}gnx?7=`$Gw})1kzHB~s2zx1hLB!=>tzD-g=gmckBjHLL>Pat=f6S~OK|asyGn006%*p#vKY;uK zQ~nM4PuhJ4`;ZN7ZMXDdUye_f*J5F_+Hr zJWbg#(yOE>2w!q5czsgoP zm~A|EgtZ7;NnBdSiv%w?+Hg93E3M6^p~*DLTa#9hdeUw^X%k5zraTS>tta*J6jK*V zK7+I$`B733W%Bf^X6|37@?{EQU>%Y?8_Y(x$uFgBH?)~`N2ufK*P0+Nf`_S-SigeQ z61hET8%dt&w8>Xl?Q6=ekP|H*84$z(YEku-#ka+6g&VPtHiShJm!ccYDb zphQ8r4duCyyo)5y{R-NX^vNW@)|7vN&1loeV>Wz)26HJKVh;Wg<=>P4nKCPMBR4ba zzJg(9KN+thauBkN^&oi*d=##NA5xz~zT!!z>@f003Z93ajr@25;cL?HDh->EA7}R3 zNj`#nUX}XS$ggLxGn9Wr8b*E%Wh1M!8A$#u(m%{`1RH3#3#O8$i~Tz(kmo}hM#Es_ z%j6^ALRj&Ag}jp*pHweNN6KfBx|(&o-f7KAb4Y%aU4T&} zc^1-c5o~SBTi`G=Z!|D}yk&B;#Q(N*YDB?4voOo-(4O+Plr166An&9674rW>x{nk< znLMi$jGskj-)rzJsV-@cS86GnIWY0r1R8U&5F7(oW9#V6eb|_BE3NR0=Y5V3uls+ zlMayNSw@E@@DJo<(n#`sN%c)l1e0%0z6EvHNe4;&Df<=OnKaG5EQXF-2U|-70 z%=%(D7FnK$N!v*iL}q^D>CVq7q%=Agsv_+pbCL&;&A!?c%4#7Tq--|%U(L3HyGdV} zat-Rz&Hjze&Y{$eBAuiBe$sNvjrrd}I7Y?2(t)&=ikh&Y$UOf*zSkV&cjOS#57g}@ zwW9ot*>1Qr=IM^y0^VbmOWAzV7o;TGkA=CU2j%{MnMSoqOQ@I#JHlG<6B<-Jqscfa z>q4D8b;!&A?Uv_V^3RcSNz*8^o8?K=b)amW(TYjQS3I@JL>letp<1)U#ey?^n{)|F zNU%Ag?2Z^c(W%=O+uezhkG99zbhlG?+Y${q!Wkbndf0?%qjakyN>8=M$0@Pkxd%Jd znHuFxilBX@GcGCKq5He_z?4{fWGn@aM62E5)*Vhg+GUMQv^yQ{ZZc6~YJyF-I}&X% zHkZip)7b)hZ97$TrxZq#qpJWACuE@x7L?zS(Hpai#!!p43QF*HXI{%X^Q z;IwSb8Og9A`uz@6XvMfN+eAAWvb)__sXbaxOmXVTR+n8g?xq2g8?K2dx-oh~?|3qP zZFK}B>Z!IwJ<68IqIFMVtTj_+%;xf6q!&X%C|X%v`t9_g%^kQ&%6D0kQK4n0ty z-4W@sS=};|O%J$pS{363=*|T3tAa(b`pzW63<*o4u=#k&;!FqJ6(}B zB9J&*LH#9;YE(N@+-8Kbhv<`>y2B>wmtf}>jaj2uKc%R^mTZknQjRfo%rrUM(6GA0 z+-`Is6VSMq45z!3BG|FibG8%|BrmIH@o+|L0@cb+w z@f@pi1Qo|Z!wfIM7w{1DF2lv!tgKWbrERe_K7mke%)+t#Q)`c&V&}9Rm`ik$!-&>F z#!@Q%*Kh+=kt)$C$zhF-#vGVNo5a#XWrj%ECV?i=9oEThi*$D~VhwZJBXP(mdvtW7 z9ovdXRq7vv!LTz`-h~R=V$~G;L0OTpPA3N&ndDByM~z`~J^#oZgoahv;Acb5x6AckUOeFbq{IZeMp_dRlU#I( zu(5pE6-zL7g&tjUYCUZ(m($hLwAs*tFP0yx=843D>BQ*~LvSBXa@Mek6Hs-cRZP%O zrJ=lNryQd?{e<8+Te2+<`?keJxkE8CZL-TLV@bW6ttW=ui7dt#q0%CmYe2VgI7H8g z)G*zdyJy9xT_c_G>_B?5atW+*e3+pbkj+qBuw><`8Xhq>qpA2pynTt%V3gf0-Y=Vv zv?iG@6zOuh-N6YiXH*it&c?)&#je?=ZE>W{Mu_iiyC(?Msf#Dx7VmVW>hxf&cz1|4 zEh&Mm$goZpG(RGBer|&dhsQ=t_jhyHQHHOm8I;>bI$bV_EKcK4LhFt)&mdGEJlNlT z-+guOX9KQehE%dP{mx(#oc`Td{_d*d_`5xogBXgh7{TmnoTa~;aEeh>nt*>)(t!f?_XLZL?V%TxT)f6bpb?6Humf2(nIH`(+hEFk`Tx=9Z zG*7L%0B%MZxuD5o3+s3oS$ZlLpZx+pI>mi_{Ah+&4mF~T;rF6?<-po_JwQ0WH zYfE>n_GWJXB5h?^eqmYKs@x-p}2qPhhk z?`5DIukBk@MfMZD>~uJI_S;bQ2OL$?}ejmO>8x=0h8Bnz~N271$1gd+< zxs9ryj8InmNZEl6Wh=InUd%&Ykq-?DpngEWNl|njL=Bdn#KG zEMHOVU6bWIiJ4qR+hyxkmhN8RO<%*Juu=J=Rd!3CnyIKYYV%}GLsu+LnG{uCB zrk*=(F>tx~)prQG5wkjd(0ggC9%y{RbTdK+UnctBhxw1AlyAw?1No{kzNmDq^u!7O zDD>yg%R^~lhw7Gg7LV`bA(?K=K3`@I23LA=ZTZ$>w16&r`!mY&(@Rert=z+kgPe|c z<38nr0>?3m+MI^L=^-t;rx?8nP@=3pd@vNPjrZVQ?>b}a{!w)Bomt~sUs!f}4>6?Fb1~bSw*lP~KFacsmOZ-SpT2EGeMeXN z_U<;LRrU^MU^b@m=4?>$jdi*pZl)t#Jc6Q1E?#7*D%47YRoR@f`W)(^zTpD9QI6#sUqXBw`3j#P5GplE zk0aZu%0JZ)|Hf%Ap;*06lnxR;7jCmx+yMRXJT6*2 zZ@d*`Z6&5N{q|>CSyBi4*5-OIr7>_xQ99eLv~S;*^DI=(-E^UydF5%lh;-iULM(BY zyx48Or?utH`&c{*^B&$ND=;j)XZe<$W%>C%ec3sshcC!&v^EPRmR-)}%>b9?D9Z9q zd5g9(PGQY9mdC5j@g81Xnv>2l`r4CQ4p~iyPz)@sAk&d z-#(h?s{AWdFU)IaX>92yC;qqS?JeHUp14yn&$7G&VvOcjl)99*7qz!+X&Vu5bMbo$ zb+3BUvt&gVvi+l2Mqz9ROP3n+N>4t5s+FOZT#^H3lin4(eJ2l!`50l{o4vO5(R^-Z zHo?b~H|-L)TG`n(WyKltB}F^Tgf{>}ow`FSL&^5_oh++8XV#bHZ~d8yo}r|O>4N6vAh z__m+*rtQR=RUh2d2v`{2HR_#}*~>(rpYb0WMy`?EQtg!!5zJYZ{@t@P)CK>AZ~XUaQ-6 z9L<}3r1GR#hP*J#LNm8lhA=!(T^TaZg^g&m>Zg&~fRt|(`zp_nn?_fkZ|Yi-9oSL8 z1r-6k=T>=76$XvBOsW6CzrM*#K1dd*^F8Oy-d1w)kpA~Cx{$(U J4_Xd4{a>h@^HTr- delta 13681 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 IW3|Ws03su$%K!iX diff --git a/po/R-zh_CN.po b/po/R-zh_CN.po index 20fb1d95ff..aba5dab523 100644 --- a/po/R-zh_CN.po +++ b/po/R-zh_CN.po @@ -177,7 +177,7 @@ msgid "Generating final logical vector ..." msgstr "产生最后的逻辑向量 ..." msgid "done in" -msgstr "结束在" +msgstr "用了" msgid "%s is type %s which is not supported by data.table join" msgstr "%s的类型为%s,该类型无法用于 data.table 的联接" @@ -226,15 +226,15 @@ msgstr "" msgid "" "Coercing double column %s (which contains no fractions) to type integer to " "match type of %s" -msgstr "" +msgstr "强制转换双精度列 %s (不含有分数) 为整数用来匹配 %s 类型" msgid "" "Coercing integer column %s to type double to match type of %s which contains " "fractions." -msgstr "" +msgstr "强制转换整数列 %s 为双精度用来匹配含有分数的 %s 类型。" msgid "Coercing integer column %s to type double for join to match type of %s." -msgstr "" +msgstr "强制转换整数列 %s 为双精度用来与类型 %s 进行联结。" msgid "on= matches existing key, using key" msgstr "on=和现有键(key)相等,用键" @@ -258,13 +258,13 @@ msgid "Generating group lengths ..." msgstr "正在生成组的长度。。。" msgid "Generating non-equi group ids ..." -msgstr "" +msgstr "正在生成不等长的组标识符 . . . " msgid "Column name '_nqgrp_' is reserved for non-equi joins." msgstr "列名 '_nqgrp_' 是为不等长联结保留的" msgid "Recomputing forder with non-equi ids ..." -msgstr "" +msgstr "用不等长的组标志符重新计算 forder . . . " msgid "Found %d non-equi group(s) ..." msgstr "找到%d不等长分组 ..." @@ -273,12 +273,12 @@ msgid "Starting bmerge ..." msgstr "bmerge开始..." msgid "bmerge done in" -msgstr "bmerge 结束了" +msgstr "bmerge 用了" msgid "" "cedta decided '%s' wasn't data.table aware. Here is call stack with [[1L]] " "applied:" -msgstr "cedta决定'%s'不认识data.table.使用[[1L]]后的呼叫堆疊就是:" +msgstr "cedta决定data.table不识别 '%s'。使用[[1L]]后的呼叫堆叠就是:" msgid "key argument of data.table() must be character" msgstr "data.table() 的key参数必须是字符" @@ -488,10 +488,10 @@ msgid "Joining but 'x' has no key, natural join using" msgstr "联结但 'x' 没有键 (key),自然联结用" msgid "not-join called with 'by=.EACHI'; Replacing !i with i=setdiff_(x,i) ..." -msgstr "" +msgstr "配套使用了 not-join 和 'by=.EACHI' 的命令; 用 !i 取代 i=setdiff_(x,i) ..." msgid "Constructing irows for '!byjoin || nqbyjoin' ..." -msgstr "造成 irows 与 '!byjoin || nqbyjoin' ..." +msgstr "构造 irows 用来对应于 '!byjoin || nqbyjoin' ..." msgid "Internal error. Cannot by=.EACHI when joining to an index, yet" msgstr "内部错误:目前尚无法对索引(index)使用by=.EACH命令" @@ -503,7 +503,7 @@ msgid "Reorder irows for 'mult==\"all\" && !allGrp1' ..." msgstr "对'mult==\"all\" && !allGrp1'再排序irows ..." msgid "Reordering %d rows after bmerge done in ..." -msgstr "再排序%d行。bmerge用了..." +msgstr "bmerge 之后再排序%d行用了..." msgid "logical error. i is not a data.table, but 'on' argument is provided." msgstr "逻辑错误。当 i 并非一个 data.table时,不应提供'on'参数" @@ -600,7 +600,7 @@ msgstr "有 i 子句和在 by 用的列被侦测, 子集只有这个:" msgid "" "i clause present but columns used in by not detected. Having to subset all " "columns before evaluating 'by': '" -msgstr "" +msgstr "有 i 子句但是在 by 用的列并没有被侦测。于是所有的列将用于接下里的 'by': 运算。" msgid "" "'by' appears to evaluate to column names but isn't c() or key(). Use " @@ -643,7 +643,7 @@ msgstr "" msgid "" "by-expression '%s' is not named, and the auto-generated name '%s' clashed " "with variable(s) in j. Therefore assigning the entire by-expression as name." -msgstr "" +msgstr "by-expression '%s' 没有命名,自动生成的名字 '%s' 与 j 中的变量名冲突。将用 by-expression 用来命名。" msgid "Internal error: drop_dot passed" msgstr "内部错误:drop_dot 传入的参数有" @@ -703,7 +703,9 @@ msgid "" "single j=eval(macro) instead. Both will detect the columns used which is " "important for efficiency.\n" "Old:" -msgstr "j 中找到了 '(m)get'。旧:" +msgstr "j 中找到了 '(m)get'。ansvars 将应用到所有的列。请考虑使用 .SDcols 或者一个单独的 j=eval(macro)" +"两个命令都会侦测影响效率的列。\n" +"旧:" msgid "New:" msgstr "新:" @@ -736,7 +738,8 @@ msgstr ":= 的 LHS 不是列名('字符')或列的位置('整数'或'数值')" msgid "" "No rows match i. No new columns to add so not evaluating RHS of :=\n" "Assigning to 0 row subset of %d rows" -msgstr "" +msgstr "没有找到匹配 i 的行。无法增加新的列所以无法运算 RHS of :=\n" +"指定一个 0 行的子集" msgid "" "Invalid .internal.selfref detected and fixed by taking a (shallow) copy of " @@ -763,12 +766,17 @@ msgid "" "deep copy first using copy(), wrap with suppressWarnings() or increase the " "'datatable.alloccol' option." msgstr "" +"列指针向量从 truelength %d 增加为 %d。浅拷贝已经完成,详见 ?setalloccol。如果两个" +"变量指向同一个数据 (这个我们无法侦测),会导致潜在的问题。如果并没有,你可以" +":忽视这个问题。如果想要避免警告,可以使用以下任一命令,像是 setalloccol()," +"用 copy() 深度拷贝,套用 suppressWarnings() 或者是增加 'datatable.alloccol' 的选项。" msgid "" "Note that the shallow copy will assign to the environment from which := was " "called. That means for example that if := was called within a function, the " "original table may be unaffected." -msgstr "" +msgstr "需要注意的是这个浅拷贝会被指向给调用了 which := 的环境。意思就是说,如果在" +"函数内部调用了 if :=, 原先的 table 可能不会有任何变化。" msgid "" "Cannot assign to an under-allocated recursively indexed list -- L[[i]][,:=] " @@ -844,7 +852,8 @@ msgstr "" msgid "" "Note: forcing units=\"secs\" on implicit difftime by group; call difftime " "explicitly to choose custom units" -msgstr "" +msgstr "注意:在隐含的 difftime 强制分组使用了 units=\"secs\"; 请明确的调用 difftime 来" +"选择自定义的单位。" msgid "logical error. i is not data.table, but mult='all' and 'by'=.EACHI" msgstr "逻辑错误: i 不是data.table,但 mult='all' 及 'by'=.EACHI" @@ -853,22 +862,22 @@ msgid "Internal error: by= is missing" msgstr "内部错误 : 缺少 by=" msgid "Finding groups using forderv ..." -msgstr "" +msgstr "搜寻组中配套使用了 forderv . . . " msgid "Finding group sizes from the positions (can be avoided to save RAM) ..." -msgstr "" +msgstr "从位置中搜寻组的大小 (避免此举来节省内存) . . ." msgid "Getting back original order ..." -msgstr "" +msgstr "恢复原有的顺序 . . . " msgid "Finding groups using uniqlist on key ..." -msgstr "" +msgstr "搜寻组并配套使用了将 uniqlist 用在键 (key) ... " msgid "Internal error: byindex not the index name" msgstr "内部错误 : byindex 不是索引(index)名称" msgid "Finding groups using uniqlist on index '%s' ..." -msgstr "" +msgstr "搜寻组并配套使用了将 uniqlist 用在索引 (index) '%s'... " msgid "Internal error: byindex not found" msgstr "内部错误 : 找不到 byindex" @@ -904,13 +913,13 @@ msgid "All optimizations are turned off" msgstr "所有优化关掉了" msgid "Optimization is on but left j unchanged (single plain symbol): '%s'" -msgstr "" +msgstr "优化打开了但是并没有改变 j (一个普通符号):'%s'" msgid "Internal error: length(irows)!=length(o__)" msgstr "内部错误:length(irows)!=length(o__)" msgid "Making each group and running j (GForce %s) ..." -msgstr "" +msgstr "进行分组中,并且运行 j (GForce %s) ..." msgid "setkey() after the := with keyby= ..." msgstr "keyby=中,:=后setkey() ..." @@ -1061,7 +1070,7 @@ msgid "" msgstr "参数 'by' 只适用于原子类型的纵列,但现在关联的纵列不是原子类型" msgid "Processing split.data.table with:" -msgstr "" +msgstr "运行 split.data.table 中使用: " msgid "" "x is not a data.table. Shallow copy is a copy of the vector of column " @@ -1299,7 +1308,7 @@ msgstr ".isFastSubsettable 产生了内部错误。请向 data.table 开发者 msgid "" "Subsetting optimization disabled because the cross-product of RHS values " "exceeds 1e4, causing memory problems." -msgstr "" +msgstr "筛选子集优化被停止,因为叉积后的RHS值将超过 1e4,会造成内存问题。" msgid "Optimized subsetting with key '" msgstr "优化的子集用键(key) '" @@ -1353,7 +1362,9 @@ msgid "" "Git revision is available when installing from our repositories 'https://" "Rdatatable.gitlab.io/data.table' and 'https://Rdatatable.github.io/data." "table'." -msgstr "" +msgstr "Git 修订并不存在。可能是因为 data.table 是从 CRAN 或者是本地档案安装。\n" +"Git 修订存在的情况只限于从我们资料库 'https://Rdatatable.gitlab.io/data.table' 或者" +"'https://Rdatatable.github.io/data.table'下载。" msgid "'fromLast' must be TRUE or FALSE" msgstr "'fromLast' 必须为 TRUE 或 FALSE" @@ -1494,7 +1505,8 @@ msgstr "请为 'measure.vars' 中的每个元素提供一个名称。" msgid "" "Duplicate column names found in molten data.table. Setting unique names " "using 'make.names'" -msgstr "" +msgstr "重复的列名存在于在 molten 之后 data.table。请使用 'make.names' 设置唯一" +"的列名。" msgid "" "y and x must both be data.tables. Use `setDT()` to convert list/data.frames " @@ -1639,7 +1651,7 @@ msgid "unique() + setkey() operations done in ..." msgstr "unique() + setkey() 执行用了 ..." msgid "binary search(es) done in ..." -msgstr "" +msgstr "二进制搜索用了 . . . " msgid "Not yet implemented" msgstr "尚未实现" @@ -1842,7 +1854,7 @@ msgstr "从这里开始" msgid "" "Processed %d lines of YAML metadata with the following top-level fields: %s" -msgstr "" +msgstr "处理了YAML元数据中的排列最前的 %d 行: %s" msgid "User-supplied 'header' will override that found in metadata." msgstr "用户提供的'header'将覆盖元数据中的表头" @@ -1940,7 +1952,7 @@ msgid "x being coerced from class: matrix to data.table" msgstr "x 的类将强制从 matrix 转变为 data.table" msgid "Appending to existing file so setting bom=FALSE and yaml=FALSE" -msgstr "" +msgstr "并入了已存在的文件,所以设置 bom=FALSE 和 yaml=FALSE" msgid "Input has no columns; doing nothing." msgstr "输入没有列,不执行任何操作。" @@ -2559,37 +2571,43 @@ msgid "" msgstr "无效:当使用了error=,不应再输入y" msgid "Test id %s is not in increasing order" -msgstr "" +msgstr "测试标识符 %s 不是递增的顺序" msgid "Test %s produced %d %ss but expected %d" -msgstr "" +msgstr "测试 %s 生成了%d %ss 但预计生成 %d" msgid "" "Test %s didn't produce the correct %s:\n" "Expected: %s\n" "Observed: %s" -msgstr "" +msgstr "测试 %s 没有生成正确的 %s:\n" +"预计生成:%s\n " +"实际生成:%s " msgid "Output captured before unexpected warning/error/message:" -msgstr "" +msgstr "在意外的警告/错误/提示之前,输入已被记录:" msgid "" "Test %s did not produce the correct output:\n" "Expected: <<%s>>\n" "Observed <<%s>>" -msgstr "" +msgstr "测试 %s 没有生成正确的输入: \n" +"预计生成: <<%s>>\n" +"实际生成:<<%s>>" msgid "" "Test %s produced output but should not have:\n" "Expected absent (case insensitive): <<%s>>\n" "Observed: <<%s>>" -msgstr "" +msgstr "测试 %s 生成输出但是不应当出现以下:\n" +"预计不存在(不区分大小写): <<%s>>\n" +"实际生成:<<%s>>" msgid "Test %s ran without errors but selfrefok(%s) is FALSE" -msgstr "" +msgstr "测试 %s 可以无报错运行但是 selfrefok(%s) 是否:" msgid "Test %s ran without errors but failed check that x equals y:" -msgstr "" +msgstr "测试 %s 可以无报错运行但是在检查 x 与 y 相同时候有报错:" msgid "First %d of %d (type '%s'):" msgstr "第%d之%d (类型 '%s'):" From e1f3073c7c39ed113bac1b683d8e05a7947fb655 Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Fri, 31 Jan 2020 10:51:12 +0800 Subject: [PATCH 18/28] attempted translation of remaining msg --- po/R-zh_CN.po | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/po/R-zh_CN.po b/po/R-zh_CN.po index aba5dab523..be0244839a 100644 --- a/po/R-zh_CN.po +++ b/po/R-zh_CN.po @@ -2338,7 +2338,7 @@ msgid "reorder took" msgstr "reorder 用了" msgid "x is already ordered by these columns, no need to call reorder" -msgstr "" +msgstr "x 已经对这些列排序,不要用 reorder" msgid "Internal error: index '" msgstr "内部错误:索引(index) '" @@ -2541,6 +2541,8 @@ msgid "" "**** warnings are produced. However, to test the text of each error/warning " "too, please restart R with LANGUAGE=en" msgstr "" +"**** 这个 R会话的语言是中文。每一个测试将检查警告或错误的多少相同。" +"**** 已测试警告和错误的正文也相同,请用 LANGUAGE=en 重新开始 R。" msgid "Failed after test" msgstr "错误出现于测试" From 5ca4c6e1e5bee69c8552068e10af11feb39e61c3 Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Fri, 31 Jan 2020 17:25:49 +0800 Subject: [PATCH 19/28] fixed h/t hongyuan --- po/R-zh_CN.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/po/R-zh_CN.po b/po/R-zh_CN.po index be0244839a..6336140156 100644 --- a/po/R-zh_CN.po +++ b/po/R-zh_CN.po @@ -2338,7 +2338,7 @@ msgid "reorder took" msgstr "reorder 用了" msgid "x is already ordered by these columns, no need to call reorder" -msgstr "x 已经对这些列排序,不要用 reorder" +msgstr "x 已根据这些列进行了排序,无需调用 reorder" msgid "Internal error: index '" msgstr "内部错误:索引(index) '" @@ -2541,8 +2541,8 @@ msgid "" "**** warnings are produced. However, to test the text of each error/warning " "too, please restart R with LANGUAGE=en" msgstr "" -"**** 这个 R会话的语言是中文。每一个测试将检查警告或错误的多少相同。" -"**** 已测试警告和错误的正文也相同,请用 LANGUAGE=en 重新开始 R。" +"**** 此 R 会话的语言并非英文。每个测试仍将检查生成的警告或错误的个数是否正确。" +"**** 然而,若需同时测试警告和错误的文本内容,请用 LANGUAGE=en 重新启动 R。" msgid "Failed after test" msgstr "错误出现于测试" From 7d5b992d7de8080de310d172dcfec4ac79aaa3eb Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Fri, 31 Jan 2020 17:43:53 +0800 Subject: [PATCH 20/28] translated with update_pk_po --- inst/po/en@quot/LC_MESSAGES/R-data.table.mo | Bin 102248 -> 102128 bytes inst/po/en@quot/LC_MESSAGES/data.table.mo | Bin 139310 -> 139274 bytes inst/po/zh_CN/LC_MESSAGES/R-data.table.mo | Bin 99638 -> 100126 bytes inst/po/zh_CN/LC_MESSAGES/data.table.mo | Bin 138519 -> 138206 bytes po/R-data.table.pot | 5 +- po/R-zh_CN.po | 101 ++++--- po/data.table.pot | 273 +++++++++-------- po/zh_CN.po | 309 ++++++++++---------- 8 files changed, 361 insertions(+), 327 deletions(-) diff --git a/inst/po/en@quot/LC_MESSAGES/R-data.table.mo b/inst/po/en@quot/LC_MESSAGES/R-data.table.mo index a37e7e429d8bff4a1eef34584defbe2c870c9f11..033b61bd71a63c6a61ded69e4ec0a22c9b21bc28 100644 GIT binary patch delta 14105 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 j0ATC1x1qeX2k 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 diff --git a/inst/po/en@quot/LC_MESSAGES/data.table.mo b/inst/po/en@quot/LC_MESSAGES/data.table.mo index f88de8edf3658ac0de0066f31f1d52e78ebd041d..957fbce8b39a994d442636e802c48bd590338c03 100644 GIT binary patch delta 19135 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 wa$RY`n({O2%0DiAaB_axk`<*VmvXJLHJdBe&niDKSFY%Y%&~iOjDb%73xV>xDgXcg delta 10968 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 diff --git a/inst/po/zh_CN/LC_MESSAGES/data.table.mo b/inst/po/zh_CN/LC_MESSAGES/data.table.mo index 1565ab7095cfb286ef71b7c749c98e4f0ba0d86f..f17a880a2c3fe5509f034f045eb4712dae1870f8 100644 GIT binary patch delta 19056 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 BUFHA) diff --git a/po/R-data.table.pot b/po/R-data.table.pot index bee7099481..432d1b3774 100644 --- a/po/R-data.table.pot +++ b/po/R-data.table.pot @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: data.table 1.12.9\n" -"POT-Creation-Date: 2019-12-31 18:45\n" +"POT-Creation-Date: 2020-01-31 17:27\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -1792,9 +1792,6 @@ msgstr "" msgid "None of the datasets should contain a column named '.seqn'" msgstr "" -msgid "'target' and 'current' must both be data.tables" -msgstr "" - msgid "Internal error: ncol(current)==ncol(target) was checked above" msgstr "" diff --git a/po/R-zh_CN.po b/po/R-zh_CN.po index 6336140156..a32eee9463 100644 --- a/po/R-zh_CN.po +++ b/po/R-zh_CN.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: data.table 1.12.5\n" -"POT-Creation-Date: 2019-12-31 18:45\n" +"POT-Creation-Date: 2020-01-31 17:27\n" "PO-Revision-Date: 2019-11-16 18:37+0800\n" "Last-Translator: Xianying Tan \n" "Language-Team: Mandarin\n" @@ -488,7 +488,8 @@ msgid "Joining but 'x' has no key, natural join using" msgstr "联结但 'x' 没有键 (key),自然联结用" msgid "not-join called with 'by=.EACHI'; Replacing !i with i=setdiff_(x,i) ..." -msgstr "配套使用了 not-join 和 'by=.EACHI' 的命令; 用 !i 取代 i=setdiff_(x,i) ..." +msgstr "" +"配套使用了 not-join 和 'by=.EACHI' 的命令; 用 !i 取代 i=setdiff_(x,i) ..." msgid "Constructing irows for '!byjoin || nqbyjoin' ..." msgstr "构造 irows 用来对应于 '!byjoin || nqbyjoin' ..." @@ -600,7 +601,9 @@ msgstr "有 i 子句和在 by 用的列被侦测, 子集只有这个:" msgid "" "i clause present but columns used in by not detected. Having to subset all " "columns before evaluating 'by': '" -msgstr "有 i 子句但是在 by 用的列并没有被侦测。于是所有的列将用于接下里的 'by': 运算。" +msgstr "" +"有 i 子句但是在 by 用的列并没有被侦测。于是所有的列将用于接下里的 'by': 运" +"算。" msgid "" "'by' appears to evaluate to column names but isn't c() or key(). Use " @@ -643,7 +646,9 @@ msgstr "" msgid "" "by-expression '%s' is not named, and the auto-generated name '%s' clashed " "with variable(s) in j. Therefore assigning the entire by-expression as name." -msgstr "by-expression '%s' 没有命名,自动生成的名字 '%s' 与 j 中的变量名冲突。将用 by-expression 用来命名。" +msgstr "" +"by-expression '%s' 没有命名,自动生成的名字 '%s' 与 j 中的变量名冲突。将用 " +"by-expression 用来命名。" msgid "Internal error: drop_dot passed" msgstr "内部错误:drop_dot 传入的参数有" @@ -703,8 +708,9 @@ msgid "" "single j=eval(macro) instead. Both will detect the columns used which is " "important for efficiency.\n" "Old:" -msgstr "j 中找到了 '(m)get'。ansvars 将应用到所有的列。请考虑使用 .SDcols 或者一个单独的 j=eval(macro)" -"两个命令都会侦测影响效率的列。\n" +msgstr "" +"j 中找到了 '(m)get'。ansvars 将应用到所有的列。请考虑使用 .SDcols 或者一个单" +"独的 j=eval(macro)两个命令都会侦测影响效率的列。\n" "旧:" msgid "New:" @@ -738,7 +744,8 @@ msgstr ":= 的 LHS 不是列名('字符')或列的位置('整数'或'数值')" msgid "" "No rows match i. No new columns to add so not evaluating RHS of :=\n" "Assigning to 0 row subset of %d rows" -msgstr "没有找到匹配 i 的行。无法增加新的列所以无法运算 RHS of :=\n" +msgstr "" +"没有找到匹配 i 的行。无法增加新的列所以无法运算 RHS of :=\n" "指定一个 0 行的子集" msgid "" @@ -766,17 +773,19 @@ msgid "" "deep copy first using copy(), wrap with suppressWarnings() or increase the " "'datatable.alloccol' option." msgstr "" -"列指针向量从 truelength %d 增加为 %d。浅拷贝已经完成,详见 ?setalloccol。如果两个" -"变量指向同一个数据 (这个我们无法侦测),会导致潜在的问题。如果并没有,你可以" -":忽视这个问题。如果想要避免警告,可以使用以下任一命令,像是 setalloccol()," -"用 copy() 深度拷贝,套用 suppressWarnings() 或者是增加 'datatable.alloccol' 的选项。" +"列指针向量从 truelength %d 增加为 %d。浅拷贝已经完成,详见 ?setalloccol。如果" +"两个变量指向同一个数据 (这个我们无法侦测),会导致潜在的问题。如果并没有,你" +"可以:忽视这个问题。如果想要避免警告,可以使用以下任一命令,像是 " +"setalloccol(),用 copy() 深度拷贝,套用 suppressWarnings() 或者是增加 " +"'datatable.alloccol' 的选项。" msgid "" "Note that the shallow copy will assign to the environment from which := was " "called. That means for example that if := was called within a function, the " "original table may be unaffected." -msgstr "需要注意的是这个浅拷贝会被指向给调用了 which := 的环境。意思就是说,如果在" -"函数内部调用了 if :=, 原先的 table 可能不会有任何变化。" +msgstr "" +"需要注意的是这个浅拷贝会被指向给调用了 which := 的环境。意思就是说,如果在函" +"数内部调用了 if :=, 原先的 table 可能不会有任何变化。" msgid "" "Cannot assign to an under-allocated recursively indexed list -- L[[i]][,:=] " @@ -852,8 +861,9 @@ msgstr "" msgid "" "Note: forcing units=\"secs\" on implicit difftime by group; call difftime " "explicitly to choose custom units" -msgstr "注意:在隐含的 difftime 强制分组使用了 units=\"secs\"; 请明确的调用 difftime 来" -"选择自定义的单位。" +msgstr "" +"注意:在隐含的 difftime 强制分组使用了 units=\"secs\"; 请明确的调用 difftime " +"来选择自定义的单位。" msgid "logical error. i is not data.table, but mult='all' and 'by'=.EACHI" msgstr "逻辑错误: i 不是data.table,但 mult='all' 及 'by'=.EACHI" @@ -1362,9 +1372,10 @@ msgid "" "Git revision is available when installing from our repositories 'https://" "Rdatatable.gitlab.io/data.table' and 'https://Rdatatable.github.io/data." "table'." -msgstr "Git 修订并不存在。可能是因为 data.table 是从 CRAN 或者是本地档案安装。\n" -"Git 修订存在的情况只限于从我们资料库 'https://Rdatatable.gitlab.io/data.table' 或者" -"'https://Rdatatable.github.io/data.table'下载。" +msgstr "" +"Git 修订并不存在。可能是因为 data.table 是从 CRAN 或者是本地档案安装。\n" +"Git 修订存在的情况只限于从我们资料库 'https://Rdatatable.gitlab.io/data." +"table' 或者'https://Rdatatable.github.io/data.table'下载。" msgid "'fromLast' must be TRUE or FALSE" msgstr "'fromLast' 必须为 TRUE 或 FALSE" @@ -1505,8 +1516,9 @@ msgstr "请为 'measure.vars' 中的每个元素提供一个名称。" msgid "" "Duplicate column names found in molten data.table. Setting unique names " "using 'make.names'" -msgstr "重复的列名存在于在 molten 之后 data.table。请使用 'make.names' 设置唯一" -"的列名。" +msgstr "" +"重复的列名存在于在 molten 之后 data.table。请使用 'make.names' 设置唯一的列" +"名。" msgid "" "y and x must both be data.tables. Use `setDT()` to convert list/data.frames " @@ -2190,12 +2202,13 @@ msgid "" "any package not just data.table. It is just that data.table has added this " "check." msgstr "" -"data.table.%s版本(%s)和包不匹配版本(%s)。请关闭所有R会话以释放旧%s并在全新的R会话中重新安装data.table。根本原因是R包安装程序可能在某些未经确认" -"的条件下将包置于显然可以正常工作的状态,但是新的R代码正在默默地调用旧的C代" -"码:https://bugs.r-project.org/bugzilla/show_bug.cgi?id=17478。一旦安装包处于" -"这不匹配的状态下,在您下次升级程序包之前,它可能会默默地产生错误的结果请提交" -"具体的情况至17478协助我们确认这个Bug。R和C代码之间的这种不匹配可能发生在任何" -"包中,而不仅仅是在data.table中。只是data.table添加了这个检查" +"data.table.%s版本(%s)和包不匹配版本(%s)。请关闭所有R会话以释放旧%s并在全新的R" +"会话中重新安装data.table。根本原因是R包安装程序可能在某些未经确认的条件下将包" +"置于显然可以正常工作的状态,但是新的R代码正在默默地调用旧的C代码:https://" +"bugs.r-project.org/bugzilla/show_bug.cgi?id=17478。一旦安装包处于这不匹配的状" +"态下,在您下次升级程序包之前,它可能会默默地产生错误的结果请提交具体的情况至" +"17478协助我们确认这个Bug。R和C代码之间的这种不匹配可能发生在任何包中,而不仅" +"仅是在data.table中。只是data.table添加了这个检查" msgid "This is R" msgstr "这是R" @@ -2431,18 +2444,24 @@ msgstr "length(by.x) != length(by.y)" msgid "" "When x's column ('%s') is character, the corresponding column in y ('%s') " "should be factor or character, but found incompatible type '%s'." -msgstr "当 x 的列('%s') 是字符,y 中相应的列 ('%s') 应该是因子或字符,然而此类型并不兼容:'%s'." +msgstr "" +"当 x 的列('%s') 是字符,y 中相应的列 ('%s') 应该是因子或字符,然而此类型并不" +"兼容:'%s'." msgid "" "When x's column ('%s') is factor, the corresponding column in y ('%s') " "should be character or factor, but found incompatible type '%s'." -msgstr "当 x 的列('%s') 是因子, y 中相应的列 ('%s') 应该是字符或因子,然而此类型并不兼容:'%s'." +msgstr "" +"当 x 的列('%s') 是因子, y 中相应的列 ('%s') 应该是字符或因子,然而此类型并不" +"兼容:'%s'." msgid "" "When x's column ('%s') is integer or numeric, the corresponding column in y " "('%s') can not be character or logical types, but found incompatible type " "'%s'." -msgstr "当 x 的列('%s') 是整数或数值,y 中相应的列('%s') 不能是字符或逻辑类型,然而此类型不兼容:'%s'." +msgstr "" +"当 x 的列('%s') 是整数或数值,y 中相应的列('%s') 不能是字符或逻辑类型,然而此" +"类型不兼容:'%s'." msgid "argument 'all' should be logical of length one" msgstr "参数 'all' 应该是长度为 1 的逻辑型" @@ -2468,9 +2487,6 @@ msgstr "' 然而 y 中对应的项是:'" msgid "None of the datasets should contain a column named '.seqn'" msgstr "所有的数据集都不应该包含名为 '.seqn' 的列" -msgid "'target' and 'current' must both be data.tables" -msgstr "'target' 和 'current' 都必须是 data.table" - msgid "Internal error: ncol(current)==ncol(target) was checked above" msgstr "内部错误:ncol(current)==ncol(target) 之前已经检查" @@ -2541,8 +2557,9 @@ msgid "" "**** warnings are produced. However, to test the text of each error/warning " "too, please restart R with LANGUAGE=en" msgstr "" -"**** 此 R 会话的语言并非英文。每个测试仍将检查生成的警告或错误的个数是否正确。" -"**** 然而,若需同时测试警告和错误的文本内容,请用 LANGUAGE=en 重新启动 R。" +"**** 此 R 会话的语言并非英文。每个测试仍将检查生成的警告或错误的个数是否正" +"确。**** 然而,若需同时测试警告和错误的文本内容,请用 LANGUAGE=en 重新启动 " +"R。" msgid "Failed after test" msgstr "错误出现于测试" @@ -2582,9 +2599,10 @@ msgid "" "Test %s didn't produce the correct %s:\n" "Expected: %s\n" "Observed: %s" -msgstr "测试 %s 没有生成正确的 %s:\n" -"预计生成:%s\n " -"实际生成:%s " +msgstr "" +"测试 %s 没有生成正确的 %s:\n" +"预计生成:%s\n" +" 实际生成:%s " msgid "Output captured before unexpected warning/error/message:" msgstr "在意外的警告/错误/提示之前,输入已被记录:" @@ -2593,7 +2611,8 @@ msgid "" "Test %s did not produce the correct output:\n" "Expected: <<%s>>\n" "Observed <<%s>>" -msgstr "测试 %s 没有生成正确的输入: \n" +msgstr "" +"测试 %s 没有生成正确的输入: \n" "预计生成: <<%s>>\n" "实际生成:<<%s>>" @@ -2601,7 +2620,8 @@ msgid "" "Test %s produced output but should not have:\n" "Expected absent (case insensitive): <<%s>>\n" "Observed: <<%s>>" -msgstr "测试 %s 生成输出但是不应当出现以下:\n" +msgstr "" +"测试 %s 生成输出但是不应当出现以下:\n" "预计不存在(不区分大小写): <<%s>>\n" "实际生成:<<%s>>" @@ -2705,3 +2725,6 @@ msgstr[0] "%d变量没显示: %s\n" msgid "%d error out of %d. Search %s for test number %s" msgid_plural "%d errors out of %d. Search %s for test numbers %s" msgstr[0] "%d错误总数为%d. %s中搜索测试编号%s" + +#~ msgid "'target' and 'current' must both be data.tables" +#~ msgstr "'target' 和 'current' 都必须是 data.table" diff --git a/po/data.table.pot b/po/data.table.pot index a826bab881..03bc15919b 100644 --- a/po/data.table.pot +++ b/po/data.table.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: data.table 1.12.9\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-12-30 01:24+0800\n" +"POT-Creation-Date: 2020-01-31 17:27+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -410,175 +410,168 @@ msgstr "" msgid "Shortening index '%s' to '%s' due to an update on a key column\n" msgstr "" -#: assign.c:680 +#: assign.c:683 +#, c-format +msgid "" +"Internal error memrecycle: sourceStart=%d sourceLen=%d length(source)=%d" +msgstr "" + +#: assign.c:685 +#, c-format +msgid "Internal error memrecycle: start=%d len=%d length(target)=%d" +msgstr "" + +#: assign.c:688 #, c-format msgid "Internal error: recycle length error not caught earlier. slen=%d len=%d" msgstr "" -#: assign.c:684 +#: assign.c:692 msgid "Internal error: memrecycle has received NULL colname" msgstr "" -#: assign.c:710 +#: assign.c:718 #, c-format msgid "" "Cannot assign 'factor' to '%s'. Factors can only be assigned to factor, " "character or list columns." msgstr "" -#: assign.c:724 +#: assign.c:732 #, c-format msgid "" "Assigning factor numbers to column %d named '%s'. But %d is outside the " "level range [1,%d]" msgstr "" -#: assign.c:732 +#: assign.c:740 #, c-format msgid "" "Assigning factor numbers to column %d named '%s'. But %f is outside the " "level range [1,%d], or is not a whole number." msgstr "" -#: assign.c:738 +#: assign.c:746 #, c-format msgid "" "Cannot assign '%s' to 'factor'. Factor columns can be assigned factor, " "character, NA in any type, or level numbers." msgstr "" -#: assign.c:759 +#: assign.c:767 msgid "" "Internal error: levels of target are either not unique or have truelength<0" msgstr "" -#: assign.c:798 +#: assign.c:806 #, c-format msgid "Unable to allocate working memory of %d bytes to combine factor levels" msgstr "" -#: assign.c:805 +#: assign.c:813 msgid "Internal error: extra level check sum failed" msgstr "" -#: assign.c:824 +#: assign.c:832 #, c-format msgid "" "Coercing 'character' RHS to '%s' to match the type of the target column " "(column %d named '%s')." msgstr "" -#: assign.c:830 +#: assign.c:838 #, c-format msgid "" "Cannot coerce 'list' RHS to 'integer64' to match the type of the target " "column (column %d named '%s')." msgstr "" -#: assign.c:835 +#: assign.c:843 #, c-format msgid "" "Coercing 'list' RHS to '%s' to match the type of the target column (column " "%d named '%s')." msgstr "" -#: assign.c:841 +#: assign.c:849 #, c-format msgid "Zero-copy coerce when assigning '%s' to '%s' column %d named '%s'.\n" msgstr "" -#: assign.c:936 +#: assign.c:944 #, c-format msgid "type '%s' cannot be coerced to '%s'" msgstr "" -#: assign.c:1056 +#: assign.c:1064 msgid "" "To assign integer64 to a character column, please use as.character() for " "clarity." msgstr "" -#: assign.c:1068 +#: assign.c:1076 #, c-format msgid "Unsupported column type in assign.c:memrecycle '%s'" msgstr "" -#: assign.c:1115 +#: assign.c:1123 #, c-format msgid "Internal error: writeNA passed a vector of type '%s'" msgstr "" -#: assign.c:1146 +#: assign.c:1154 #, c-format msgid "" "Internal error: savetl_init checks failed (%d %d %p %p). please report to " "data.table issue tracker." msgstr "" -#: assign.c:1154 +#: assign.c:1162 #, c-format msgid "Failed to allocate initial %d items in savetl_init" msgstr "" -#: assign.c:1163 +#: assign.c:1171 #, c-format msgid "" "Internal error: reached maximum %d items for savetl. Please report to data." "table issue tracker." msgstr "" -#: assign.c:1170 +#: assign.c:1178 #, c-format msgid "Failed to realloc saveds to %d items in savetl" msgstr "" -#: assign.c:1176 +#: assign.c:1184 #, c-format msgid "Failed to realloc savedtl to %d items in savetl" msgstr "" -#: assign.c:1199 +#: assign.c:1207 msgid "x must be a character vector" msgstr "" -#: assign.c:1200 +#: assign.c:1208 msgid "'which' must be an integer vector" msgstr "" -#: assign.c:1201 +#: assign.c:1209 msgid "'new' must be a character vector" msgstr "" -#: assign.c:1202 +#: assign.c:1210 #, c-format msgid "'new' is length %d. Should be the same as length of 'which' (%d)" msgstr "" -#: assign.c:1205 +#: assign.c:1213 #, c-format msgid "" "Item %d of 'which' is %d which is outside range of the length %d character " "vector" msgstr "" -#: assign.c:1215 -msgid "dt passed to setcolorder has no names" -msgstr "" - -#: assign.c:1217 -#, c-format -msgid "Internal error: dt passed to setcolorder has %d columns but %d names" -msgstr "" - -#: assign.c:1224 -msgid "" -"Internal error: o passed to Csetcolorder contains an NA or out-of-bounds" -msgstr "" - -#: assign.c:1226 -msgid "Internal error: o passed to Csetcolorder contains a duplicate" -msgstr "" - #: between.c:12 #, c-format msgid "" @@ -858,107 +851,103 @@ msgstr "" msgid "Unsupported type: %s" msgstr "" -#: dogroups.c:14 +#: dogroups.c:15 msgid "Internal error: order not integer vector" msgstr "" -#: dogroups.c:15 +#: dogroups.c:16 msgid "Internal error: starts not integer" msgstr "" -#: dogroups.c:16 +#: dogroups.c:17 msgid "Internal error: lens not integer" msgstr "" -#: dogroups.c:18 +#: dogroups.c:19 msgid "Internal error: jiscols not NULL but o__ has length" msgstr "" -#: dogroups.c:19 +#: dogroups.c:20 msgid "Internal error: xjiscols not NULL but o__ has length" msgstr "" -#: dogroups.c:20 +#: dogroups.c:21 msgid "'env' should be an environment" msgstr "" -#: dogroups.c:39 +#: dogroups.c:40 #, c-format msgid "" "Internal error: unsupported size-0 type '%s' in column %d of 'by' should " "have been caught earlier" msgstr "" -#: dogroups.c:43 +#: dogroups.c:44 #, c-format msgid "!length(bynames)[%d]==length(groups)[%d]==length(grpcols)[%d]" msgstr "" -#: dogroups.c:62 +#: dogroups.c:63 msgid "row.names attribute of .SD not found" msgstr "" -#: dogroups.c:64 +#: dogroups.c:65 #, c-format msgid "" "row.names of .SD isn't integer length 2 with NA as first item; i.e., ." "set_row_names(). [%s %d %d]" msgstr "" -#: dogroups.c:69 +#: dogroups.c:70 msgid "length(names)!=length(SD)" msgstr "" -#: dogroups.c:73 +#: dogroups.c:74 #, c-format msgid "" "Internal error: size-0 type %d in .SD column %d should have been caught " "earlier" msgstr "" -#: dogroups.c:83 +#: dogroups.c:84 msgid "length(xknames)!=length(xSD)" msgstr "" -#: dogroups.c:87 +#: dogroups.c:88 #, c-format msgid "" "Internal error: type %d in .xSD column %d should have been caught by now" msgstr "" -#: dogroups.c:91 +#: dogroups.c:92 #, c-format msgid "length(iSD)[%d] != length(jiscols)[%d]" msgstr "" -#: dogroups.c:92 +#: dogroups.c:93 #, c-format msgid "length(xSD)[%d] != length(xjiscols)[%d]" msgstr "" -#: dogroups.c:155 dogroups.c:184 -msgid "Internal error. Type of column should have been checked by now" -msgstr "" - -#: dogroups.c:273 +#: dogroups.c:198 #, c-format msgid "j evaluates to type '%s'. Must evaluate to atomic vector or list." msgstr "" -#: dogroups.c:281 +#: dogroups.c:206 msgid "" "All items in j=list(...) should be atomic vectors or lists. If you are " "trying something like j=list(.SD,newcol=mean(colA)) then use := by group " "instead (much quicker), or cbind or merge afterwards." msgstr "" -#: dogroups.c:290 +#: dogroups.c:215 msgid "" "RHS of := is NULL during grouped assignment, but it's not possible to delete " "parts of a column." msgstr "" -#: dogroups.c:294 +#: dogroups.c:219 #, c-format msgid "" "Supplied %d items to be assigned to group %d of size %d in column '%s'. The " @@ -967,23 +956,23 @@ msgid "" "make this intent clear to readers of your code." msgstr "" -#: dogroups.c:305 +#: dogroups.c:230 msgid "" "Internal error: Trying to add new column by reference but tl is full; " "setalloccol should have run first at R level before getting to this point in " "dogroups" msgstr "" -#: dogroups.c:320 +#: dogroups.c:245 #, c-format msgid "Group %d column '%s': %s" msgstr "" -#: dogroups.c:327 +#: dogroups.c:252 msgid "j doesn't evaluate to the same number of columns for each group" msgstr "" -#: dogroups.c:361 +#: dogroups.c:286 #, c-format msgid "" "Column %d of j's result for the first group is NULL. We rely on the column " @@ -994,14 +983,14 @@ msgid "" "integer() or numeric()." msgstr "" -#: dogroups.c:364 +#: dogroups.c:289 msgid "" "j appears to be a named vector. The same names will likely be created over " "and over again for each group and slow things down. Try and pass a named " "list (which data.table optimizes) or an unnamed list() instead.\n" msgstr "" -#: dogroups.c:366 +#: dogroups.c:291 #, c-format msgid "" "Column %d of j is a named vector (each item down the rows is named, " @@ -1009,7 +998,7 @@ msgid "" "over and over for each group). They are ignored anyway.\n" msgstr "" -#: dogroups.c:374 +#: dogroups.c:299 msgid "" "The result of j is a named list. It's very inefficient to create the same " "names over and over again for each group. When j=list(...), any names are " @@ -1018,17 +1007,17 @@ msgid "" "to :=). This message may be upgraded to warning in future.\n" msgstr "" -#: dogroups.c:386 +#: dogroups.c:311 #, c-format msgid "dogroups: growing from %d to %d rows\n" msgstr "" -#: dogroups.c:387 +#: dogroups.c:312 #, c-format msgid "dogroups: length(ans)[%d]!=ngrpcols[%d]+njval[%d]" msgstr "" -#: dogroups.c:420 +#: dogroups.c:330 #, c-format msgid "" "Item %d of j's result for group %d is zero length. This will be filled with " @@ -1037,14 +1026,14 @@ msgid "" "buffer." msgstr "" -#: dogroups.c:427 +#: dogroups.c:337 #, c-format msgid "" "Column %d of result for group %d is type '%s' but expecting type '%s'. " "Column types must be consistent for each group." msgstr "" -#: dogroups.c:429 +#: dogroups.c:339 #, c-format msgid "" "Supplied %d items for column %d of group %d which has %d rows. The RHS " @@ -1053,32 +1042,37 @@ msgid "" "make this intent clear to readers of your code." msgstr "" -#: dogroups.c:444 +#: dogroups.c:354 #, c-format msgid "Wrote less rows (%d) than allocated (%d).\n" msgstr "" -#: dogroups.c:454 +#: dogroups.c:364 #, c-format msgid "Internal error: block 0 [%d] and block 1 [%d] have both run" msgstr "" -#: dogroups.c:456 +#: dogroups.c:366 #, c-format msgid "" "\n" " %s took %.3fs for %d groups\n" msgstr "" -#: dogroups.c:458 +#: dogroups.c:368 #, c-format msgid " eval(j) took %.3fs for %d calls\n" msgstr "" -#: dogroups.c:482 +#: dogroups.c:392 msgid "growVector passed NULL" msgstr "" +#: dogroups.c:412 +#, c-format +msgid "Internal error: growVector doesn't support type '%s'" +msgstr "" + #: fastmean.c:39 msgid "narm should be TRUE or FALSE" msgstr "" @@ -1093,7 +1087,7 @@ msgstr "" msgid "Internal error: type '%s' not caught earlier in fastmean" msgstr "" -#: fcast.c:80 +#: fcast.c:78 #, c-format msgid "Unsupported column type in fcast val: '%s'" msgstr "" @@ -1102,58 +1096,58 @@ msgstr "" msgid "Argument 'test' must be logical." msgstr "" -#: fifelse.c:23 +#: fifelse.c:28 #, c-format msgid "" "'yes' is of type %s but 'no' is of type %s. Please make sure that both " "arguments have the same type." msgstr "" -#: fifelse.c:28 +#: fifelse.c:33 msgid "" "'yes' has different class than 'no'. Please make sure that both arguments " "have the same class." msgstr "" -#: fifelse.c:33 +#: fifelse.c:38 msgid "'yes' and 'no' are both type factor but their levels are different." msgstr "" -#: fifelse.c:38 +#: fifelse.c:43 #, c-format msgid "" "Length of 'yes' is % but must be 1 or length of 'test' (%)." msgstr "" -#: fifelse.c:40 +#: fifelse.c:45 #, c-format msgid "" "Length of 'no' is % but must be 1 or length of 'test' (%)." msgstr "" -#: fifelse.c:51 +#: fifelse.c:56 #, c-format msgid "Length of 'na' is % but must be 1" msgstr "" -#: fifelse.c:57 +#: fifelse.c:62 #, c-format msgid "" "'yes' is of type %s but 'na' is of type %s. Please make sure that both " "arguments have the same type." msgstr "" -#: fifelse.c:59 +#: fifelse.c:64 msgid "" "'yes' has different class than 'na'. Please make sure that both arguments " "have the same class." msgstr "" -#: fifelse.c:63 +#: fifelse.c:68 msgid "'yes' and 'na' are both type factor but their levels are different." msgstr "" -#: fifelse.c:133 +#: fifelse.c:138 #, c-format msgid "Type %s is not supported." msgstr "" @@ -1558,50 +1552,50 @@ msgstr "" msgid "x must be type 'double'" msgstr "" -#: frank.c:11 +#: frank.c:9 #, c-format msgid "Internal error. Argument 'x' to Cdt_na is type '%s' not 'list'" msgstr "" -#: frank.c:12 +#: frank.c:10 #, c-format msgid "Internal error. Argument 'cols' to Cdt_na is type '%s' not 'integer'" msgstr "" -#: frank.c:16 frank.c:146 subset.c:263 +#: frank.c:14 frank.c:144 subset.c:258 #, c-format msgid "Item %d of 'cols' is %d which is outside 1-based range [1,ncol(x)=%d]" msgstr "" -#: frank.c:26 frank.c:155 +#: frank.c:24 frank.c:153 #, c-format msgid "" "Column %d of input list x is length %d, inconsistent with first column of " "that item which is length %d." msgstr "" -#: frank.c:65 frank.c:202 transpose.c:88 +#: frank.c:63 frank.c:200 transpose.c:88 #, c-format msgid "Unsupported column type '%s'" msgstr "" -#: frank.c:83 +#: frank.c:80 msgid "" "Internal error: invalid ties.method for frankv(), should have been caught " "before. please report to data.table issue tracker" msgstr "" -#: frank.c:130 +#: frank.c:128 #, c-format msgid "Internal error: unknown ties value in frank: %d" msgstr "" -#: frank.c:141 +#: frank.c:139 #, c-format msgid "Internal error. Argument 'x' to CanyNA is type '%s' not 'list'" msgstr "" -#: frank.c:142 +#: frank.c:140 #, c-format msgid "Internal error. Argument 'cols' to CanyNA is type '%s' not 'integer'" msgstr "" @@ -2798,7 +2792,7 @@ msgid "" "caught before. please report to data.table issue tracker." msgstr "" -#: frollR.c:155 frollR.c:279 nafill.c:152 shift.c:21 +#: frollR.c:155 frollR.c:279 nafill.c:162 shift.c:21 msgid "fill must be a vector of length 1" msgstr "" @@ -3088,30 +3082,30 @@ msgstr "" msgid "fwrite was passed an empty list of no columns. Nothing to write." msgstr "" -#: fwriteR.c:234 +#: fwriteR.c:232 #, c-format msgid "Column %d's length (%d) is not the same as column 1's length (%d)" msgstr "" -#: fwriteR.c:237 +#: fwriteR.c:235 #, c-format msgid "Column %d's type is '%s' - not yet implemented in fwrite." msgstr "" -#: fwriteR.c:262 +#: fwriteR.c:260 msgid "" "No list columns are present. Setting sep2='' otherwise quote='auto' would " "quote fields containing sep2.\n" msgstr "" -#: fwriteR.c:266 +#: fwriteR.c:264 #, c-format msgid "" "If quote='auto', fields will be quoted if the field contains either sep " "('%c') or sep2 ('%c') because column %d is a list column.\n" msgstr "" -#: fwriteR.c:270 +#: fwriteR.c:268 #, c-format msgid "" "sep ('%c'), sep2 ('%c') and dec ('%c') must all be different. Column %d is a " @@ -3679,13 +3673,13 @@ msgstr "" msgid "'x' argument must be numeric type, or list/data.table of numeric types" msgstr "" -#: nafill.c:149 nafill.c:180 +#: nafill.c:159 nafill.c:190 msgid "" "Internal error: invalid type argument in nafillR function, should have been " "caught before. Please report to data.table issue tracker." msgstr "" -#: nafill.c:196 +#: nafill.c:206 #, c-format msgid "%s: parallel processing of %d column(s) took %.3fs\n" msgstr "" @@ -4015,15 +4009,20 @@ msgstr "" msgid "nrow(x)[%d]!=length(order)[%d]" msgstr "" -#: reorder.c:48 +#: reorder.c:51 #, c-format -msgid "order is not a permutation of 1:nrow[%d]" +msgid "" +"Item %d of order (%d) is either NA, out of range [1,%d], or is duplicated. " +"The new order must be a strict permutation of 1:n" msgstr "" -#: reorder.c:57 +#: reorder.c:105 +msgid "dt passed to setcolorder has no names" +msgstr "" + +#: reorder.c:107 #, c-format -msgid "" -"Unable to allocate %d * %d bytes of working memory for reordering data.table" +msgid "Internal error: dt passed to setcolorder has %d columns but %d names" msgstr "" #: shift.c:17 @@ -4057,98 +4056,98 @@ msgstr "" msgid "Internal error: subsetVectorRaw length(ans)==%d n=%d" msgstr "" -#: subset.c:88 +#: subset.c:83 #, c-format msgid "" "Internal error: column type '%s' not supported by data.table subset. All " "known types are supported so please report as bug." msgstr "" -#: subset.c:97 subset.c:121 +#: subset.c:92 subset.c:116 #, c-format msgid "Internal error. 'idx' is type '%s' not 'integer'" msgstr "" -#: subset.c:122 +#: subset.c:117 #, c-format msgid "" "Internal error. 'maxArg' is type '%s' and length %d, should be an integer " "singleton" msgstr "" -#: subset.c:123 +#: subset.c:118 msgid "Internal error: allowOverMax must be TRUE/FALSE" msgstr "" -#: subset.c:125 +#: subset.c:120 #, c-format msgid "Internal error. max is %d, must be >= 0." msgstr "" -#: subset.c:149 +#: subset.c:144 #, c-format msgid "i[%d] is %d which is out of range [1,nrow=%d]" msgstr "" -#: subset.c:161 +#: subset.c:156 #, c-format msgid "" "Item %d of i is %d and item %d is %d. Cannot mix positives and negatives." msgstr "" -#: subset.c:171 +#: subset.c:166 #, c-format msgid "Item %d of i is %d and item %d is NA. Cannot mix negatives and NA." msgstr "" -#: subset.c:207 +#: subset.c:202 #, c-format msgid "" "Item %d of i is %d but there are only %d rows. Ignoring this and %d more " "like it out of %d." msgstr "" -#: subset.c:209 +#: subset.c:204 #, c-format msgid "" "Item %d of i is %d which removes that item but that has occurred before. " "Ignoring this dup and %d other dups." msgstr "" -#: subset.c:223 +#: subset.c:218 #, c-format msgid "Column %d is NULL; malformed data.table." msgstr "" -#: subset.c:226 +#: subset.c:221 #, c-format msgid "Column %d ['%s'] is a data.frame or data.table; malformed data.table." msgstr "" -#: subset.c:231 +#: subset.c:226 #, c-format msgid "" "Column %d ['%s'] is length %d but column 1 is length %d; malformed data." "table." msgstr "" -#: subset.c:247 +#: subset.c:242 #, c-format msgid "Internal error. Argument 'x' to CsubsetDT is type '%s' not 'list'" msgstr "" -#: subset.c:260 +#: subset.c:255 #, c-format msgid "Internal error. Argument 'cols' to Csubset is type '%s' not 'integer'" msgstr "" -#: subset.c:337 +#: subset.c:332 msgid "" "Internal error: NULL can not be subset. It is invalid for a data.table to " "contain a NULL column." msgstr "" -#: subset.c:339 +#: subset.c:334 msgid "" "Internal error: CsubsetVector is internal-use-only but has received " "negatives, zeros or out-of-range" diff --git a/po/zh_CN.po b/po/zh_CN.po index 82cf1982c4..5ff38f9985 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: data.table 1.12.5\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-12-30 01:24+0800\n" +"POT-Creation-Date: 2020-01-31 17:27+0800\n" "PO-Revision-Date: 2019-11-18 00:26-04\n" "Last-Translator: Yuhang Chen \n" "Language-Team: Mandarin\n" @@ -442,7 +442,8 @@ msgid "" "Dropping index '%s' as it doesn't have '__' at the beginning of its name. It " "was very likely created by v1.9.4 of data.table.\n" msgstr "" -"丢掉索引(index) '%s' 因为它的名字前面没有 '__' 。这个很可能由data.table v1.9.4 创建\n" +"丢掉索引(index) '%s' 因为它的名字前面没有 '__' 。这个很可能由data.table " +"v1.9.4 创建\n" #: assign.c:562 msgid "Internal error: index name ends with trailing __" @@ -466,16 +467,27 @@ msgstr " 因为一个键(key)列的更新,丢掉索引(index) '%s'\n" msgid "Shortening index '%s' to '%s' due to an update on a key column\n" msgstr "因为一个键(key)列的更新,缩短索引(index) '%s' 到 '%s'\n" -#: assign.c:680 +#: assign.c:683 +#, c-format +msgid "" +"Internal error memrecycle: sourceStart=%d sourceLen=%d length(source)=%d" +msgstr "内部错误 memrecycle: sourceStart=%d sourceLen=%d length(source)=%d" + +#: assign.c:685 +#, c-format +msgid "Internal error memrecycle: start=%d len=%d length(target)=%d" +msgstr "内部错误 memrecycle: start=%d len=%d length(target)=%d" + +#: assign.c:688 #, c-format msgid "Internal error: recycle length error not caught earlier. slen=%d len=%d" msgstr "内部错误: 早期未被发现的循环长度错误 slen=%d len=%d" -#: assign.c:684 +#: assign.c:692 msgid "Internal error: memrecycle has received NULL colname" msgstr "内部错误: memrecycle 接受到的列名为 NULL " -#: assign.c:710 +#: assign.c:718 #, c-format msgid "" "Cannot assign 'factor' to '%s'. Factors can only be assigned to factor, " @@ -483,14 +495,14 @@ msgid "" msgstr "" "不能将 'factor' 赋值为 '%s' 。因子类型只能赋值为因子,字符或者列表其中的列" -#: assign.c:724 +#: assign.c:732 #, c-format msgid "" "Assigning factor numbers to column %d named '%s'. But %d is outside the " "level range [1,%d]" msgstr "将列 %d 名称为 '%s' 赋值为因子。但是 %d 在层次范围[1,%d]之外" -#: assign.c:732 +#: assign.c:740 #, c-format msgid "" "Assigning factor numbers to column %d named '%s'. But %f is outside the " @@ -499,7 +511,7 @@ msgstr "" "将列 %d 名称为 '%s' 赋值为因子。但是 %f 在层次范围[1,%d]之外,或者不是一个完" "整的数字" -#: assign.c:738 +#: assign.c:746 #, c-format msgid "" "Cannot assign '%s' to 'factor'. Factor columns can be assigned factor, " @@ -507,28 +519,28 @@ msgid "" msgstr "" "不能将 'factor' 赋值为 '%s' 。 因子列可被赋值为因子,字符 ,NA 或者 层次数值" -#: assign.c:759 +#: assign.c:767 msgid "" "Internal error: levels of target are either not unique or have truelength<0" msgstr "内部错误: 目标的层次不是唯一或者长度<0" -#: assign.c:798 +#: assign.c:806 #, c-format msgid "Unable to allocate working memory of %d bytes to combine factor levels" msgstr "不能分配 %d 字节的工作内存来组合因子层次" -#: assign.c:805 +#: assign.c:813 msgid "Internal error: extra level check sum failed" msgstr "内部错误: 额外的层次校验和失败" -#: assign.c:824 +#: assign.c:832 #, c-format msgid "" "Coercing 'character' RHS to '%s' to match the type of the target column " "(column %d named '%s')." msgstr "将'character' RHS 强制转换成 '%s' 来匹配目标列的类型(列 %d 名称 '%s')" -#: assign.c:830 +#: assign.c:838 #, c-format msgid "" "Cannot coerce 'list' RHS to 'integer64' to match the type of the target " @@ -536,40 +548,40 @@ msgid "" msgstr "" "不能将'list' RHS 强制转换成 'integer64' 来匹配目标列的类型(列 %d 名称 '%s')" -#: assign.c:835 +#: assign.c:843 #, c-format msgid "" "Coercing 'list' RHS to '%s' to match the type of the target column (column " "%d named '%s')." msgstr "将'list' RHS 强制转换成 '%s' 来匹配目标列的类型(列 %d 名称 '%s')" -#: assign.c:841 +#: assign.c:849 #, c-format msgid "Zero-copy coerce when assigning '%s' to '%s' column %d named '%s'.\n" msgstr "当 '%s' 赋值成 '%s' 列 %d 名称 '%s',进行Zero-copy强制转换。\n" -#: assign.c:936 +#: assign.c:944 #, c-format msgid "type '%s' cannot be coerced to '%s'" msgstr "类型 '%s' 不能强制转换成 '%s'" -#: assign.c:1056 +#: assign.c:1064 msgid "" "To assign integer64 to a character column, please use as.character() for " "clarity." msgstr "请使用 as.character() 把 integer64 类型的数值赋值给字符列" -#: assign.c:1068 +#: assign.c:1076 #, c-format msgid "Unsupported column type in assign.c:memrecycle '%s'" msgstr "assign.c:memrecycle '%s' 里有不支持的列的类型" -#: assign.c:1115 +#: assign.c:1123 #, c-format msgid "Internal error: writeNA passed a vector of type '%s'" msgstr "内部错误:writeNA 函数读取到了一个类型是'%s'的向量" -#: assign.c:1146 +#: assign.c:1154 #, c-format msgid "" "Internal error: savetl_init checks failed (%d %d %p %p). please report to " @@ -578,12 +590,12 @@ msgstr "" "内部错误:savetl_init的校验失败 (%d %d %p %p),请将此问题汇报给data.table 问" "题追踪器。" -#: assign.c:1154 +#: assign.c:1162 #, c-format msgid "Failed to allocate initial %d items in savetl_init" msgstr "不能为 savetl_init 最开始的 %d 个项分配空间" -#: assign.c:1163 +#: assign.c:1171 #, c-format msgid "" "Internal error: reached maximum %d items for savetl. Please report to data." @@ -592,58 +604,40 @@ msgstr "" "内部错误:已经达到了 savetl 能处理的子项上限 %d。请将此问题汇报给data.table问" "题追踪器。" -#: assign.c:1170 +#: assign.c:1178 #, c-format msgid "Failed to realloc saveds to %d items in savetl" msgstr "不能给 savetl 里的 %d 个项重新分配 saveds" -#: assign.c:1176 +#: assign.c:1184 #, c-format msgid "Failed to realloc savedtl to %d items in savetl" msgstr "不能给savetl里的 %d 个项提供 savetl" -#: assign.c:1199 +#: assign.c:1207 msgid "x must be a character vector" msgstr "x 必须是一个字符向量" -#: assign.c:1200 +#: assign.c:1208 msgid "'which' must be an integer vector" msgstr "'which' 必须是一个整数向量" -#: assign.c:1201 +#: assign.c:1209 msgid "'new' must be a character vector" msgstr "'new' 必须是一个字符向量" -#: assign.c:1202 +#: assign.c:1210 #, c-format msgid "'new' is length %d. Should be the same as length of 'which' (%d)" msgstr "'new' 的长度是 %d。 它的长度必须和'which' (%d)的长度一致。" -#: assign.c:1205 +#: assign.c:1213 #, c-format msgid "" "Item %d of 'which' is %d which is outside range of the length %d character " "vector" msgstr "'which' 的 %d 项是 %d,这超出了 %d 字符的长度范围" -#: assign.c:1215 -msgid "dt passed to setcolorder has no names" -msgstr "setcolorder读取到的dt并没有名字" - -#: assign.c:1217 -#, c-format -msgid "Internal error: dt passed to setcolorder has %d columns but %d names" -msgstr "内部错误: setcolorder读取到的dt有 %d 列但是有 %d 个名字。" - -#: assign.c:1224 -msgid "" -"Internal error: o passed to Csetcolorder contains an NA or out-of-bounds" -msgstr "内部错误: Csetcolorder读取到的o有一个NA(缺失值)或者是下标出界" - -#: assign.c:1226 -msgid "Internal error: o passed to Csetcolorder contains a duplicate" -msgstr "内部错误: Csetcolorder读取到的o含有一个重复值" - #: between.c:12 #, c-format msgid "" @@ -935,31 +929,31 @@ msgstr "coalesce 复制了第一项 (inplace=FALSE)\n" msgid "Unsupported type: %s" msgstr "不支持的类型:%s" -#: dogroups.c:14 +#: dogroups.c:15 msgid "Internal error: order not integer vector" msgstr "内部错误:order 不是整型向量" -#: dogroups.c:15 +#: dogroups.c:16 msgid "Internal error: starts not integer" msgstr "内部错误:starts 不是整型" -#: dogroups.c:16 +#: dogroups.c:17 msgid "Internal error: lens not integer" msgstr "内部错误:lens 不是整型" -#: dogroups.c:18 +#: dogroups.c:19 msgid "Internal error: jiscols not NULL but o__ has length" msgstr "内部错误:jiscols 非 NULL,但 o__ 长度不为0" -#: dogroups.c:19 +#: dogroups.c:20 msgid "Internal error: xjiscols not NULL but o__ has length" msgstr "内部错误:jiscols 非 NULL,但 o__ 长度不为0" -#: dogroups.c:20 +#: dogroups.c:21 msgid "'env' should be an environment" msgstr "'env' 应该是一个环境" -#: dogroups.c:39 +#: dogroups.c:40 #, c-format msgid "" "Internal error: unsupported size-0 type '%s' in column %d of 'by' should " @@ -967,16 +961,16 @@ msgid "" msgstr "" "内部错误:未能被提前捕获到 'by' 中第 %2$d 列不支持类型 '%1$s' 且size-0 的问题" -#: dogroups.c:43 +#: dogroups.c:44 #, c-format msgid "!length(bynames)[%d]==length(groups)[%d]==length(grpcols)[%d]" msgstr "!length(bynames)[%d]==length(groups)[%d]==length(grpcols)[%d]" -#: dogroups.c:62 +#: dogroups.c:63 msgid "row.names attribute of .SD not found" msgstr ".SD 的行名属性不存在" -#: dogroups.c:64 +#: dogroups.c:65 #, c-format msgid "" "row.names of .SD isn't integer length 2 with NA as first item; i.e., ." @@ -985,47 +979,43 @@ msgstr "" ".SD 的行名不是长度为2且首个元素为 NA 的整型;例如:set_row_names(). [%s %d " "%d]" -#: dogroups.c:69 +#: dogroups.c:70 msgid "length(names)!=length(SD)" msgstr "length(names)!=length(SD)" -#: dogroups.c:73 +#: dogroups.c:74 #, c-format msgid "" "Internal error: size-0 type %d in .SD column %d should have been caught " "earlier" msgstr "内部错误:未能提前捕获到 .SD 中第 %2$d 列类型 %1$d size-0 的问题" -#: dogroups.c:83 +#: dogroups.c:84 msgid "length(xknames)!=length(xSD)" msgstr "length(xknames)!=length(xSD)" -#: dogroups.c:87 +#: dogroups.c:88 #, c-format msgid "" "Internal error: type %d in .xSD column %d should have been caught by now" msgstr "内部错误:当前未能捕获到 .xSD 中第 %2$d 列类型 %1$d 的问题" -#: dogroups.c:91 +#: dogroups.c:92 #, c-format msgid "length(iSD)[%d] != length(jiscols)[%d]" msgstr "length(iSD)[%d] != length(jiscols)[%d]" -#: dogroups.c:92 +#: dogroups.c:93 #, c-format msgid "length(xSD)[%d] != length(xjiscols)[%d]" msgstr "length(xSD)[%d] != length(xjiscols)[%d]" -#: dogroups.c:155 dogroups.c:184 -msgid "Internal error. Type of column should have been checked by now" -msgstr "内部错误:至此列的类型应已经被检查完成" - -#: dogroups.c:273 +#: dogroups.c:198 #, c-format msgid "j evaluates to type '%s'. Must evaluate to atomic vector or list." msgstr "j的运算结果为'%s'类型。其运算结果必须为原子向量或列表。" -#: dogroups.c:281 +#: dogroups.c:206 msgid "" "All items in j=list(...) should be atomic vectors or lists. If you are " "trying something like j=list(.SD,newcol=mean(colA)) then use := by group " @@ -1035,13 +1025,13 @@ msgstr "" "newcol=mean(colA)) 之类的操作请使用 := by group 代替(更快速),或事后使用 " "cbind()、merge()" -#: dogroups.c:290 +#: dogroups.c:215 msgid "" "RHS of := is NULL during grouped assignment, but it's not possible to delete " "parts of a column." msgstr "用 := 分组时 RHS 为 NULL但無法刪除部分列" -#: dogroups.c:294 +#: dogroups.c:219 #, c-format msgid "" "Supplied %d items to be assigned to group %d of size %d in column '%s'. The " @@ -1053,7 +1043,7 @@ msgstr "" "须是 1(可以是单个值) 或完全符合 LHS 的长度如果您想回收(recycle) RHS,请使用 " "rep() 向你的代码读者明确表达你的意图" -#: dogroups.c:305 +#: dogroups.c:230 msgid "" "Internal error: Trying to add new column by reference but tl is full; " "setalloccol should have run first at R level before getting to this point in " @@ -1062,16 +1052,16 @@ msgstr "" "内部错误 : 尝试依照引用增加新列但 tl 已满在进入 dogroups 之前,setalloccol 应" "该先在 R 运行" -#: dogroups.c:320 +#: dogroups.c:245 #, c-format msgid "Group %d column '%s': %s" msgstr "列 '%2$s' 第 %1$d 组 : %3$s" -#: dogroups.c:327 +#: dogroups.c:252 msgid "j doesn't evaluate to the same number of columns for each group" msgstr "j 估算出的每组的列数不同" -#: dogroups.c:361 +#: dogroups.c:286 #, c-format msgid "" "Column %d of j's result for the first group is NULL. We rely on the column " @@ -1085,7 +1075,7 @@ msgstr "" "(需要一致性)空 (NULL) 列可以出现在后面的组(适当的以 NA 取代并回收)但不能是第 " "1 组请输入空向量代替,例如 integer() 或 numeric()" -#: dogroups.c:364 +#: dogroups.c:289 msgid "" "j appears to be a named vector. The same names will likely be created over " "and over again for each group and slow things down. Try and pass a named " @@ -1094,7 +1084,7 @@ msgstr "" "j 是名称向量,这可能使相同的名称不停重复创建导致速度变慢请尝试输入名称列表(较" "适合 data.table)或是非名称列表代替\n" -#: dogroups.c:366 +#: dogroups.c:291 #, c-format msgid "" "Column %d of j is a named vector (each item down the rows is named, " @@ -1104,7 +1094,7 @@ msgstr "" "j 的第 %d 列是名称向量(整行的项都是名称)为了效率请移除这些名称(避免在每组重复" "创建这些名称)总之他们被忽略了\n" -#: dogroups.c:374 +#: dogroups.c:299 msgid "" "The result of j is a named list. It's very inefficient to create the same " "names over and over again for each group. When j=list(...), any names are " @@ -1116,17 +1106,17 @@ msgstr "" "j=list(...) 时侦测到的所有名称会被移出,待分组完成后再放回来可以使用 " "j=transform() 避免这种加速此讯息可能会在未来升级为警告\n" -#: dogroups.c:386 +#: dogroups.c:311 #, c-format msgid "dogroups: growing from %d to %d rows\n" msgstr "dogroups: 从 %d 列增加至 %d 列\n" -#: dogroups.c:387 +#: dogroups.c:312 #, c-format msgid "dogroups: length(ans)[%d]!=ngrpcols[%d]+njval[%d]" msgstr "dogroups: length(ans)[%d]!=ngrpcols[%d]+njval[%d]" -#: dogroups.c:420 +#: dogroups.c:330 #, c-format msgid "" "Item %d of j's result for group %d is zero length. This will be filled with " @@ -1137,7 +1127,7 @@ msgstr "" "j 的结果第 %d 项在第 %d 组中为零长度(zero length)将使用 %d 个 NA 填入以符合结" "果中最长列的长度后面的分组也有相同问题,但只回报第一组以避免过多警告" -#: dogroups.c:427 +#: dogroups.c:337 #, c-format msgid "" "Column %d of result for group %d is type '%s' but expecting type '%s'. " @@ -1146,7 +1136,7 @@ msgstr "" "结果的第 %d 列在第 %d 组中是 '%s' 类别而非预期的 '%s' 类别所有组的列类别必须" "一致" -#: dogroups.c:429 +#: dogroups.c:339 #, c-format msgid "" "Supplied %d items for column %d of group %d which has %d rows. The RHS " @@ -1158,17 +1148,17 @@ msgstr "" "單個值) 或與 LHS 長度完全匹配如果您想回收(recycle) RHS,请使用 rep() 向你的代" "码读者明确表达你的意图" -#: dogroups.c:444 +#: dogroups.c:354 #, c-format msgid "Wrote less rows (%d) than allocated (%d).\n" msgstr "写入的行 (%d) 少于分配的 (%d)\n" -#: dogroups.c:454 +#: dogroups.c:364 #, c-format msgid "Internal error: block 0 [%d] and block 1 [%d] have both run" msgstr "内部错误 : 区块 0 [%d] 与区块 1 [%d] 都运行了" -#: dogroups.c:456 +#: dogroups.c:366 #, c-format msgid "" "\n" @@ -1177,15 +1167,20 @@ msgstr "" "\n" " %s 花了 %.3fs 在 %d 个组\n" -#: dogroups.c:458 +#: dogroups.c:368 #, c-format msgid " eval(j) took %.3fs for %d calls\n" msgstr " eval(j)取%.3fs给 %d 调用\n" -#: dogroups.c:482 +#: dogroups.c:392 msgid "growVector passed NULL" msgstr "growVector通过NULL" +#: dogroups.c:412 +#, c-format +msgid "Internal error: growVector doesn't support type '%s'" +msgstr "内部错误:growVector 不支持的列类型 '%s'" + #: fastmean.c:39 msgid "narm should be TRUE or FALSE" msgstr "narm必须是TRUE或FALSE" @@ -1200,7 +1195,7 @@ msgstr "传递给 fastmean 的是 %s 类型,而不是数值或逻辑类型" msgid "Internal error: type '%s' not caught earlier in fastmean" msgstr "内部错误:先前fastmean没有侦测到类型 '%s' " -#: fcast.c:80 +#: fcast.c:78 #, c-format msgid "Unsupported column type in fcast val: '%s'" msgstr "fcast val不支持的列类型:'%s'" @@ -1209,58 +1204,58 @@ msgstr "fcast val不支持的列类型:'%s'" msgid "Argument 'test' must be logical." msgstr "参数'test'必须是逻辑类型。" -#: fifelse.c:23 +#: fifelse.c:28 #, c-format msgid "" "'yes' is of type %s but 'no' is of type %s. Please make sure that both " "arguments have the same type." msgstr "'yes'是%s类型,但'no'是%s类型。请确认两个参数是同一类型。" -#: fifelse.c:28 +#: fifelse.c:33 msgid "" "'yes' has different class than 'no'. Please make sure that both arguments " "have the same class." msgstr "'yes'的类型与'no'不同。请确认两个参数是同一类型。" -#: fifelse.c:33 +#: fifelse.c:38 msgid "'yes' and 'no' are both type factor but their levels are different." msgstr "'yes'和'no'都是因子类型但他们的因子水平不同。" -#: fifelse.c:38 +#: fifelse.c:43 #, c-format msgid "" "Length of 'yes' is % but must be 1 or length of 'test' (%)." msgstr "'yes'长度是%但长度必须是1或者等于'test'的长度 (%)。" -#: fifelse.c:40 +#: fifelse.c:45 #, c-format msgid "" "Length of 'no' is % but must be 1 or length of 'test' (%)." msgstr "'no'长度是%但长度必须是1或者等于'test'的长度 (%)。" -#: fifelse.c:51 +#: fifelse.c:56 #, c-format msgid "Length of 'na' is % but must be 1" msgstr "'na'长度是%但必须是长度必须是1" -#: fifelse.c:57 +#: fifelse.c:62 #, c-format msgid "" "'yes' is of type %s but 'na' is of type %s. Please make sure that both " "arguments have the same type." msgstr "'yes'是%s类型,但'na'是%s类型。请确认两个参数是同一类型。" -#: fifelse.c:59 +#: fifelse.c:64 msgid "" "'yes' has different class than 'na'. Please make sure that both arguments " "have the same class." msgstr "'yes'的类型与'na'不同。请确认两个参数是同一类型。" -#: fifelse.c:63 +#: fifelse.c:68 msgid "'yes' and 'na' are both type factor but their levels are different." msgstr "'yes'和'na'都是因子类型但他们的因子水平不同" -#: fifelse.c:133 +#: fifelse.c:138 #, c-format msgid "Type %s is not supported." msgstr "不支持类型 %s" @@ -1685,34 +1680,34 @@ msgstr "nrow==%d 但是必须 >=0" msgid "x must be type 'double'" msgstr "x 必须为浮点数类型" -#: frank.c:11 +#: frank.c:9 #, c-format msgid "Internal error. Argument 'x' to Cdt_na is type '%s' not 'list'" msgstr "内部错误:参数 'x' 关于 Cdt_na 是 '%s' 类型而不是 'list' 类型" -#: frank.c:12 +#: frank.c:10 #, c-format msgid "Internal error. Argument 'cols' to Cdt_na is type '%s' not 'integer'" msgstr "内部错误:参数 'cols' 关于 Cdt_na 是 '%s' 类型而不是 'integer' 类型" -#: frank.c:16 frank.c:146 subset.c:263 +#: frank.c:14 frank.c:144 subset.c:258 #, c-format msgid "Item %d of 'cols' is %d which is outside 1-based range [1,ncol(x)=%d]" msgstr "'cols' 的 %d 项为 %d ,超出1的范围 [1,ncol(x)=%d]" -#: frank.c:26 frank.c:155 +#: frank.c:24 frank.c:153 #, c-format msgid "" "Column %d of input list x is length %d, inconsistent with first column of " "that item which is length %d." msgstr "输入列表x的列 %d 长度为 %d,不同于第一列的该项长度为 %d" -#: frank.c:65 frank.c:202 transpose.c:88 +#: frank.c:63 frank.c:200 transpose.c:88 #, c-format msgid "Unsupported column type '%s'" msgstr "不支持的列类型 '%s'" -#: frank.c:83 +#: frank.c:80 msgid "" "Internal error: invalid ties.method for frankv(), should have been caught " "before. please report to data.table issue tracker" @@ -1720,17 +1715,17 @@ msgstr "" "内部错误:对于 frankv()的无效值ties.method,应在之前被捕获。请报告给 data." "table issue tracker" -#: frank.c:130 +#: frank.c:128 #, c-format msgid "Internal error: unknown ties value in frank: %d" msgstr "内部错误:frank中有未知的ties值 %d" -#: frank.c:141 +#: frank.c:139 #, c-format msgid "Internal error. Argument 'x' to CanyNA is type '%s' not 'list'" msgstr "内部错误:参数 'x' 关于 CanyNA 是 '%s' 类型而不是'list'类型" -#: frank.c:142 +#: frank.c:140 #, c-format msgid "Internal error. Argument 'cols' to CanyNA is type '%s' not 'integer'" msgstr "内部错误:参数 'cols' 关于 CanyNA 是 '%s' 类型而不是'integer'类型" @@ -3009,7 +3004,7 @@ msgstr "" "内部错误: 在 rolling 函数中无效的 fun 参数, 理应在更早阶段排除请向data.table " "issue tracker报告" -#: frollR.c:155 frollR.c:279 nafill.c:152 shift.c:21 +#: frollR.c:155 frollR.c:279 nafill.c:162 shift.c:21 msgid "fill must be a vector of length 1" msgstr "fill 必须是长度为1的向量" @@ -3320,17 +3315,17 @@ msgstr "fwrite必须传递一个类型为列表的对象;比如data.frame, dat msgid "fwrite was passed an empty list of no columns. Nothing to write." msgstr "fwrite传递了一个没有列的空列表. 没有对象可以写入" -#: fwriteR.c:234 +#: fwriteR.c:232 #, c-format msgid "Column %d's length (%d) is not the same as column 1's length (%d)" msgstr "列%d的长度(%d)和列1的长度(%d)不一致" -#: fwriteR.c:237 +#: fwriteR.c:235 #, c-format msgid "Column %d's type is '%s' - not yet implemented in fwrite." msgstr "列%d的类型是'%s' - 尚未在fwrite中实施" -#: fwriteR.c:262 +#: fwriteR.c:260 msgid "" "No list columns are present. Setting sep2='' otherwise quote='auto' would " "quote fields containing sep2.\n" @@ -3338,7 +3333,7 @@ msgstr "" "当前没有列表页. 设置sep2=''否则quote='auto'会自动为所有包含sep2的字段加上引" "号.\n" -#: fwriteR.c:266 +#: fwriteR.c:264 #, c-format msgid "" "If quote='auto', fields will be quoted if the field contains either sep " @@ -3348,7 +3343,7 @@ msgstr "" "that host lists),所有包含sep('%1$c') 或 sep2 ('%2$c')的字段将会被自动加上引" "号。\n" -#: fwriteR.c:270 +#: fwriteR.c:268 #, c-format msgid "" "sep ('%c'), sep2 ('%c') and dec ('%c') must all be different. Column %d is a " @@ -3640,20 +3635,26 @@ msgstr "" msgid "" "Internal error, gtail is only implemented for n=1. This should have been " "caught before. please report to data.table issue tracker." -msgstr "内部错误:gtail仅能应用于n=1的情况。此错误理应已被处理。请在 data.table 的 GitHub中提交报告。" +msgstr "" +"内部错误:gtail仅能应用于n=1的情况。此错误理应已被处理。请在 data.table 的 " +"GitHub中提交报告。" #: gsumm.c:1166 msgid "" "Internal error, ghead is only implemented for n=1. This should have been " "caught before. please report to data.table issue tracker." -msgstr "内部错误:ghead仅能应用于n=1的情况。此错误理应已被处理。请在 data.table 的 GitHub中提交报告。" +msgstr "" +"内部错误:ghead仅能应用于n=1的情况。此错误理应已被处理。请在 data.table 的 " +"GitHub中提交报告。" #: gsumm.c:1172 msgid "" "Internal error, `g[` (gnthvalue) is only implemented single value subsets " "with positive index, e.g., .SD[2]. This should have been caught before. " "please report to data.table issue tracker." -msgstr "内部错误:`g[` (gnthvalue) 仅能用于采用单个正数索引求取子集,如 .SD[2]。此错误理应已被处理。请在 data.table 的 GitHub中提交报告。" +msgstr "" +"内部错误:`g[` (gnthvalue) 仅能用于采用单个正数索引求取子集,如 .SD[2]。此错" +"误理应已被处理。请在 data.table 的 GitHub中提交报告。" #: gsumm.c:1250 #, c-format @@ -3661,7 +3662,9 @@ msgid "" "Type '%s' not supported by GForce subset `[` (gnthvalue). Either add the " "prefix utils::head(.) or turn off GForce optimization using " "options(datatable.optimize=1)" -msgstr "GForce取子集运算符`[` (gnthvalue)尚不支持'%s'类型。。请添加前缀stats::var(.),或使用options(datatable.optimize=1) 关闭 GForce优化" +msgstr "" +"GForce取子集运算符`[` (gnthvalue)尚不支持'%s'类型。。请添加前缀stats::" +"var(.),或使用options(datatable.optimize=1) 关闭 GForce优化" #: gsumm.c:1262 msgid "" @@ -3671,7 +3674,11 @@ msgid "" "using options(datatable.optimize=1). Alternatively, if you only need the " "diagonal elements, 'DT[,lapply(.SD,var),by=,.SDcols=]' is the optimized way " "to do this." -msgstr "GForce var/sd 仅能应用于列,而非.SD或其他。若要求取某一列表,如.SD,所有元素的全协方差矩阵,请添加前缀stats::var(.SD)(或stats::sd(.SD)),或使用options(datatable.optimize=1) 关闭 GForce优化。另外,若仅需获得对角线元素,最佳的方式是使用'DT[,lapply(.SD,var),by=,.SDcols=]'。" +msgstr "" +"GForce var/sd 仅能应用于列,而非.SD或其他。若要求取某一列表,如.SD,所有元素" +"的全协方差矩阵,请添加前缀stats::var(.SD)(或stats::sd(.SD)),或使用" +"options(datatable.optimize=1) 关闭 GForce优化。另外,若仅需获得对角线元素,最" +"佳的方式是使用'DT[,lapply(.SD,var),by=,.SDcols=]'。" #: gsumm.c:1263 msgid "var/sd is not meaningful for factors." @@ -3682,7 +3689,9 @@ msgstr "无法对因子类型使用 var/sd。" msgid "" "Type '%s' not supported by GForce var (gvar). Either add the prefix stats::" "var(.) or turn off GForce optimization using options(datatable.optimize=1)" -msgstr "GForce var (gvar) 尚不支持 '%s'类型。请添加前缀stats::var(.),或使用options(datatable.optimize=1) 关闭 GForce优化" +msgstr "" +"GForce var (gvar) 尚不支持 '%s'类型。请添加前缀stats::var(.),或使用" +"options(datatable.optimize=1) 关闭 GForce优化" #: gsumm.c:1384 #, c-format @@ -3962,7 +3971,7 @@ msgstr "参数'x'是一个原子型矢量,原位的更新只为list 或 data.t msgid "'x' argument must be numeric type, or list/data.table of numeric types" msgstr "参数'x'必须是数字类型,或者是数字类型的list/data.table" -#: nafill.c:149 nafill.c:180 +#: nafill.c:159 nafill.c:190 msgid "" "Internal error: invalid type argument in nafillR function, should have been " "caught before. Please report to data.table issue tracker." @@ -3970,7 +3979,7 @@ msgstr "" "内部错误:函数 nafillR 中有无效类型的参数, 该错误理应已被捕获,请向data.table" "的issue通道报告" -#: nafill.c:196 +#: nafill.c:206 #, c-format msgid "%s: parallel processing of %d column(s) took %.3fs\n" msgstr "%s : 并行处理 %d 列, 用时 %.3fs\n" @@ -4295,7 +4304,8 @@ msgstr "" msgid "" "Failed to allocate working memory for %d factor levels of result column %d " "when reading item %d of item %d" -msgstr "当读取第%4$d项的第%3$d个子项时,无法为第%2$d列的%1$d个因素水平分配工作内存" +msgstr "" +"当读取第%4$d项的第%3$d个子项时,无法为第%2$d列的%1$d个因素水平分配工作内存" #: rbindlist.c:523 #, c-format @@ -4340,16 +4350,21 @@ msgstr "排序必须是整数向量" msgid "nrow(x)[%d]!=length(order)[%d]" msgstr "nrow(x)[%d] 不等于 length(order)[%d]" -#: reorder.c:48 +#: reorder.c:51 #, c-format -msgid "order is not a permutation of 1:nrow[%d]" -msgstr "顺序与 1 到 nrow[%d] 的排列不同" +msgid "" +"Item %d of order (%d) is either NA, out of range [1,%d], or is duplicated. " +"The new order must be a strict permutation of 1:n" +msgstr "" + +#: reorder.c:105 +msgid "dt passed to setcolorder has no names" +msgstr "setcolorder读取到的dt并没有名字" -#: reorder.c:57 +#: reorder.c:107 #, c-format -msgid "" -"Unable to allocate %d * %d bytes of working memory for reordering data.table" -msgstr "在工作内存中无法分配 %d * %d 个字节对 data.table 重新排序" +msgid "Internal error: dt passed to setcolorder has %d columns but %d names" +msgstr "内部错误: setcolorder读取到的dt有 %d 列但是有 %d 个名字。" #: shift.c:17 #, c-format @@ -4385,7 +4400,7 @@ msgstr "不支持 '%s' 类型" msgid "Internal error: subsetVectorRaw length(ans)==%d n=%d" msgstr "内部错误: subsetVectorRaw ans length(ans)==%d n=%d" -#: subset.c:88 +#: subset.c:83 #, c-format msgid "" "Internal error: column type '%s' not supported by data.table subset. All " @@ -4394,44 +4409,44 @@ msgstr "" "内部错误:data.table 子集不支持列类型 '%s' 。已知所有类型均被支持,因此请提交" "此BUG。" -#: subset.c:97 subset.c:121 +#: subset.c:92 subset.c:116 #, c-format msgid "Internal error. 'idx' is type '%s' not 'integer'" msgstr "内部错误:'idx' 是 '%s' 类型,而非 '整数'" -#: subset.c:122 +#: subset.c:117 #, c-format msgid "" "Internal error. 'maxArg' is type '%s' and length %d, should be an integer " "singleton" msgstr "内部错误:'maxArg' 是 '%s' 类型,长度为 %d ,应该是单一整数" -#: subset.c:123 +#: subset.c:118 msgid "Internal error: allowOverMax must be TRUE/FALSE" msgstr "内部错误:allowOverMax 必须是 TRUE 或 FALSE" -#: subset.c:125 +#: subset.c:120 #, c-format msgid "Internal error. max is %d, must be >= 0." msgstr "内部错误。最大值是 %d ,且必须 >= 0。" -#: subset.c:149 +#: subset.c:144 #, c-format msgid "i[%d] is %d which is out of range [1,nrow=%d]" msgstr "i[%d] 是 %d ,超出 [1,nrow=%d] 的范围" -#: subset.c:161 +#: subset.c:156 #, c-format msgid "" "Item %d of i is %d and item %d is %d. Cannot mix positives and negatives." msgstr "i 的第 %d 项是 %d ,第 %d 项是 %d 。正负不能混用。" -#: subset.c:171 +#: subset.c:166 #, c-format msgid "Item %d of i is %d and item %d is NA. Cannot mix negatives and NA." msgstr "i 的第 %d 项是 %d ,第 %d 项是 NA 。负值和 NA 不能混用。" -#: subset.c:207 +#: subset.c:202 #, c-format msgid "" "Item %d of i is %d but there are only %d rows. Ignoring this and %d more " @@ -4439,7 +4454,7 @@ msgid "" msgstr "" "i 的第 %d 项是 %d ,但只有 %d 行。忽略这项以及其他相似的 %d 项(共 %d 项)。" -#: subset.c:209 +#: subset.c:204 #, c-format msgid "" "Item %d of i is %d which removes that item but that has occurred before. " @@ -4448,40 +4463,40 @@ msgstr "" "i 的第 %d 项是 %d ,它删除了这项但此操作之前发生过。忽略该重复以及其他 %d 个" "重复。" -#: subset.c:223 +#: subset.c:218 #, c-format msgid "Column %d is NULL; malformed data.table." msgstr "%d 列为空(NULL);data.table 格式错误。" -#: subset.c:226 +#: subset.c:221 #, c-format msgid "Column %d ['%s'] is a data.frame or data.table; malformed data.table." msgstr "%d ['%s'] 列是 data.frame 或 data.table; data.table 格式错误。" -#: subset.c:231 +#: subset.c:226 #, c-format msgid "" "Column %d ['%s'] is length %d but column 1 is length %d; malformed data." "table." msgstr "%d ['%s'] 长度为 %d ,而列 1 的长度为 %d ;data.table 格式错误。" -#: subset.c:247 +#: subset.c:242 #, c-format msgid "Internal error. Argument 'x' to CsubsetDT is type '%s' not 'list'" msgstr "内部错误:CsubsetDT 的参数 'x' 是 '%s' 类型而非列表" -#: subset.c:260 +#: subset.c:255 #, c-format msgid "Internal error. Argument 'cols' to Csubset is type '%s' not 'integer'" msgstr "内部错误:CsubsetDT 的参数 'cols' 是 '%s' 类型而非整数" -#: subset.c:337 +#: subset.c:332 msgid "" "Internal error: NULL can not be subset. It is invalid for a data.table to " "contain a NULL column." msgstr "内部错误:空集(NULL)不能作为子集。data.table 包含空列是无效的。" -#: subset.c:339 +#: subset.c:334 msgid "" "Internal error: CsubsetVector is internal-use-only but has received " "negatives, zeros or out-of-range" From 24ca414d40801665c6451ec540ae4c8a0f9c7064 Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Sat, 8 May 2021 19:48:03 -0700 Subject: [PATCH 21/28] update to use new catf wrapper --- .dev/CRAN_Release.cmd | 22 ----------- R/between.R | 8 ++-- R/bmerge.R | 60 ++++++++++++++--------------- R/data.table.R | 88 +++++++++++++++++++++---------------------- R/devel.R | 2 +- R/fmelt.R | 2 +- R/foverlaps.R | 2 +- R/fread.R | 4 +- R/fwrite.R | 2 +- R/last.R | 24 ++++++------ R/print.data.table.R | 8 ++-- R/setkey.R | 8 ++-- R/setops.R | 6 +-- R/tables.R | 4 +- R/test.data.table.R | 42 ++++++++++----------- R/utils.R | 4 ++ 16 files changed, 133 insertions(+), 153 deletions(-) diff --git a/.dev/CRAN_Release.cmd b/.dev/CRAN_Release.cmd index 1281981002..274b55a2dd 100644 --- a/.dev/CRAN_Release.cmd +++ b/.dev/CRAN_Release.cmd @@ -42,28 +42,6 @@ grep -Er '^\s*"' src/*.c ## NB: this relies on R >= 4.0 to remove a bug in update_pkg_po Rscript -e "tools::update_pkg_po('.')" -## Messages in cat() are not captured unless they're returned via -## gettext, gettextf, or ngettext; this finds cat(["'] instances -## (as opposed to cat(gettext(["'] instances) and wraps them -## in gettext. Some manual inspection is required as this approach -## is over-eager (e.g. cat("\n") -> cat(gettext("\n")) is unnecessary) -## Run 2nd time with '[^']*' to find cat(' (none so far) -for SRC_FILE in R/*; - do sed -E "s/cat[(](\"[^\"]*\")/cat(gettext(\1, domain=\"R-data.table\")/g" $SRC_FILE > out; - mv out $SRC_FILE; -done - -R --no-save -## a bug fix in R still hadn't made the 2019-12-12 release, -## so run the following to source the corrected function manually -STEM='https://raw.githubusercontent.com/wch/r-source/trunk/src/library/tools/R' -source(file.path(STEM, 'utils.R')) -source(file.path(STEM, 'xgettext.R')) -source(file.path(STEM, 'translations.R')) -## shouldn't be any errors from this... -update_pkg_po('.') -q() - # 2) Open a PR with the new templates & contact the translators # * zh_CN: ## Translators to submit commits with translations to this PR diff --git a/R/between.R b/R/between.R index 842aaad7fd..c9ca8d0429 100644 --- a/R/between.R +++ b/R/between.R @@ -44,7 +44,7 @@ between = function(x, lower, upper, incbounds=TRUE, NAbounds=TRUE, check=FALSE) # length(upper) can be 1 or length(x) independently of lower .Call(Cbetween, x, lower, upper, incbounds, NAbounds, check) } else { - if (isTRUE(getOption("datatable.verbose"))) cat(gettext("optimised between not available for this data type, fallback to slow R routine\n", domain="R-data.table")) + if (isTRUE(getOption("datatable.verbose"))) catf("optimised between not available for this data type, fallback to slow R routine\n") if (isTRUE(NAbounds) && (anyNA(lower) || anyNA(upper))) stop("Not yet implemented NAbounds=TRUE for this non-numeric and non-character type") if (check && any(lower>upper, na.rm=TRUE)) stop("Some lower>upper for this non-numeric and non-character type") if (incbounds) x>=lower & x<=upper @@ -78,7 +78,7 @@ inrange = function(x,lower,upper,incbounds=TRUE) { subject = setDT(list(l=lower, u=upper)) ops = if (incbounds) c(4L, 2L) else c(5L, 3L) # >=,<= and >,< verbose = isTRUE(getOption("datatable.verbose")) - if (verbose) {last.started.at=proc.time();cat(gettext("forderv(query) took ... ", domain="R-data.table"));flush.console()} + if (verbose) {last.started.at=proc.time();catf("forderv(query) took ... ");flush.console()} if (verbose) {cat(timetaken(last.started.at),"\n"); flush.console()} ans = bmerge(shallow(subject), query, 1L:2L, c(1L,1L), 0, c(FALSE, TRUE), 0L, "all", ops, verbose) # fix for #1819, turn on verbose messages @@ -86,9 +86,9 @@ inrange = function(x,lower,upper,incbounds=TRUE) { options(datatable.verbose=FALSE) setDT(ans[c("starts", "lens")], key=c("starts", "lens")) options(datatable.verbose=verbose) - if (verbose) {last.started.at=proc.time();cat(gettext("Generating final logical vector ... ", domain="R-data.table"));flush.console()} + if (verbose) {last.started.at=proc.time();catf("Generating final logical vector ... ");flush.console()} .Call(Cinrange, idx <- vector("logical", length(x)), xo, ans[["starts"]], ans[["lens"]]) - if (verbose) {cat(gettext("done in", domain="R-data.table"),timetaken(last.started.at),"\n"); flush.console} + if (verbose) {catf("done in %s\n",timetaken(last.started.at)); flush.console} idx } diff --git a/R/bmerge.R b/R/bmerge.R index 473c1d6475..6bafd0e5bc 100644 --- a/R/bmerge.R +++ b/R/bmerge.R @@ -45,74 +45,74 @@ bmerge = function(i, x, icols, xcols, roll, rollends, nomatch, mult, ops, verbos iclass = getClass(i[[ic]]) xname = paste0("x.", names(x)[xc]) iname = paste0("i.", names(i)[ic]) - if (!xclass %chin% supported) stop(gettextf("%s is type %s which is not supported by data.table join", xname, xclass, domain="R-data.table")) - if (!iclass %chin% supported) stop(gettextf("%s is type %s which is not supported by data.table join", iname, iclass, domain="R-data.table")) + if (!xclass %chin% supported) stop("x.", names(x)[xc]," is type ", xclass, " which is not supported by data.table join") + if (!iclass %chin% supported) stop("i.", names(i)[ic]," is type ", iclass, " which is not supported by data.table join") if (xclass=="factor" || iclass=="factor") { if (roll!=0.0 && a==length(icols)) - stop(gettextf("Attempting roll join on factor column when joining %s to %s. Only integer, double or character columns may be roll joined.", xname, iname, domain="R-data.table")) + stop("Attempting roll join on factor column when joining x.",names(x)[xc]," to i.",names(i)[ic],". Only integer, double or character columns may be roll joined.") if (xclass=="factor" && iclass=="factor") { - if (verbose) cat(gettextf("Matching %s factor levels to %s factor levels.\n", iname, xname, domain="R-data.table")) + if (verbose) catf("Matching %s factor levels to %s factor levels.\n", iname, xname) set(i, j=ic, value=chmatch(levels(i[[ic]]), levels(x[[xc]]), nomatch=0L)[i[[ic]]]) # nomatch=0L otherwise a level that is missing would match to NA values next } else { if (xclass=="character") { - if (verbose) cat(gettextf("Coercing factor column %s to type character to match type of %s.\n", iname, xname, domain="R-data.table")) + if (verbose) catf("Coercing factor column %s to type character to match type of %s.\n", iname, xname) set(i, j=ic, value=val<-as.character(i[[ic]])) set(callersi, j=ic, value=val) # factor in i joining to character in x will return character and not keep x's factor; e.g. for antaresRead #3581 next } else if (iclass=="character") { - if (verbose) cat(gettextf("Matching character column %s to factor levels in %s.\n", iname, xname, domain="R-data.table")) + if (verbose) catf("Matching character column %s to factor levels in %s.\n", iname, xname) newvalue = chmatch(i[[ic]], levels(x[[xc]]), nomatch=0L) if (anyNA(i[[ic]])) newvalue[is.na(i[[ic]])] = NA_integer_ # NA_character_ should match to NA in factor, #3809 set(i, j=ic, value=newvalue) next } } - stop(gettextf("Incompatible join types: %s (%s) and %s (%s). Factor columns must join to factor or character columns.", xname, xclass, iname, iclass, domain="R-data.table")) + stop("Incompatible join types: x.", names(x)[xc], " (",xclass,") and i.", names(i)[ic], " (",iclass,"). Factor columns must join to factor or character columns.") } if (xclass == iclass) { - if (verbose) cat(gettextf("%s has same type (%s) as %s. No coercion needed.\n", iname, xclass, xname, domain="R-data.table")) + if (verbose) catf("%s has same type (%s) as %s. No coercion needed.\n", iname, xclass, xname) next } if (xclass=="character" || iclass=="character" || xclass=="logical" || iclass=="logical" || xclass=="factor" || iclass=="factor") { if (anyNA(i[[ic]]) && allNA(i[[ic]])) { - if (verbose) cat(gettextf("Coercing all-NA %s (%s) to type %s to match type of %s.\n", iname, iclass, xclass, xname, domain="R-data.table")) + if (verbose) catf("Coercing all-NA %s (%s) to type %s to match type of %s.\n", iname, iclass, xclass, xname) set(i, j=ic, value=match.fun(paste0("as.", xclass))(i[[ic]])) next } else if (anyNA(x[[xc]]) && allNA(x[[xc]])) { - if (verbose) cat(gettextf("Coercing all-NA %s (%s) to type %s to match type of %s.\n", xname, xclass, iclass, iname, domain="R-data.table")) + if (verbose) catf("Coercing all-NA %s (%s) to type %s to match type of %s.\n", xname, xclass, iclass, iname) set(x, j=xc, value=match.fun(paste0("as.", iclass))(x[[xc]])) next } - stop(gettextf("Incompatible join types: %s (%s) and %s (%s)", xname, xclass, iname, iclass, domain="R-data.table")) + stop("Incompatible join types: x.", names(x)[xc], " (",xclass,") and i.", names(i)[ic], " (",iclass,")") } if (xclass=="integer64" || iclass=="integer64") { nm = c(iname, xname) if (xclass=="integer64") { w=i; wc=ic; wclass=iclass; } else { w=x; wc=xc; wclass=xclass; nm=rev(nm) } # w is which to coerce if (wclass=="integer" || (wclass=="double" && !isReallyReal(w[[wc]]))) { - if (verbose) cat(gettextf("Coercing %s column %s%s to type integer64 to match type of %s.\n", wclass, nm[1L], if (wclass=="double") " (which contains no fractions)" else "", nm[2L], domain="R-data.table")) + if (verbose) catf("Coercing %s column %s%s to type integer64 to match type of %s.\n", wclass, nm[1L], if (wclass=="double") " (which contains no fractions)" else "", nm[2L]) set(w, j=wc, value=bit64::as.integer64(w[[wc]])) - } else stop(gettextf("Incompatible join types: %s is type integer64 but %s is type double and contains fractions", nm[2L], nm[1L], domain="R-data.table")) + } else stop("Incompatible join types: ", nm[2L], " is type integer64 but ", nm[1L], " is type double and contains fractions") } else { # just integer and double left if (iclass=="double") { if (!isReallyReal(i[[ic]])) { # common case of ad hoc user-typed integers missing L postfix joining to correct integer keys # we've always coerced to int and returned int, for convenience. - if (verbose) cat(gettextf("Coercing double column %s (which contains no fractions) to type integer to match type of %s", iname, xname, domain="R-data.table")) + if (verbose) catf("Coercing double column %s (which contains no fractions) to type integer to match type of %s", iname, xname) val = as.integer(i[[ic]]) if (!is.null(attributes(i[[ic]]))) attributes(val) = attributes(i[[ic]]) # to retain Date for example; 3679 set(i, j=ic, value=val) set(callersi, j=ic, value=val) # change the shallow copy of i up in [.data.table to reflect in the result, too. } else { - if (verbose) cat(gettextf("Coercing integer column %s to type double to match type of %s which contains fractions.\n", xname, iname, domain="R-data.table")) + if (verbose) catf("Coercing integer column %s to type double to match type of %s which contains fractions.\n", xname, iname) set(x, j=xc, value=as.double(x[[xc]])) } } else { - if (verbose) cat(gettextf("Coercing integer column %s to type double for join to match type of %s.\n", iname, xname, domain="R-data.table")) + if (verbose) catf("Coercing integer column %s to type double for join to match type of %s.\n", iname, xname) set(i, j=ic, value=as.double(i[[ic]])) } } @@ -128,17 +128,17 @@ bmerge = function(i, x, icols, xcols, roll, rollends, nomatch, mult, ops, verbos # equi join. use existing key (#1825) or existing secondary index (#1439) if (identical(xcols, head(chmatch(key(x), names(x)), length(xcols)))) { xo = integer(0L) - if (verbose) cat(gettext("on= matches existing key, using key\n", domain="R-data.table")) + if (verbose) catf("on= matches existing key, using key\n") } else { xo = NULL if (isTRUE(getOption("datatable.use.index"))) { xo = getindex(x, names(x)[xcols]) - if (verbose && !is.null(xo)) cat(gettext("on= matches existing index, using index\n", domain="R-data.table")) + if (verbose && !is.null(xo)) catf("on= matches existing index, using index\n") } if (is.null(xo)) { if (verbose) {last.started.at=proc.time(); flush.console()} xo = forderv(x, by = xcols) - if (verbose) {cat(gettextf("Calculated ad hoc index in %s\n", timetaken(last.started.at), domain="R-data.table")); flush.console()} + if (verbose) {catf("Calculated ad hoc index in %s\n", timetaken(last.started.at)); flush.console()} # TODO: use setindex() instead, so it's cached for future reuse } } @@ -149,9 +149,9 @@ bmerge = function(i, x, icols, xcols, roll, rollends, nomatch, mult, ops, verbos # non-equi operators present.. investigate groups.. nqgrp = integer(0L) nqmaxgrp = 1L - if (verbose) cat(gettext("Non-equi join operators detected ... \n", domain="R-data.table")) + if (verbose) catf("Non-equi join operators detected ... \n") if (roll != FALSE) stop("roll is not implemented for non-equi joins yet.") - if (verbose) {last.started.at=proc.time();cat(gettext(" forder took ... ", domain="R-data.table"));flush.console()} + if (verbose) {last.started.at=proc.time();catf(" forder took ... ");flush.console()} # TODO: could check/reuse secondary indices, but we need 'starts' attribute as well! xo = forderv(x, xcols, retGrp=TRUE) if (verbose) {cat(timetaken(last.started.at),"\n"); flush.console()} @@ -160,28 +160,28 @@ bmerge = function(i, x, icols, xcols, roll, rollends, nomatch, mult, ops, verbos if (length(resetcols)) { # TODO: can we get around having to reorder twice here? # or at least reuse previous order? - if (verbose) {last.started.at=proc.time();cat(gettext(" Generating group lengths ... ", domain="R-data.table"));flush.console()} + if (verbose) {last.started.at=proc.time();catf(" Generating group lengths ... ");flush.console()} resetlen = attr(forderv(x, resetcols, retGrp=TRUE), 'starts', exact=TRUE) resetlen = .Call(Cuniqlengths, resetlen, nrow(x)) - if (verbose) {cat(gettext("done in", domain="R-data.table"),timetaken(last.started.at),"\n"); flush.console()} + if (verbose) {catf("done in %s\n",timetaken(last.started.at)); flush.console()} } else resetlen = integer(0L) - if (verbose) {last.started.at=proc.time();cat(gettext(" Generating non-equi group ids ... ", domain="R-data.table"));flush.console()} + if (verbose) {last.started.at=proc.time();catf(" Generating non-equi group ids ... ");flush.console()} nqgrp = .Call(Cnestedid, x, xcols[non_equi:length(xcols)], xo, xg, resetlen, mult) - if (verbose) {cat(gettext("done in", domain="R-data.table"),timetaken(last.started.at),"\n"); flush.console()} + if (verbose) {catf("done in %s\n",timetaken(last.started.at)); flush.console()} if (length(nqgrp)) nqmaxgrp = max(nqgrp) # fix for #1986, when 'x' is 0-row table max(.) returns -Inf. if (nqmaxgrp > 1L) { # got some non-equi join work to do if ("_nqgrp_" %in% names(x)) stop("Column name '_nqgrp_' is reserved for non-equi joins.") - if (verbose) {last.started.at=proc.time();cat(gettext(" Recomputing forder with non-equi ids ... ", domain="R-data.table"));flush.console()} + if (verbose) {last.started.at=proc.time();catf(" Recomputing forder with non-equi ids ... ");flush.console()} set(nqx<-shallow(x), j="_nqgrp_", value=nqgrp) xo = forderv(nqx, c(ncol(nqx), xcols)) - if (verbose) {cat(gettext("done in", domain="R-data.table"),timetaken(last.started.at),"\n"); flush.console()} + if (verbose) {catf("done in %s\n",timetaken(last.started.at)); flush.console()} } else nqgrp = integer(0L) - if (verbose) cat(gettextf(" Found %d non-equi group(s) ...\n", nqmaxgrp, domain="R-data.table")) + if (verbose) catf(" Found %d non-equi group(s) ...\n", nqmaxgrp) } - if (verbose) {last.started.at=proc.time();cat(gettext("Starting bmerge ...\n", domain="R-data.table"));flush.console()} + if (verbose) {last.started.at=proc.time();catf("Starting bmerge ...\n");flush.console()} ans = .Call(Cbmerge, i, x, as.integer(icols), as.integer(xcols), io, xo, roll, rollends, nomatch, mult, ops, nqgrp, nqmaxgrp) - if (verbose) {cat(gettext("bmerge done in", domain="R-data.table"),timetaken(last.started.at),"\n"); flush.console()} + if (verbose) {catf("bmerge done in %s\n",timetaken(last.started.at)); flush.console()} # TO DO: xo could be moved inside Cbmerge ans$xo = xo # for further use by [.data.table diff --git a/R/data.table.R b/R/data.table.R index 9a795ea99d..ea120fc989 100644 --- a/R/data.table.R +++ b/R/data.table.R @@ -419,9 +419,9 @@ replace_dot_alias = function(e) { len_common_names = length(common_names) if (!len_common_names) stop("Attempting to do natural join but no common columns in provided tables") if (verbose) { - which_cols_msg = if (len_common_names == length(x)) " all 'x' columns" - else paste(":", brackify(common_names)) - cat(gettext("Joining but 'x' has no key, natural join using", domain="R-data.table"), which_cols_msg, "\n", sep = "") + which_cols_msg = if (len_common_names == length(x)) gettext("natural join using all 'x' columns") + else gettextf("natural join using %s", paste(":", brackify(common_names))) + catf("Joining but 'x' has no key, natural join using %s\n", which_cols_msg) } on = common_names } @@ -449,10 +449,10 @@ replace_dot_alias = function(e) { # Implementation for not-join along with by=.EACHI, #604 if (notjoin && (byjoin || mult != "all")) { # mult != "all" needed for #1571 notjoin = FALSE - if (verbose) {last.started.at=proc.time();cat(gettext("not-join called with 'by=.EACHI'; Replacing !i with i=setdiff_(x,i) ...", domain="R-data.table"));flush.console()} + if (verbose) {last.started.at=proc.time();catf("not-join called with 'by=.EACHI'; Replacing !i with i=setdiff_(x,i) ...");flush.console()} orignames = copy(names(i)) i = setdiff_(x, i, rightcols, leftcols) # part of #547 - if (verbose) {cat(gettext("done in", domain="R-data.table"),timetaken(last.started.at),"\n"); flush.console()} + if (verbose) {catf("done in %s\n",timetaken(last.started.at)); flush.console()} setnames(i, orignames[leftcols]) setattr(i, 'sorted', names(i)) # since 'x' has key set, this'll always be sorted } @@ -480,7 +480,7 @@ replace_dot_alias = function(e) { if (!byjoin || nqbyjoin) { # Really, `anyDuplicated` in base is AWESOME! # allow.cartesian shouldn't error if a) not-join, b) 'i' has no duplicates - if (verbose) {last.started.at=proc.time();cat(gettext("Constructing irows for '!byjoin || nqbyjoin' ... ", domain="R-data.table"));flush.console()} + if (verbose) {last.started.at=proc.time();catf("Constructing irows for '!byjoin || nqbyjoin' ... ");flush.console()} irows = if (allLen1) f__ else vecseq(f__,len__, if (allow.cartesian || notjoin || # #698. When notjoin=TRUE, ignore allow.cartesian. Rows in answer will never be > nrow(x). @@ -519,7 +519,7 @@ replace_dot_alias = function(e) { if (length(xo) && length(irows)) { irows = xo[irows] # TO DO: fsort here? if (mult=="all" && !allGrp1) { # following #1991 fix, !allGrp1 will always be TRUE. TODO: revisit. - if (verbose) {last.started.at=proc.time();cat(gettext("Reorder irows for 'mult==\"all\" && !allGrp1' ... ", domain="R-data.table"));flush.console()} + if (verbose) {last.started.at=proc.time();catf("Reorder irows for 'mult==\"all\" && !allGrp1' ... ");flush.console()} irows = setorder(setDT(list(indices=rep.int(indices__, len__), irows=irows)))[["irows"]] if (verbose) {cat(timetaken(last.started.at),"\n"); flush.console()} } @@ -531,7 +531,7 @@ replace_dot_alias = function(e) { ## restore original order. This is a very expensive operation. ## benchmarks have shown that starting with 1e6 irows, a tweak can significantly reduce time ## (see #2366) - if (verbose) {last.started.at=proc.time();cat(gettextf("Reordering %d rows after bmerge done in ... ", length(irows), domain="R-data.table"));flush.console()} + if (verbose) {last.started.at=proc.time();catf("Reordering %d rows after bmerge done in ... ", length(irows));flush.console()} if(length(irows) < 1e6){ irows = fsort(irows, internal=TRUE) ## internally, fsort on integer falls back to forderv } else { @@ -588,7 +588,7 @@ replace_dot_alias = function(e) { if (notjoin) { if (byjoin || !is.integer(irows) || is.na(nomatch)) stop("Internal error: notjoin but byjoin or !integer or nomatch==NA") # nocov irows = irows[irows!=0L] - if (verbose) {last.started.at=proc.time();cat(gettext("Inverting irows for notjoin done in ... ", domain="R-data.table"));flush.console()} + if (verbose) {last.started.at=proc.time();catf("Inverting irows for notjoin done in ... ");flush.console()} i = irows = if (length(irows)) seq_len(nrow(x))[-irows] else NULL # NULL meaning all rows i.e. seq_len(nrow(x)) if (verbose) cat(timetaken(last.started.at), "\n") leftcols = integer() # proceed as if row subset from now on, length(leftcols) is switched on later @@ -771,7 +771,7 @@ replace_dot_alias = function(e) { if (!is.na(w)) { byindex = indices(x)[w] if (!length(getindex(x, byindex))) { - if (verbose) cat(gettextf("by index '%s' but that index has 0 length. Ignoring.\n", byindex, domain="R-data.table")) + if (verbose) catf("by index '%s' but that index has 0 length. Ignoring.\n", byindex) byindex=FALSE } } @@ -794,10 +794,10 @@ replace_dot_alias = function(e) { # TO DO: Make xss directly, rather than recursive call. if (!is.na(nomatch)) irows = irows[irows!=0L] # TO DO: can be removed now we have CisSortedSubset if (length(allbyvars)) { ############### TO DO TO DO TO DO ############### - if (verbose) cat(gettext("i clause present and columns used in by detected, only these subset:", domain="R-data.table"),paste(allbyvars,collapse=","),"\n") + if (verbose) catf("i clause present and columns used in by detected, only these subset: %s\n", brackify(allbyvars)) xss = x[irows,allbyvars,with=FALSE,nomatch=nomatch,mult=mult,roll=roll,rollends=rollends] } else { - if (verbose) cat(gettext("i clause present but columns used in by not detected. Having to subset all columns before evaluating 'by': '", domain="R-data.table"),deparse(by),"'\n",sep="") + if (verbose) catf("i clause present but columns used in by not detected. Having to subset all columns before evaluating 'by': '%s'\n", deparse(by)) xss = x[irows,nomatch=nomatch,mult=mult,roll=roll,rollends=rollends] } if (bysub %iscall% ':' && length(bysub)==3L) { @@ -855,7 +855,7 @@ replace_dot_alias = function(e) { if (length(byvars) > 1L && tt %chin% all.vars(jsub, FALSE)) { bynames[jj] = deparse(bysubl[[jj+1L]]) if (verbose) - cat(gettextf("by-expression '%s' is not named, and the auto-generated name '%s' clashed with variable(s) in j. Therefore assigning the entire by-expression as name.\n", bynames[jj], tt, domain="R-data.table")) + catf("by-expression '%s' is not named, and the auto-generated name '%s' clashed with variable(s) in j. Therefore assigning the entire by-expression as name.\n", bynames[jj], tt) } else bynames[jj] = tt # if user doesn't like this inferred name, user has to use by=list() to name the column @@ -1008,7 +1008,7 @@ replace_dot_alias = function(e) { } non_sdvars = setdiff(ansvars, sdvars) ansvals = chmatch(ansvars, names_x) - if (verbose) cat(gettextf("New ansvars: %s \n", brackify(ansvars))) + if (verbose) catf("New ansvars: %s \n", brackify(ansvars)) } else if (length(non_sdvars)) { # we've a situation like DT[, c(sum(V1), lapply(.SD, mean)), by=., .SDcols=...] or # DT[, lapply(.SD, function(x) x *v1), by=, .SDcols=...] etc., @@ -1020,7 +1020,7 @@ replace_dot_alias = function(e) { if (!missing(.SDcols)) warning("This j doesn't use .SD but .SDcols has been supplied. Ignoring .SDcols. See ?data.table.") allcols = c(names_x, xdotprefix, names_i, idotprefix) ansvars = sdvars = setdiff(intersect(av, allcols), bynames) - if (verbose) cat(gettext("Detected that j uses these columns:", domain="R-data.table"),if (!length(ansvars)) "" else paste(ansvars,collapse=","),"\n") + if (verbose) catf("Detected that j uses these columns: %s\n",if (!length(ansvars)) "" else brackfiy(ansvars)) # using a few named columns will be faster # Consider: DT[,max(diff(date)),by=list(month=month(date))] # and: DT[,lapply(.SD,sum),by=month(date)] @@ -1082,7 +1082,7 @@ replace_dot_alias = function(e) { # fix errors in their RHS when called on empty edge cases, even when the result won't be # used anyway (so it would be annoying to have to fix it.) if (verbose) { - cat(gettextf("No rows match i. No new columns to add so not evaluating RHS of :=\nAssigning to 0 row subset of %d rows\n", nrow(x), domain="R-data.table")) + catf("No rows match i. No new columns to add so not evaluating RHS of :=\nAssigning to 0 row subset of %d rows\n", nrow(x)) } .Call(Cassign, x, irows, NULL, NULL, NULL) # only purpose is to write 0 to .Last.updated .global$print = address(x) @@ -1104,9 +1104,9 @@ replace_dot_alias = function(e) { # i.e. reallocate at the size as if the new columns were added followed by setalloccol(). name = substitute(x) if (is.name(name) && ok && verbose) { # && NAMED(x)>0 (TO DO) # ok here includes -1 (loaded from disk) - cat(gettextf("Growing vector of column pointers from truelength %d to %d. A shallow copy has been taken, see ?setalloccol. Only a potential issue if two variables point to the same data (we can't yet detect that well) and if not you can safely ignore this. To avoid this message you could setalloccol() first, deep copy first using copy(), wrap with suppressWarnings() or increase the 'datatable.alloccol' option.\n", truelength(x), n, domain="R-data.table")) + catf("Growing vector of column pointers from truelength %d to %d. A shallow copy has been taken, see ?setalloccol. Only a potential issue if two variables point to the same data (we can't yet detect that well) and if not you can safely ignore this. To avoid this message you could setalloccol() first, deep copy first using copy(), wrap with suppressWarnings() or increase the 'datatable.alloccol' option.\n", truelength(x), n) # #1729 -- copying to the wrong environment here can cause some confusion - if (ok == -1L) cat(gettext("Note that the shallow copy will assign to the environment from which := was called. That means for example that if := was called within a function, the original table may be unaffected.\n", domain="R-data.table")) + if (ok == -1L) catf("Note that the shallow copy will assign to the environment from which := was called. That means for example that if := was called within a function, the original table may be unaffected.\n") # Verbosity should not issue warnings, so cat rather than warning. # TO DO: Add option 'datatable.pedantic' to turn on warnings like this. @@ -1377,7 +1377,7 @@ replace_dot_alias = function(e) { SDenv$`-.POSIXt` = function(e1, e2) { if (inherits(e2, 'POSIXt')) { if (verbose && !exists('done_units_report', parent.frame())) { - cat(gettext('\nNote: forcing units="secs" on implicit difftime by group; call difftime explicitly to choose custom units', domain="R-data.table")) + catf('\nNote: forcing units="secs" on implicit difftime by group; call difftime explicitly to choose custom units\n') assign('done_units_report', TRUE, parent.frame()) } return(difftime(e1, e2, units='secs')) @@ -1414,7 +1414,7 @@ replace_dot_alias = function(e) { if (length(byval) && length(byval[[1L]])) { if (!bysameorder && isFALSE(byindex)) { - if (verbose) {last.started.at=proc.time();cat(gettext("Finding groups using forderv ... ", domain="R-data.table"));flush.console()} + if (verbose) {last.started.at=proc.time();catf("Finding groups using forderv ... ");flush.console()} o__ = forderv(byval, sort=keyby, retGrp=TRUE) # The sort= argument is called sortGroups at C level. It's primarily for saving the sort of unique strings at # C level for efficiency when by= not keyby=. Other types also retain appearance order, but at byte level to @@ -1428,7 +1428,7 @@ replace_dot_alias = function(e) { if (verbose) { cat(timetaken(last.started.at),"\n") last.started.at=proc.time() - cat(gettext("Finding group sizes from the positions (can be avoided to save RAM) ... ", domain="R-data.table")) + catf("Finding group sizes from the positions (can be avoided to save RAM) ... ") flush.console() # for windows } f__ = attr(o__, "starts", exact=TRUE) @@ -1436,7 +1436,7 @@ replace_dot_alias = function(e) { if (verbose) {cat(timetaken(last.started.at),"\n"); flush.console()} if (!bysameorder && !keyby) { # TO DO: lower this into forder.c - if (verbose) {last.started.at=proc.time();cat(gettext("Getting back original order ... ", domain="R-data.table"));flush.console()} + if (verbose) {last.started.at=proc.time();catf("Getting back original order ... ");flush.console()} firstofeachgroup = o__[f__] if (length(origorder <- forderv(firstofeachgroup))) { f__ = f__[origorder] @@ -1448,11 +1448,11 @@ replace_dot_alias = function(e) { } else { if (verbose) last.started.at=proc.time(); if (bysameorder) { - if (verbose) {cat(gettext("Finding groups using uniqlist on key ... ", domain="R-data.table"));flush.console()} + if (verbose) {catf("Finding groups using uniqlist on key ... ");flush.console()} f__ = uniqlist(byval) } else { if (!is.character(byindex) || length(byindex)!=1L) stop("Internal error: byindex not the index name") # nocov - if (verbose) {cat(gettextf("Finding groups using uniqlist on index '%s' ... ", byindex, domain="R-data.table"));flush.console()} + if (verbose) {catf("Finding groups using uniqlist on index '%s' ... ", byindex);flush.console()} o__ = getindex(x, byindex) if (is.null(o__)) stop("Internal error: byindex not found") # nocov f__ = uniqlist(byval, order=o__) @@ -1460,7 +1460,7 @@ replace_dot_alias = function(e) { if (verbose) { cat(timetaken(last.started.at),"\n") last.started.at=proc.time() - cat(gettext("Finding group sizes from the positions (can be avoided to save RAM) ... ", domain="R-data.table")) + catf("Finding group sizes from the positions (can be avoided to save RAM) ... ") flush.console() # for windows } len__ = uniqlengths(f__, xnrow) @@ -1651,9 +1651,9 @@ replace_dot_alias = function(e) { } if (verbose) { if (!identical(oldjsub, jsub)) - cat(gettextf("lapply optimization changed j from '%s' to '%s'\n", deparse(oldjsub), deparse(jsub,width.cutoff=200L, nlines=1L), domain="R-data.table")) + catf("lapply optimization changed j from '%s' to '%s'\n", deparse(oldjsub), deparse(jsub,width.cutoff=200L, nlines=1L)) else - cat(gettextf("lapply optimization is on, j unchanged as '%s'\n", deparse(jsub,width.cutoff=200L, nlines=1L), domain="R-data.table")) + catf("lapply optimization is on, j unchanged as '%s'\n", deparse(jsub,width.cutoff=200L, nlines=1L)) } dotN = function(x) is.name(x) && x==".N" # For #334. TODO: Rprof() showed dotN() may be the culprit if iterated (#1470)?; avoid the == which converts each x to character? # FR #971, GForce kicks in on all subsets, no joins yet. Although joins could work with @@ -1663,7 +1663,7 @@ replace_dot_alias = function(e) { GForce = FALSE if ( (is.name(jsub) && jsub==".N") || (jsub %iscall% 'list' && length(jsub)==2L && jsub[[2L]]==".N") ) { GForce = TRUE - if (verbose) cat(gettext("GForce optimized j to '", domain="R-data.table"),deparse(jsub, width.cutoff=200L, nlines=1L),"'\n",sep="") + if (verbose) catf("GForce optimized j to '%s'\n",deparse(jsub, width.cutoff=200L, nlines=1L)) } } else { # Apply GForce @@ -1697,8 +1697,8 @@ replace_dot_alias = function(e) { jsub[[1L]] = as.name(paste0("g", jsub[[1L]])) if (length(jsub)==3L) jsub[[3L]] = eval(jsub[[3L]], parent.frame()) # tests 1187.3 & 1187.5 } - if (verbose) cat(gettext("GForce optimized j to '", domain="R-data.table"),deparse(jsub, width.cutoff=200L, nlines=1L),"'\n",sep="") - } else if (verbose) cat(gettext("GForce is on, left j unchanged\n", domain="R-data.table")); + if (verbose) catf("GForce optimized j to '%s'\n", deparse(jsub, width.cutoff=200L, nlines=1L)) + } else if (verbose) catf("GForce is on, left j unchanged\n"); } } if (!GForce && !is.name(jsub)) { @@ -1721,9 +1721,9 @@ replace_dot_alias = function(e) { } if (verbose) { if (!identical(oldjsub, jsub)) - cat(gettextf("Old mean optimization changed j from '%s' to '%s'\n", deparse(oldjsub), deparse(jsub, width.cutoff=200L, nlines=1L), domain="R-data.table")) + catf("Old mean optimization changed j from '%s' to '%s'\n", deparse(oldjsub), deparse(jsub, width.cutoff=200L, nlines=1L)) else - cat(gettext("Old mean optimization is on, left j unchanged.\n", domain="R-data.table")) + catf("Old mean optimization is on, left j unchanged.\n") } assign("Cfastmean", Cfastmean, SDenv) # Old comments still here for now ... @@ -1733,8 +1733,8 @@ replace_dot_alias = function(e) { # when fastmean can do trim. } } else if (verbose) { - if (getOption("datatable.optimize")<1L) cat(gettext("All optimizations are turned off\n", domain="R-data.table")) - else cat(gettextf("Optimization is on but left j unchanged (single plain symbol): '%s'\n", deparse(jsub, width.cutoff=200L, nlines=1L), domain="R-data.table")) + if (getOption("datatable.optimize")<1L) catf("All optimizations are turned off\n") + else catf("Optimization is on but left j unchanged (single plain symbol): '%s'\n", deparse(jsub, width.cutoff=200L, nlines=1L)) } if (byjoin) { groups = i @@ -1763,7 +1763,7 @@ replace_dot_alias = function(e) { # for consistency of empty case in test 184 f__=len__=0L } - if (verbose) {last.started.at=proc.time();cat(gettextf("Making each group and running j (GForce %s) ... ", GForce, domain="R-data.table"));flush.console()} + if (verbose) {last.started.at=proc.time();catf("Making each group and running j (GForce %s) ... ", GForce);flush.console()} if (GForce) { thisEnv = new.env() # not parent=parent.frame() so that gsum is found for (ii in ansvars) assign(ii, x[[ii]], thisEnv) @@ -1809,7 +1809,7 @@ replace_dot_alias = function(e) { cnames = as.character(bysubl)[-1L] cnames = gsub('^`|`$', '', cnames) # the wrapping backticks that were added above can be removed now, #3378 if (all(cnames %chin% names_x)) { - if (verbose) {last.started.at=proc.time();cat(gettext("setkey() after the := with keyby= ... ", domain="R-data.table"));flush.console()} + if (verbose) {last.started.at=proc.time();catf("setkey() after the := with keyby= ... ");flush.console()} setkeyv(x,cnames) # TO DO: setkey before grouping to get memcpy benefit. if (verbose) {cat(timetaken(last.started.at),"\n"); flush.console()} } @@ -1836,7 +1836,7 @@ replace_dot_alias = function(e) { setnames(ans,seq_along(bynames),bynames) # TO DO: reinvestigate bynames flowing from dogroups here and simplify } if (byjoin && keyby && !bysameorder) { - if (verbose) {last.started.at=proc.time();cat(gettext("setkey() afterwards for keyby=.EACHI ... ", domain="R-data.table"));flush.console()} + if (verbose) {last.started.at=proc.time();catf("setkey() afterwards for keyby=.EACHI ... ");flush.console()} setkeyv(ans,names(ans)[seq_along(byval)]) if (verbose) {cat(timetaken(last.started.at),"\n"); flush.console()} } else if (keyby || (haskey(x) && bysameorder && (byjoin || (length(allbyvars) && identical(allbyvars,head(key(x),length(allbyvars))))))) { @@ -2340,7 +2340,7 @@ split.data.table = function(x, f, drop = FALSE, by, sorted = FALSE, keep.by = TR dtq[[".SDcols"]] = if (keep.by) names(x) else setdiff(names(x), if (flatten) by else .by) if (join) dtq[["on"]] = if (flatten) by else .by dtq = as.call(dtq) - if (isTRUE(verbose)) cat(gettext("Processing split.data.table with: ", domain="R-data.table"), deparse(dtq, width.cutoff=500L), "\n", sep="") + if (isTRUE(verbose)) catf("Processing split.data.table with: %s\n", deparse(dtq, width.cutoff=500L)) tmp = eval(dtq) # add names on list setattr(ll <- tmp$.ll.tech.split, @@ -2972,7 +2972,7 @@ isReallyReal = function(x) { ## convert i to data.table with all combinations in rows. if(length(i) > 1L && prod(vapply_1i(i, length)) > 1e4){ ## CJ would result in more than 1e4 rows. This would be inefficient, especially memory-wise #2635 - if (verbose) {cat(gettext("Subsetting optimization disabled because the cross-product of RHS values exceeds 1e4, causing memory problems.\n", domain="R-data.table"));flush.console()} + if (verbose) {catf("Subsetting optimization disabled because the cross-product of RHS values exceeds 1e4, causing memory problems.\n");flush.console()} return(NULL) } ## Care is needed with names as we construct i @@ -2990,7 +2990,7 @@ isReallyReal = function(x) { ## order of key columns makes no difference, as long as they are all upfront in the key, I believe. key_head = head(key(x), length(i)) if (all(names(i) %chin% key_head)) { - if (verbose) {cat(gettextf("Optimized subsetting with key %s", brackify(key_head))); flush.console()} + if (verbose) {catf("Optimized subsetting with key %s", brackify(key_head)); flush.console()} idx = integer(0L) ## integer(0L) not NULL! Indicates that x is ordered correctly. idxCols = key_head ## in correct order! } @@ -3009,17 +3009,17 @@ isReallyReal = function(x) { } } if (!is.null(idx)){ - if (verbose) {cat(gettext("Optimized subsetting with index '", domain="R-data.table"), paste0( idxCols, collapse = "__"),"'\n",sep="");flush.console()} + if (verbose) {catf("Optimized subsetting with index '%s'\n", paste0( idxCols, collapse = "__"));flush.console()} } } if (is.null(idx)){ ## if nothing else helped, auto create a new index that can be used if (!getOption("datatable.auto.index")) return(NULL) - if (verbose) {cat(gettext("Creating new index '", domain="R-data.table"), paste0(names(i), collapse = "__"),"'\n",sep="");flush.console()} - if (verbose) {last.started.at=proc.time();cat(gettextf("Creating index %s done in ... ", paste0(names(i), collapse = "__"), domain="R-data.table"));flush.console()} + if (verbose) {catf("Creating new index '%s'\n", paste0(names(i), collapse = "__"));flush.console()} + if (verbose) {last.started.at=proc.time();catf("Creating index %s done in ... %s\n", paste0(names(i), collapse = "__"));flush.console()} setindexv(x, names(i)) if (verbose) {cat(timetaken(last.started.at),"\n");flush.console()} - if (verbose) {cat(gettext("Optimized subsetting with index '", domain="R-data.table"), paste0(names(i), collapse = "__"),"'\n",sep="");flush.console()} + if (verbose) {catf("Optimized subsetting with index '%s'\n", paste0(names(i), collapse = "__"));flush.console()} idx = attr(attr(x, "index", exact=TRUE), paste0("__", names(i), collapse = ""), exact=TRUE) idxCols = names(i) } diff --git a/R/devel.R b/R/devel.R index 98abd749d2..7cce5b900b 100644 --- a/R/devel.R +++ b/R/devel.R @@ -50,7 +50,7 @@ update.dev.pkg = function(object="data.table", repo="https://Rdatatable.gitlab.i .git = function(quiet=FALSE, lib.loc=NULL) { ans = unname(read.dcf(system.file("DESCRIPTION", package="data.table", lib.loc=lib.loc, mustWork=TRUE), fields="Revision")[, "Revision"]) if (!quiet && is.na(ans)) - cat(gettext("Git revision is not available. Most likely data.table was installed from CRAN or local archive.\nGit revision is available when installing from our repositories 'https://Rdatatable.gitlab.io/data.table' and 'https://Rdatatable.github.io/data.table'.\n", domain="R-data.table")) + catf("Git revision is not available. Most likely data.table was installed from CRAN or local archive.\nGit revision is available when installing from our repositories 'https://Rdatatable.gitlab.io/data.table' and 'https://Rdatatable.github.io/data.table'.\n") ans } diff --git a/R/fmelt.R b/R/fmelt.R index 910810f4c7..2d72ce2825 100644 --- a/R/fmelt.R +++ b/R/fmelt.R @@ -63,7 +63,7 @@ melt.data.table = function(data, id.vars, measure.vars, variable.name = "variabl as.logical(verbose)) setDT(ans) if (any(duplicated(names(ans)))) { - cat(gettext("Duplicate column names found in molten data.table. Setting unique names using 'make.names'\n", domain="R-data.table")) + catf("Duplicate column names found in molten data.table. Setting unique names using 'make.names'\n") setnames(ans, make.unique(names(ans))) } setattr(ans, 'sorted', NULL) diff --git a/R/foverlaps.R b/R/foverlaps.R index 11f50406e6..2688f2bf8b 100644 --- a/R/foverlaps.R +++ b/R/foverlaps.R @@ -154,7 +154,7 @@ foverlaps = function(x, y, by.x=if (!is.null(key(x))) key(x) else key(y), by.y=k .Call(Clookup, uy, nrow(y), indices(uy, y, yintervals, nomatch=0L, roll=roll), maxgap, minoverlap, mult, type, verbose) if (maxgap == 0L && minoverlap == 1L) { # iintervals = tail(names(x), 2L) # iintervals not yet used so commented out for now - if (verbose) {last.started.at=proc.time();cat(gettext("binary search(es) done in ...", domain="R-data.table"));flush.console()} + if (verbose) {last.started.at=proc.time();catf("binary search(es) done in ...");flush.console()} xmatches = indices(uy, x, xintervals, nomatch=0L, roll=roll) if (verbose) {cat(timetaken(last.started.at),"\n");flush.console()} olaps = .Call(Coverlaps, uy, xmatches, mult, type, nomatch, verbose) diff --git a/R/fread.R b/R/fread.R index a9bb47758c..a36cbfda28 100644 --- a/R/fread.R +++ b/R/fread.R @@ -194,7 +194,7 @@ yaml=FALSE, autostart=NA, tmpdir=tempdir(), tz="UTC") yaml_header = yaml::yaml.load(yaml_string) yaml_names = names(yaml_header) - if (verbose) cat(gettextf('Processed %d lines of YAML metadata with the following top-level fields: %s\n', n_read, brackify(yaml_names), domain="R-data.table")) + if (verbose) catf('Processed %d lines of YAML metadata with the following top-level fields: %s\n', n_read, brackify(yaml_names)) # process header first since it impacts how to handle colClasses if ('header' %chin% yaml_names) { if ('header' %chin% call_args) message("User-supplied 'header' will override that found in metadata.") @@ -326,7 +326,7 @@ yaml=FALSE, autostart=NA, tmpdir=tempdir(), tz="UTC") } else { cols_to_factor = which(vapply_1b(ans, is.character)) } - if (verbose) cat(gettextf("stringsAsFactors=%s converted %d column(s): %s\n", stringsAsFactors, length(cols_to_factor), brackify(names(ans)[cols_to_factor]), domain="R-data.table")) + if (verbose) catf("stringsAsFactors=%s converted %d column(s): %s\n", stringsAsFactors, length(cols_to_factor), brackify(names(ans)[cols_to_factor])) for (j in cols_to_factor) set(ans, j=j, value=as_factor(.subset2(ans, j))) } diff --git a/R/fwrite.R b/R/fwrite.R index b7f3eb5957..8325f137d3 100644 --- a/R/fwrite.R +++ b/R/fwrite.R @@ -63,7 +63,7 @@ fwrite = function(x, file="", append=FALSE, quote="auto", file = path.expand(file) # "~/foo/bar" if (append && (file=="" || file.exists(file))) { if (missing(col.names)) col.names = FALSE - if (verbose) cat(gettext("Appending to existing file so setting bom=FALSE and yaml=FALSE\n", domain="R-data.table")) + if (verbose) catf("Appending to existing file so setting bom=FALSE and yaml=FALSE\n") bom = FALSE yaml = FALSE } diff --git a/R/last.R b/R/last.R index ec6b980b77..8dff3271a1 100644 --- a/R/last.R +++ b/R/last.R @@ -7,12 +7,12 @@ last = function(x, n=1L, ...) { if (nargs()>1L) { if ("package:xts" %chin% search()) { if (verbose) - cat(gettextf("%s: using %s: %s\n", "last", "xts::last", "!is.xts(x) & nargs>1 & 'package:xts'%in%search()", domain="R-data.table")) + catf("%s: using %s: %s\n", "last", "xts::last", "!is.xts(x) & nargs>1 & 'package:xts'%in%search()") xts::last(x, n=n, ...) } else { # nocov start if (verbose) - cat(gettextf("%s: using %s: %s\n", "last", "utils::tail", "!is.xts(x) & nargs>1 & !'package:xts'%in%search()", domain="R-data.table")) + catf("%s: using %s: %s\n", "last", "utils::tail", "!is.xts(x) & nargs>1 & !'package:xts'%in%search()") utils::tail(x, n=n, ...) # nocov end } @@ -20,16 +20,16 @@ last = function(x, n=1L, ...) { dx = dim(x) if (is.null(dx)) { if (verbose) - cat(gettextf("%s: using %s: %s\n", "last", "'x[[length(x)]]'", "!is.xts(x) & !nargs>1 & is.null(dim(x))", domain="R-data.table")) + catf("%s: using %s: %s\n", "last", "'x[[length(x)]]'", "!is.xts(x) & !nargs>1 & is.null(dim(x))") lx = length(x) if (!lx) x else x[[lx]] } else if (is.data.frame(x)) { if (verbose) - cat(gettextf("%s: using %s: %s\n", "last", "'x[nrow(x),]'", "!is.xts(x) & !nargs>1 & is.data.frame(x)", domain="R-data.table")) + catf("%s: using %s: %s\n", "last", "'x[nrow(x),]'", "!is.xts(x) & !nargs>1 & is.data.frame(x)") x[dx[1L], , drop=FALSE] } else { if (verbose) - cat(gettextf("%s: using %s: %s\n", "last", "utils::tail", "!is.xts(x) & !nargs>1 & !is.null(dim(x)) & !is.data.frame(x)", domain="R-data.table")) + catf("%s: using %s: %s\n", "last", "utils::tail", "!is.xts(x) & !nargs>1 & !is.null(dim(x)) & !is.data.frame(x)") utils::tail(x, n=n, ...) } } @@ -37,7 +37,7 @@ last = function(x, n=1L, ...) { if (!requireNamespace("xts", quietly=TRUE)) stop(domain=NA, gettextf("'xts' class passed to %s function but 'xts' is not available, you should have 'xts' installed already", "data.table::last")) # nocov if (verbose) - cat(gettextf("%s: using %s: %s\n", "last", "xts::last", "is.xts(x)", domain="R-data.table")) + catf("%s: using %s: %s\n", "last", "xts::last", "is.xts(x)") xts::last(x, n=n, ...) } } @@ -48,12 +48,12 @@ first = function(x, n=1L, ...) { if (nargs()>1L) { if ("package:xts" %chin% search()) { if (verbose) - cat(gettextf("%s: using %s: %s\n", "first", "xts::first", "!is.xts(x) & nargs>1 & 'package:xts'%in%search()", domain="R-data.table")) + catf("%s: using %s: %s\n", "first", "xts::first", "!is.xts(x) & nargs>1 & 'package:xts'%in%search()") xts::first(x, n=n, ...) } else { # nocov start if (verbose) - cat(gettextf("%s: using %s: %s\n", "first", "utils::head", "!is.xts(x) & nargs>1 & !'package:xts'%in%search()", domain="R-data.table")) + catf("%s: using %s: %s\n", "first", "utils::head", "!is.xts(x) & nargs>1 & !'package:xts'%in%search()") utils::head(x, n=n, ...) # nocov end } @@ -61,16 +61,16 @@ first = function(x, n=1L, ...) { dx = dim(x) if (is.null(dx)) { if (verbose) - cat(gettextf("%s: using %s: %s\n", "first", "'x[[1L]]'", "!is.xts(x) & !nargs>1 & is.null(dim(x))", domain="R-data.table")) + catf("%s: using %s: %s\n", "first", "'x[[1L]]'", "!is.xts(x) & !nargs>1 & is.null(dim(x))") lx = length(x) if (!lx) x else x[[1L]] } else if (is.data.frame(x)) { if (verbose) - cat(gettextf("%s: using %s: %s\n", "first", "'x[1L,]'", "!is.xts(x) & !nargs>1 & is.data.frame(x)", domain="R-data.table")) + catf("%s: using %s: %s\n", "first", "'x[1L,]'", "!is.xts(x) & !nargs>1 & is.data.frame(x)") if (!dx[1L]) x else x[1L, , drop=FALSE] } else { if (verbose) - cat(gettextf("%s: using %s: %s\n", "first", "utils::head", "!is.xts(x) & !nargs>1 & !is.null(dim(x)) & !is.data.frame(x)", domain="R-data.table")) + catf("%s: using %s: %s\n", "first", "utils::head", "!is.xts(x) & !nargs>1 & !is.null(dim(x)) & !is.data.frame(x)") utils::head(x, n=n, ...) } } @@ -78,7 +78,7 @@ first = function(x, n=1L, ...) { if (!requireNamespace("xts", quietly=TRUE)) stop(domain=NA, gettextf("'xts' class passed to %s function but 'xts' is not available, you should have 'xts' installed already", "data.table::first")) # nocov if (verbose) - cat(gettextf("%s: using %s: %s\n", "first", "xts::first", "is.xts(x)", domain="R-data.table")) + catf("%s: using %s: %s\n", "first", "xts::first", "is.xts(x)") xts::first(x, n=n, ...) } } diff --git a/R/print.data.table.R b/R/print.data.table.R index 6aa9c88682..3d53cf7308 100644 --- a/R/print.data.table.R +++ b/R/print.data.table.R @@ -45,7 +45,7 @@ print.data.table = function(x, topn=getOption("datatable.print.topn"), topn = max(as.integer(topn),1L) if (print.keys) { if (!is.null(ky <- key(x))) - cat(gettextf("Key: <%s>\n", toString(ky))) + catf("Key: <%s>\n", toString(ky)) if (!is.null(ixs <- indices(x))) cat(sprintf( ngettext(length(ixs), "Index: %s\n", "Indices: %s\n"), @@ -55,9 +55,9 @@ print.data.table = function(x, topn=getOption("datatable.print.topn"), if (any(dim(x)==0L)) { class = if (is.data.table(x)) "table" else "frame" # a data.frame could be passed to print.data.table() directly, #3363 if (all(dim(x)==0L)) { - cat(gettextf("Null data.%s (0 rows and 0 cols)\n", class, domain="R-data.table")) # See FAQ 2.5 and NEWS item in v1.8.9 + catf("Null data.%s (0 rows and 0 cols)\n", class) # See FAQ 2.5 and NEWS item in v1.8.9 } else { - cat(gettextf("Empty data.%s (%d rows and %d cols)", class, NROW(x), NCOL(x), domain="R-data.table")) + catf("Empty data.%s (%d rows and %d cols)", class, NROW(x), NCOL(x)) if (length(x)>0L) cat(": ",paste(head(names(x),6L),collapse=","),if(length(x)>6L)"...",sep="") cat("\n") } @@ -234,7 +234,7 @@ trunc_cols_message = function(not_printed, abbs, class, col.names){ n = length(not_printed) if (class && col.names != "none") classes = paste0(" ", tail(abbs, n)) else classes = "" cat(sprintf( - ngettext(n, domain="R-data.table", + ngettext(n, "%d variable not shown: %s\n", "%d variables not shown: %s\n"), n, brackify(paste0(not_printed, classes)) diff --git a/R/setkey.R b/R/setkey.R index 4b2cf89263..b9b324ac4c 100644 --- a/R/setkey.R +++ b/R/setkey.R @@ -88,12 +88,12 @@ setkeyv = function(x, cols, verbose=getOption("datatable.verbose"), physical=TRU if (verbose) { tt = suppressMessages(system.time(o <- forderv(x, cols, sort=TRUE, retGrp=FALSE))) # system.time does a gc, so we don't want this always on, until refcnt is on by default in R # suppress needed for tests 644 and 645 in verbose mode - cat(gettext("forder took", domain="R-data.table"), tt["user.self"]+tt["sys.self"], "sec\n") + catf("forder took %.03f sec\n", tt["user.self"]+tt["sys.self"]) } else { o = forderv(x, cols, sort=TRUE, retGrp=FALSE) } } else { - if (verbose) cat(gettextf("setkey on columns %s using existing index '%s'\n", brackify(cols), newkey, domain="R-data.table")) + if (verbose) catf("setkey on columns %s using existing index '%s'\n", brackify(cols), newkey) o = getindex(x, newkey) } if (!physical) { @@ -105,9 +105,9 @@ setkeyv = function(x, cols, verbose=getOption("datatable.verbose"), physical=TRU if (length(o)) { if (verbose) { last.started.at = proc.time() } .Call(Creorder,x,o) - if (verbose) { cat(gettext("reorder took", domain="R-data.table"), timetaken(last.started.at), "\n"); flush.console() } + if (verbose) { catf("reorder took %s\n", timetaken(last.started.at)); flush.console() } } else { - if (verbose) cat(gettext("x is already ordered by these columns, no need to call reorder\n", domain="R-data.table")) + if (verbose) catf("x is already ordered by these columns, no need to call reorder\n") } # else empty integer() from forderv means x is already ordered by those cols, nothing to do. setattr(x,"sorted",cols) invisible(x) diff --git a/R/setops.R b/R/setops.R index f5fbc03195..5a1d10d395 100644 --- a/R/setops.R +++ b/R/setops.R @@ -14,11 +14,11 @@ setdiff_ = function(x, y, by.x=seq_along(x), by.y=seq_along(y), use.names=FALSE) icnam = names(y)[lc] xcnam = names(x)[rc] if ( is.character(x[[rc]]) && !(is.character(y[[lc]]) || is.factor(y[[lc]])) ) { - stop(gettextf("When x's column ('%s') is character, the corresponding column in y ('%s') should be factor or character, but found incompatible type '%s'.", xcnam, icnam, typeof(y[[lc]]), domain="R-data.table")) + stop("When x's column ('",xcnam,"') is character, the corresponding column in y ('",icnam,"') should be factor or character, but found incompatible type '",typeof(y[[lc]]),"'.") } else if ( is.factor(x[[rc]]) && !(is.character(y[[lc]]) || is.factor(y[[lc]])) ) { - stop(gettextf("When x's column ('%s') is factor, the corresponding column in y ('%s') should be character or factor, but found incompatible type '%s'.", xcnam, icnam, typeof(y[[lc]]), domain="R-data.table")) + stop("When x's column ('",xcnam,"') is factor, the corresponding column in y ('",icnam,"') should be character or factor, but found incompatible type '",typeof(y[[lc]]),"'.") } else if ( (is.integer(x[[rc]]) || is.double(x[[rc]])) && (is.logical(y[[lc]]) || is.character(y[[lc]])) ) { - stop(gettextf("When x's column ('%s') is integer or numeric, the corresponding column in y ('%s') can not be character or logical types, but found incompatible type '%s'.", xcnam, icnam, typeof(y[[lc]]), domain="R-data.table")) + stop("When x's column ('",xcnam,"') is integer or numeric, the corresponding column in y ('",icnam,"') can not be character or logical types, but found incompatible type '",typeof(y[[lc]]),"'.") } } ux = unique(shallow(x, by.x)) diff --git a/R/tables.R b/R/tables.R index 7813bd19ac..b94441c626 100644 --- a/R/tables.R +++ b/R/tables.R @@ -8,7 +8,7 @@ tables = function(mb=TRUE, order.col="NAME", width=80, all_obj = objects(envir=env, all.names=TRUE) is_DT = which(vapply_1b(all_obj, function(x) is.data.table(get(x, envir=env)))) if (!length(is_DT)) { - if (!silent) cat(gettextf("No objects of class data.table exist in %s\n", if (identical(env, .GlobalEnv)) ".GlobalEnv" else format(env), domain="R-data.table")) + if (!silent) catf("No objects of class data.table exist in %s\n", if (identical(env, .GlobalEnv)) ".GlobalEnv" else format(env)) return(invisible(data.table(NULL))) } DT_names = all_obj[is_DT] @@ -36,7 +36,7 @@ tables = function(mb=TRUE, order.col="NAME", width=80, tt[ , NCOL := pretty_format(NCOL, width=4L)] if (mb) tt[ , MB := pretty_format(MB, width=2L)] print(tt, class=FALSE, nrows=Inf) - if (mb) cat(gettext("Total: ", domain="R-data.table"), prettyNum(sum(info$MB), big.mark=","), "MB\n", sep="") + if (mb) catf("Total: %sMB\n", prettyNum(sum(info$MB), big.mark=",")) } invisible(info) } diff --git a/R/test.data.table.R b/R/test.data.table.R index 9dc0d43ebc..906fe0ca45 100644 --- a/R/test.data.table.R +++ b/R/test.data.table.R @@ -92,7 +92,7 @@ test.data.table = function(script="tests.Rraw", verbose=FALSE, pkg=".", silent=F cat("getDTthreads(verbose=TRUE):\n") # for tracing on CRAN; output to log before anything is attempted getDTthreads(verbose=TRUE) # includes the returned value in the verbose output (rather than dangling '[1] 4'); e.g. "data.table is using 4 threads" - cat(gettext("test.data.table() running:", domain="R-data.table"), fn, "\n") # print fn to log before attempting anything on it (in case it is missing); on same line for slightly easier grep + catf("test.data.table() running: %s\n") # print fn to log before attempting anything on it (in case it is missing); on same line for slightly easier grep env = new.env(parent=.GlobalEnv) assign("testDir", function(x) file.path(fulldir, x), envir=env) @@ -101,7 +101,7 @@ test.data.table = function(script="tests.Rraw", verbose=FALSE, pkg=".", silent=F foreign = txt != "object 'not__exist__' not found" if (foreign) { # nocov start - cat(gettext("\n**** This R session's language is not English. Each test will still check that the correct number of errors and/or\n**** warnings are produced. However, to test the text of each error/warning too, please restart R with LANGUAGE=en\n\n", domain="R-data.table")) + catf("\n**** This R session's language is not English. Each test will still check that the correct number of errors and/or\n**** warnings are produced. However, to test the text of each error/warning too, please restart R with LANGUAGE=en\n\n") # nocov end } assign("foreign", foreign, envir=env) @@ -164,7 +164,7 @@ test.data.table = function(script="tests.Rraw", verbose=FALSE, pkg=".", silent=F # domain=NA since it's already translated by then stop(domain = NA, sprintf( ngettext( - nfail, domain="R-data.table", + nfail, "%d error out of %d. Search %s for test number %s", "%d errors out of %d. Search %s for test numbers %s" ), nfail, ntest, names(fn), paste(env$whichfail, collapse=", ") @@ -179,10 +179,10 @@ test.data.table = function(script="tests.Rraw", verbose=FALSE, pkg=".", silent=F if ((x<-sum(timings[["nTest"]])) != ntest) { warning("Timings count mismatch:",x,"vs",ntest) # nocov } - cat(gettext("10 longest running tests took ", domain="R-data.table"), as.integer(tt<-DT[, sum(time)]), "s (", as.integer(100*tt/(ss<-timings[,sum(time)])), "% of ", as.integer(ss), "s)\n", sep="") + catf("10 longest running tests took %ds (%d%% of %ds)\n", as.integer(tt<-DT[, sum(time)]), as.integer(100*tt/(ss<-timings[,sum(time)])), as.integer(ss)) print(DT, class=FALSE) - cat(gettextf("All %d tests (last %s) in %s completed ok in %s\n", ntest, env$prevtest, names(fn), timetaken(env$started.at))) + catf("All %d tests (last %s) in %s completed ok in %s\n", ntest, env$prevtest, names(fn), timetaken(env$started.at)) ## this chunk requires to include new suggested deps: graphics, grDevices #memtest.plot = function(.inittime) { @@ -291,7 +291,7 @@ test = function(num,x,y=TRUE,error=NULL,warning=NULL,message=NULL,output=NULL,no if (showProgress) # \r can't be in gettextf msg cat("\r") # nocov - cat(gettextf("Running test id %s ", numStr, domain="R-data.table")) # nocov. + catf("Running test id %s ", numStr) # nocov. # See PR #4090 for comments about change here in Dec 2019. # If a segfault error occurs in future and we'd like to know after which test, then arrange for the # try(sys.source()) in test.data.table() to be run in a separate R process. That process could write out @@ -348,7 +348,7 @@ test = function(num,x,y=TRUE,error=NULL,warning=NULL,message=NULL,output=NULL,no if (.test.data.table) { if (num>\n", encodeString(output))) # \n printed as '\\n' so the two lines of output can be compared vertically - cat(gettextf("Observed: <<%s>>\n", encodeString(out))) + catf("Test %s did not produce correct output:\n", numStr) + catf("Expected: <<%s>>\n", encodeString(output)) # \n printed as '\\n' so the two lines of output can be compared vertically + catf("Observed: <<%s>>\n", encodeString(out)) fail = TRUE # nocov end } if (length(notOutput) && string_match(notOutput, out, ignore.case=TRUE)) { # nocov start - cat(gettextf("Test %s produced output but should not have:\n", numStr)) - cat(gettextf("Expected absent (case insensitive): <<%s>>\n", encodeString(notOutput))) - cat(gettextf("Observed: <<%s>>\n", encodeString(out))) + catf("Test %s produced output but should not have:\n", numStr) + catf("Expected absent (case insensitive): <<%s>>\n", encodeString(notOutput)) + catf("Observed: <<%s>>\n", encodeString(out)) fail = TRUE # nocov end } @@ -416,7 +414,7 @@ test = function(num,x,y=TRUE,error=NULL,warning=NULL,message=NULL,output=NULL,no if (is.data.table(x) && is.data.table(y)) { if (!selfrefok(x) || !selfrefok(y)) { # nocov start - cat(gettextf("Test %s ran without errors but selfrefok(%s) is FALSE\n", numStr, if (selfrefok(x)) "y" else "x", domain="R-data.table")) + catf("Test %s ran without errors but selfrefok(%s) is FALSE\n", numStr, if (selfrefok(x)) "y" else "x") fail = TRUE # nocov end } else { @@ -439,12 +437,12 @@ test = function(num,x,y=TRUE,error=NULL,warning=NULL,message=NULL,output=NULL,no # For test 617 on r-prerel-solaris-sparc on 7 Mar 2013 # nocov start if (!fail) { - cat(gettextf("Test %s ran without errors but failed check that x equals y:\n", numStr, domain="R-data.table")) + catf("Test %s ran without errors but failed check that x equals y:\n", numStr) failPrint = function(x, xsub) { cat(">", substitute(x), "=", xsub, "\n") if (is.data.table(x)) compactprint(x) else { nn = length(x) - cat(gettextf("First %d of %d (type '%s'): \n", min(nn, 6L), length(x), typeof(x), domain="R-data.table")) + catf("First %d of %d (type '%s'): \n", min(nn, 6L), length(x), typeof(x)) # head.matrix doesn't restrict columns if (length(d <- dim(x))) do.call(`[`, c(list(x, drop = FALSE), lapply(pmin(d, 6L), seq_len))) else print(head(x)) diff --git a/R/utils.R b/R/utils.R index babc9bd6c7..a31930887c 100644 --- a/R/utils.R +++ b/R/utils.R @@ -139,3 +139,7 @@ edit.data.table = function(name, ...) { setDT(NextMethod('edit', name))[] } # nocov end + +catf = function(fmt, ...) { + if (...length()) cat(gettextf(fmt, ...)) else cat(gettext(fmt)) +} From 00e3326da9c83c61839506743b933c2fd173530b Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Sat, 8 May 2021 19:54:13 -0700 Subject: [PATCH 22/28] some more instances --- R/cedta.R | 2 +- R/devel.R | 4 ++-- R/foverlaps.R | 2 +- R/print.data.table.R | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/R/cedta.R b/R/cedta.R index 0204572818..d3a90e93cc 100644 --- a/R/cedta.R +++ b/R/cedta.R @@ -40,7 +40,7 @@ cedta = function(n=2L) { tryCatch("data.table" %chin% get(".Depends",paste("package",nsname,sep=":"),inherits=FALSE),error=function(e)FALSE) # both ns$.Depends and get(.Depends,ns) are not sufficient if (!ans && getOption("datatable.verbose")) { # nocov start - cat(gettextf("cedta decided '%s' wasn't data.table aware. Here is call stack with [[1L]] applied:\n", nsname, domain="R-data.table")) + catf("cedta decided '%s' wasn't data.table aware. Here is call stack with [[1L]] applied:\n", nsname) print(sapply(sys.calls(), "[[", 1L)) # nocov end # so we can trace the namespace name that may need to be added (very unusually) diff --git a/R/devel.R b/R/devel.R index 7cce5b900b..1da19b7c98 100644 --- a/R/devel.R +++ b/R/devel.R @@ -28,8 +28,8 @@ update.dev.pkg = function(object="data.table", repo="https://Rdatatable.gitlab.i # get Revision field from remote repository PACKAGES file una = is.na(ups<-dcf.repo(pkg, repo, field, type)) if (una) - cat(sprintf("No revision information found in DESCRIPTION file for %s package. Unsure '%s' is correct field in PACKAGES file in your package repository '%s'. Otherwise package will be re-installed every time, proceeding to installation.\n", - pkg, field, contrib.url(repo, type=type))) + catf("No revision information found in DESCRIPTION file for %s package. Unsure '%s' is correct field in PACKAGES file in your package repository '%s'. Otherwise package will be re-installed every time, proceeding to installation.\n", + pkg, field, contrib.url(repo, type=type)) # see if Revision is different then currently installed Revision, note that installed package will have Revision info only when it was installed from remote devel repo upg = una || !identical(ups, dcf.lib(pkg, field, lib.loc=lib)) # update.dev.pkg fails on windows R 4.0.0, we have to unload package namespace before installing new version #4403 diff --git a/R/foverlaps.R b/R/foverlaps.R index 2688f2bf8b..fc0b706ccd 100644 --- a/R/foverlaps.R +++ b/R/foverlaps.R @@ -128,7 +128,7 @@ foverlaps = function(x, y, by.x=if (!is.null(key(x))) key(x) else key(y), by.y=k end = yintervals[2L], any =, within =, equal = yintervals) call = construct(head(ynames, -2L), uycols, type) - if (verbose) {last.started.at=proc.time();cat("unique() + setkey() operations done in ...");flush.console()} + if (verbose) {last.started.at=proc.time();catf("unique() + setkey() operations done in ...");flush.console()} uy = unique(y[, eval(call)]) # this started to fail from R 4.1 due to c(POSIXct, numeric) setkey(uy)[, `:=`(lookup = list(list(integer(0L))), type_lookup = list(list(integer(0L))), count=0L, type_count=0L)] if (verbose) {cat(timetaken(last.started.at),"\n"); flush.console()} diff --git a/R/print.data.table.R b/R/print.data.table.R index 3d53cf7308..4f2ab7bf0e 100644 --- a/R/print.data.table.R +++ b/R/print.data.table.R @@ -192,7 +192,7 @@ shouldPrint = function(x) { # for removing the head (column names) of matrix output entirely, # as opposed to printing a blank line, for excluding col.names per PR #1483 -cut_top = function(x) cat(capture.output(x)[-1L], sep = '\n') +cut_top = function(x) writeLines(capture.output(x)[-1L]) # for printing the dims for list columns #3671; used by format.data.table() paste_dims = function(x) { From 88058c6144cc9ba0e4ffcac8fa5da8e5bc30b81f Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Sat, 8 May 2021 19:57:57 -0700 Subject: [PATCH 23/28] slight fix --- R/data.table.R | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/R/data.table.R b/R/data.table.R index ea120fc989..d6d4c11bf3 100644 --- a/R/data.table.R +++ b/R/data.table.R @@ -419,9 +419,11 @@ replace_dot_alias = function(e) { len_common_names = length(common_names) if (!len_common_names) stop("Attempting to do natural join but no common columns in provided tables") if (verbose) { - which_cols_msg = if (len_common_names == length(x)) gettext("natural join using all 'x' columns") - else gettextf("natural join using %s", paste(":", brackify(common_names))) - catf("Joining but 'x' has no key, natural join using %s\n", which_cols_msg) + which_cols_msg = if (len_common_names == length(x)) { + catf("Joining but 'x' has no key, natural join using all 'x' columns") + } else { + catf("Joining but 'x' has no key, natural join using %s", paste(":", brackify(common_names))) + } } on = common_names } From 916945fccdaec773e4d8bc7cddb56d6b16b11a9d Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Sat, 8 May 2021 20:02:55 -0700 Subject: [PATCH 24/28] spacing --- R/setops.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/setops.R b/R/setops.R index 5a1d10d395..89cf3fd81c 100644 --- a/R/setops.R +++ b/R/setops.R @@ -14,7 +14,7 @@ setdiff_ = function(x, y, by.x=seq_along(x), by.y=seq_along(y), use.names=FALSE) icnam = names(y)[lc] xcnam = names(x)[rc] if ( is.character(x[[rc]]) && !(is.character(y[[lc]]) || is.factor(y[[lc]])) ) { - stop("When x's column ('",xcnam,"') is character, the corresponding column in y ('",icnam,"') should be factor or character, but found incompatible type '",typeof(y[[lc]]),"'.") + stop("When x's column ('",xcnam,"') is character, the corresponding column in y ('",icnam,"') should be factor or character, but found incompatible type '",typeof(y[[lc]]),"'.") } else if ( is.factor(x[[rc]]) && !(is.character(y[[lc]]) || is.factor(y[[lc]])) ) { stop("When x's column ('",xcnam,"') is factor, the corresponding column in y ('",icnam,"') should be character or factor, but found incompatible type '",typeof(y[[lc]]),"'.") } else if ( (is.integer(x[[rc]]) || is.double(x[[rc]])) && (is.logical(y[[lc]]) || is.character(y[[lc]])) ) { From bed23af9b7d52fdbcc4d4fbc95a7ec821f4884a8 Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Sat, 8 May 2021 20:24:07 -0700 Subject: [PATCH 25/28] resolve merge conflicts --- po/R-data.table.pot | 5 - po/R-zh_CN.po | 9 - po/data.table.pot | 407 ------------------------------------------- po/zh_CN.po | 408 -------------------------------------------- 4 files changed, 829 deletions(-) diff --git a/po/R-data.table.pot b/po/R-data.table.pot index 5c367c6c9a..ad00f12772 100644 --- a/po/R-data.table.pot +++ b/po/R-data.table.pot @@ -1,12 +1,7 @@ msgid "" msgstr "" -<<<<<<< HEAD -"Project-Id-Version: data.table 1.12.9\n" -"POT-Creation-Date: 2020-01-31 17:27\n" -======= "Project-Id-Version: data.table 1.13.1\n" "POT-Creation-Date: 2020-10-17 12:05\n" ->>>>>>> master "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/po/R-zh_CN.po b/po/R-zh_CN.po index 2eea7c7a31..7e78584fd7 100644 --- a/po/R-zh_CN.po +++ b/po/R-zh_CN.po @@ -1,11 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: data.table 1.12.5\n" -<<<<<<< HEAD -"POT-Creation-Date: 2020-01-31 17:27\n" -======= "POT-Creation-Date: 2020-07-17 14:38\n" ->>>>>>> master "PO-Revision-Date: 2019-11-16 18:37+0800\n" "Last-Translator: Xianying Tan \n" "Language-Team: Mandarin\n" @@ -2742,13 +2738,8 @@ msgid "" "duplicate column names. Rename '%s' column in xts or use `keep.rownames` to " "change the index column name." msgstr "" -<<<<<<< HEAD -"输入的xts对象不能含有'index'列,因这会导致出现重复的列名。请尝试重新命名xts中" -"的'index'列或者使用`keep.rownames=FALSE`并手动添加索引(index)为另外的列" -======= "输入的xts对象不能含有'%s'列,因这会导致出现重复的列名。请尝试重新命名xts中" "的'%s'列或者使用`keep.rownames`并手动添加index为另外的列" ->>>>>>> master msgid "" "data.table must have a time based column in first position, use " diff --git a/po/data.table.pot b/po/data.table.pot index 73c657baf0..cea9c55a58 100644 --- a/po/data.table.pot +++ b/po/data.table.pot @@ -8,11 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: data.table 1.13.1\n" "Report-Msgid-Bugs-To: \n" -<<<<<<< HEAD -"POT-Creation-Date: 2020-01-31 17:27+0800\n" -======= "POT-Creation-Date: 2020-10-17 13:11-0400\n" ->>>>>>> master "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -414,9 +410,6 @@ msgstr "" msgid "Shortening index '%s' to '%s' due to an update on a key column\n" msgstr "" -<<<<<<< HEAD -#: assign.c:683 -======= #: assign.c:650 #, c-format msgid "" @@ -425,251 +418,143 @@ msgid "" msgstr "" #: assign.c:688 ->>>>>>> master #, c-format msgid "" "Internal error memrecycle: sourceStart=%d sourceLen=%d length(source)=%d" msgstr "" -<<<<<<< HEAD -#: assign.c:685 -======= #: assign.c:690 ->>>>>>> master #, c-format msgid "Internal error memrecycle: start=%d len=%d length(target)=%d" msgstr "" -<<<<<<< HEAD -#: assign.c:688 -======= #: assign.c:693 ->>>>>>> master #, c-format msgid "Internal error: recycle length error not caught earlier. slen=%d len=%d" msgstr "" -<<<<<<< HEAD -#: assign.c:692 -msgid "Internal error: memrecycle has received NULL colname" -msgstr "" - -#: assign.c:718 -======= #: assign.c:697 msgid "Internal error: memrecycle has received NULL colname" msgstr "" #: assign.c:706 ->>>>>>> master #, c-format msgid "" "Cannot assign 'factor' to '%s'. Factors can only be assigned to factor, " "character or list columns." msgstr "" -<<<<<<< HEAD -#: assign.c:732 -======= #: assign.c:720 ->>>>>>> master #, c-format msgid "" "Assigning factor numbers to column %d named '%s'. But %d is outside the " "level range [1,%d]" msgstr "" -<<<<<<< HEAD -#: assign.c:740 -======= #: assign.c:728 ->>>>>>> master #, c-format msgid "" "Assigning factor numbers to column %d named '%s'. But %f is outside the " "level range [1,%d], or is not a whole number." msgstr "" -<<<<<<< HEAD -#: assign.c:746 -======= #: assign.c:734 ->>>>>>> master #, c-format msgid "" "Cannot assign '%s' to 'factor'. Factor columns can be assigned factor, " "character, NA in any type, or level numbers." msgstr "" -<<<<<<< HEAD -#: assign.c:767 -======= #: assign.c:755 ->>>>>>> master msgid "" "Internal error: levels of target are either not unique or have truelength<0" msgstr "" -<<<<<<< HEAD -#: assign.c:806 -======= #: assign.c:794 ->>>>>>> master #, c-format msgid "Unable to allocate working memory of %d bytes to combine factor levels" msgstr "" -<<<<<<< HEAD -#: assign.c:813 -msgid "Internal error: extra level check sum failed" -msgstr "" - -#: assign.c:832 -======= #: assign.c:801 msgid "Internal error: extra level check sum failed" msgstr "" #: assign.c:820 ->>>>>>> master #, c-format msgid "" "Coercing 'character' RHS to '%s' to match the type of the target column " "(column %d named '%s')." msgstr "" -<<<<<<< HEAD -#: assign.c:838 -======= #: assign.c:826 ->>>>>>> master #, c-format msgid "" "Cannot coerce 'list' RHS to 'integer64' to match the type of the target " "column (column %d named '%s')." msgstr "" -<<<<<<< HEAD -#: assign.c:843 -======= #: assign.c:831 ->>>>>>> master #, c-format msgid "" "Coercing 'list' RHS to '%s' to match the type of the target column (column " "%d named '%s')." msgstr "" -<<<<<<< HEAD -#: assign.c:849 -======= #: assign.c:837 ->>>>>>> master #, c-format msgid "Zero-copy coerce when assigning '%s' to '%s' column %d named '%s'.\n" msgstr "" -<<<<<<< HEAD -#: assign.c:944 -======= #: assign.c:932 ->>>>>>> master #, c-format msgid "type '%s' cannot be coerced to '%s'" msgstr "" -<<<<<<< HEAD -#: assign.c:1064 -======= #: assign.c:1052 ->>>>>>> master msgid "" "To assign integer64 to a character column, please use as.character() for " "clarity." msgstr "" -<<<<<<< HEAD -#: assign.c:1076 -======= #: assign.c:1064 ->>>>>>> master #, c-format msgid "Unsupported column type in assign.c:memrecycle '%s'" msgstr "" -<<<<<<< HEAD -#: assign.c:1123 -======= #: assign.c:1111 ->>>>>>> master #, c-format msgid "Internal error: writeNA passed a vector of type '%s'" msgstr "" -<<<<<<< HEAD -#: assign.c:1154 -======= #: assign.c:1142 ->>>>>>> master #, c-format msgid "" "Internal error: savetl_init checks failed (%d %d %p %p). please report to " "data.table issue tracker." msgstr "" -<<<<<<< HEAD -#: assign.c:1162 -======= #: assign.c:1150 ->>>>>>> master #, c-format msgid "Failed to allocate initial %d items in savetl_init" msgstr "" -<<<<<<< HEAD -#: assign.c:1171 -======= #: assign.c:1159 ->>>>>>> master #, c-format msgid "" "Internal error: reached maximum %d items for savetl. Please report to data." "table issue tracker." msgstr "" -<<<<<<< HEAD -#: assign.c:1178 -======= #: assign.c:1166 ->>>>>>> master #, c-format msgid "Failed to realloc saveds to %d items in savetl" msgstr "" -<<<<<<< HEAD -#: assign.c:1184 -======= #: assign.c:1172 ->>>>>>> master #, c-format msgid "Failed to realloc savedtl to %d items in savetl" msgstr "" -<<<<<<< HEAD -#: assign.c:1207 -msgid "x must be a character vector" -msgstr "" - -#: assign.c:1208 -msgid "'which' must be an integer vector" -msgstr "" - -#: assign.c:1209 -msgid "'new' must be a character vector" -msgstr "" - -#: assign.c:1210 -======= #: assign.c:1195 msgid "x must be a character vector" msgstr "" @@ -683,16 +568,11 @@ msgid "'new' must be a character vector" msgstr "" #: assign.c:1198 ->>>>>>> master #, c-format msgid "'new' is length %d. Should be the same as length of 'which' (%d)" msgstr "" -<<<<<<< HEAD -#: assign.c:1213 -======= #: assign.c:1201 ->>>>>>> master #, c-format msgid "" "Item %d of 'which' is %d which is outside range of the length %d character " @@ -987,33 +867,6 @@ msgstr "" msgid "Unsupported type: %s" msgstr "" -<<<<<<< HEAD -#: dogroups.c:15 -msgid "Internal error: order not integer vector" -msgstr "" - -#: dogroups.c:16 -msgid "Internal error: starts not integer" -msgstr "" - -#: dogroups.c:17 -msgid "Internal error: lens not integer" -msgstr "" - -#: dogroups.c:19 -msgid "Internal error: jiscols not NULL but o__ has length" -msgstr "" - -#: dogroups.c:20 -msgid "Internal error: xjiscols not NULL but o__ has length" -msgstr "" - -#: dogroups.c:21 -msgid "'env' should be an environment" -msgstr "" - -#: dogroups.c:40 -======= #: dogroups.c:69 msgid "Internal error: order not integer vector" msgstr "" @@ -1039,67 +892,39 @@ msgid "'env' should be an environment" msgstr "" #: dogroups.c:94 ->>>>>>> master #, c-format msgid "" "Internal error: unsupported size-0 type '%s' in column %d of 'by' should " "have been caught earlier" msgstr "" -<<<<<<< HEAD -#: dogroups.c:44 -======= #: dogroups.c:99 ->>>>>>> master #, c-format msgid "!length(bynames)[%d]==length(groups)[%d]==length(grpcols)[%d]" msgstr "" -<<<<<<< HEAD -#: dogroups.c:63 -msgid "row.names attribute of .SD not found" -msgstr "" - -#: dogroups.c:65 -======= #: dogroups.c:121 msgid "row.names attribute of .SD not found" msgstr "" #: dogroups.c:123 ->>>>>>> master #, c-format msgid "" "row.names of .SD isn't integer length 2 with NA as first item; i.e., ." "set_row_names(). [%s %d %d]" msgstr "" -<<<<<<< HEAD -#: dogroups.c:70 -msgid "length(names)!=length(SD)" -msgstr "" - -#: dogroups.c:74 -======= #: dogroups.c:128 msgid "length(names)!=length(SD)" msgstr "" #: dogroups.c:134 ->>>>>>> master #, c-format msgid "" "Internal error: size-0 type %d in .SD column %d should have been caught " "earlier" msgstr "" -<<<<<<< HEAD -#: dogroups.c:84 -msgid "length(xknames)!=length(xSD)" -msgstr "" - -#: dogroups.c:88 -======= #: dogroups.c:136 #, c-format msgid "Internal error: SDall %d length = %d != %d" @@ -1110,65 +935,40 @@ msgid "length(xknames)!=length(xSD)" msgstr "" #: dogroups.c:148 ->>>>>>> master #, c-format msgid "" "Internal error: type %d in .xSD column %d should have been caught by now" msgstr "" -<<<<<<< HEAD -#: dogroups.c:92 -======= #: dogroups.c:152 ->>>>>>> master #, c-format msgid "length(iSD)[%d] != length(jiscols)[%d]" msgstr "" -<<<<<<< HEAD -#: dogroups.c:93 -======= #: dogroups.c:153 ->>>>>>> master #, c-format msgid "length(xSD)[%d] != length(xjiscols)[%d]" msgstr "" -<<<<<<< HEAD -#: dogroups.c:198 -======= #: dogroups.c:259 ->>>>>>> master #, c-format msgid "j evaluates to type '%s'. Must evaluate to atomic vector or list." msgstr "" -<<<<<<< HEAD -#: dogroups.c:206 -======= #: dogroups.c:267 ->>>>>>> master msgid "" "All items in j=list(...) should be atomic vectors or lists. If you are " "trying something like j=list(.SD,newcol=mean(colA)) then use := by group " "instead (much quicker), or cbind or merge afterwards." msgstr "" -<<<<<<< HEAD -#: dogroups.c:215 -======= #: dogroups.c:276 ->>>>>>> master msgid "" "RHS of := is NULL during grouped assignment, but it's not possible to delete " "parts of a column." msgstr "" -<<<<<<< HEAD -#: dogroups.c:219 -======= #: dogroups.c:280 ->>>>>>> master #, c-format msgid "" "Supplied %d items to be assigned to group %d of size %d in column '%s'. The " @@ -1177,39 +977,23 @@ msgid "" "make this intent clear to readers of your code." msgstr "" -<<<<<<< HEAD -#: dogroups.c:230 -======= #: dogroups.c:291 ->>>>>>> master msgid "" "Internal error: Trying to add new column by reference but tl is full; " "setalloccol should have run first at R level before getting to this point in " "dogroups" msgstr "" -<<<<<<< HEAD -#: dogroups.c:245 -======= #: dogroups.c:312 ->>>>>>> master #, c-format msgid "Group %d column '%s': %s" msgstr "" -<<<<<<< HEAD -#: dogroups.c:252 -msgid "j doesn't evaluate to the same number of columns for each group" -msgstr "" - -#: dogroups.c:286 -======= #: dogroups.c:319 msgid "j doesn't evaluate to the same number of columns for each group" msgstr "" #: dogroups.c:353 ->>>>>>> master #, c-format msgid "" "Column %d of j's result for the first group is NULL. We rely on the column " @@ -1220,22 +1004,14 @@ msgid "" "integer() or numeric()." msgstr "" -<<<<<<< HEAD -#: dogroups.c:289 -======= #: dogroups.c:356 ->>>>>>> master msgid "" "j appears to be a named vector. The same names will likely be created over " "and over again for each group and slow things down. Try and pass a named " "list (which data.table optimizes) or an unnamed list() instead.\n" msgstr "" -<<<<<<< HEAD -#: dogroups.c:291 -======= #: dogroups.c:358 ->>>>>>> master #, c-format msgid "" "Column %d of j is a named vector (each item down the rows is named, " @@ -1243,11 +1019,7 @@ msgid "" "over and over for each group). They are ignored anyway.\n" msgstr "" -<<<<<<< HEAD -#: dogroups.c:299 -======= #: dogroups.c:366 ->>>>>>> master msgid "" "The result of j is a named list. It's very inefficient to create the same " "names over and over again for each group. When j=list(...), any names are " @@ -1256,29 +1028,17 @@ msgid "" "to :=). This message may be upgraded to warning in future.\n" msgstr "" -<<<<<<< HEAD -#: dogroups.c:311 -======= #: dogroups.c:378 ->>>>>>> master #, c-format msgid "dogroups: growing from %d to %d rows\n" msgstr "" -<<<<<<< HEAD -#: dogroups.c:312 -======= #: dogroups.c:379 ->>>>>>> master #, c-format msgid "dogroups: length(ans)[%d]!=ngrpcols[%d]+njval[%d]" msgstr "" -<<<<<<< HEAD -#: dogroups.c:330 -======= #: dogroups.c:397 ->>>>>>> master #, c-format msgid "" "Item %d of j's result for group %d is zero length. This will be filled with " @@ -1287,22 +1047,14 @@ msgid "" "buffer." msgstr "" -<<<<<<< HEAD -#: dogroups.c:337 -======= #: dogroups.c:404 ->>>>>>> master #, c-format msgid "" "Column %d of result for group %d is type '%s' but expecting type '%s'. " "Column types must be consistent for each group." msgstr "" -<<<<<<< HEAD -#: dogroups.c:339 -======= #: dogroups.c:406 ->>>>>>> master #, c-format msgid "" "Supplied %d items for column %d of group %d which has %d rows. The RHS " @@ -1311,57 +1063,33 @@ msgid "" "make this intent clear to readers of your code." msgstr "" -<<<<<<< HEAD -#: dogroups.c:354 -======= #: dogroups.c:427 ->>>>>>> master #, c-format msgid "Wrote less rows (%d) than allocated (%d).\n" msgstr "" -<<<<<<< HEAD -#: dogroups.c:364 -======= #: dogroups.c:449 ->>>>>>> master #, c-format msgid "Internal error: block 0 [%d] and block 1 [%d] have both run" msgstr "" -<<<<<<< HEAD -#: dogroups.c:366 -======= #: dogroups.c:451 ->>>>>>> master #, c-format msgid "" "\n" " %s took %.3fs for %d groups\n" msgstr "" -<<<<<<< HEAD -#: dogroups.c:368 -======= #: dogroups.c:453 ->>>>>>> master #, c-format msgid " eval(j) took %.3fs for %d calls\n" msgstr "" -<<<<<<< HEAD -#: dogroups.c:392 -msgid "growVector passed NULL" -msgstr "" - -#: dogroups.c:412 -======= #: dogroups.c:477 msgid "growVector passed NULL" msgstr "" #: dogroups.c:497 ->>>>>>> master #, c-format msgid "Internal error: growVector doesn't support type '%s'" msgstr "" @@ -1389,13 +1117,10 @@ msgstr "" msgid "Argument 'test' must be logical." msgstr "" -<<<<<<< HEAD -======= #: fifelse.c:9 msgid "S4 class objects (except nanotime) are not supported." msgstr "" ->>>>>>> master #: fifelse.c:28 #, c-format msgid "" @@ -1447,11 +1172,7 @@ msgstr "" msgid "'yes' and 'na' are both type factor but their levels are different." msgstr "" -<<<<<<< HEAD -#: fifelse.c:138 -======= #: fifelse.c:138 fifelse.c:336 ->>>>>>> master #, c-format msgid "Type %s is not supported." msgstr "" @@ -1951,68 +1672,40 @@ msgstr "" msgid "Internal error. Argument 'cols' to Cdt_na is type '%s' not 'integer'" msgstr "" -<<<<<<< HEAD -#: frank.c:14 frank.c:144 subset.c:258 -======= #: frank.c:14 frank.c:155 subset.c:276 ->>>>>>> master #, c-format msgid "Item %d of 'cols' is %d which is outside 1-based range [1,ncol(x)=%d]" msgstr "" -<<<<<<< HEAD -#: frank.c:24 frank.c:153 -======= #: frank.c:24 frank.c:164 ->>>>>>> master #, c-format msgid "" "Column %d of input list x is length %d, inconsistent with first column of " "that item which is length %d." msgstr "" -<<<<<<< HEAD -#: frank.c:63 frank.c:200 transpose.c:88 -======= #: frank.c:63 frank.c:211 transpose.c:88 ->>>>>>> master #, c-format msgid "Unsupported column type '%s'" msgstr "" -<<<<<<< HEAD -#: frank.c:80 -======= #: frank.c:82 ->>>>>>> master msgid "" "Internal error: invalid ties.method for frankv(), should have been caught " "before. please report to data.table issue tracker" msgstr "" -<<<<<<< HEAD -#: frank.c:128 -======= #: frank.c:139 ->>>>>>> master #, c-format msgid "Internal error: unknown ties value in frank: %d" msgstr "" -<<<<<<< HEAD -#: frank.c:139 -======= #: frank.c:150 ->>>>>>> master #, c-format msgid "Internal error. Argument 'x' to CanyNA is type '%s' not 'list'" msgstr "" -<<<<<<< HEAD -#: frank.c:140 -======= #: frank.c:151 ->>>>>>> master #, c-format msgid "Internal error. Argument 'cols' to CanyNA is type '%s' not 'integer'" msgstr "" @@ -3204,11 +2897,7 @@ msgid "" "caught before. please report to data.table issue tracker." msgstr "" -<<<<<<< HEAD -#: frollR.c:155 frollR.c:279 nafill.c:162 shift.c:21 -======= #: frollR.c:155 frollR.c:279 nafill.c:162 shift.c:19 ->>>>>>> master msgid "fill must be a vector of length 1" msgstr "" @@ -3541,41 +3230,25 @@ msgid "" "Column %d's length (%d) is not the same as column 1's length (%)" msgstr "" -<<<<<<< HEAD -#: fwriteR.c:235 -======= #: fwriteR.c:236 ->>>>>>> master #, c-format msgid "Column %d's type is '%s' - not yet implemented in fwrite." msgstr "" -<<<<<<< HEAD -#: fwriteR.c:260 -======= #: fwriteR.c:261 ->>>>>>> master msgid "" "No list columns are present. Setting sep2='' otherwise quote='auto' would " "quote fields containing sep2.\n" msgstr "" -<<<<<<< HEAD -#: fwriteR.c:264 -======= #: fwriteR.c:265 ->>>>>>> master #, c-format msgid "" "If quote='auto', fields will be quoted if the field contains either sep " "('%c') or sep2 ('%c') because column %d is a list column.\n" msgstr "" -<<<<<<< HEAD -#: fwriteR.c:268 -======= #: fwriteR.c:269 ->>>>>>> master #, c-format msgid "" "sep ('%c'), sep2 ('%c') and dec ('%c') must all be different. Column %d is a " @@ -4149,13 +3822,10 @@ msgid "" "caught before. Please report to data.table issue tracker." msgstr "" -<<<<<<< HEAD -======= #: nafill.c:182 msgid "nan_is_na must be TRUE or FALSE" msgstr "" ->>>>>>> master #: nafill.c:206 #, c-format msgid "%s: parallel processing of %d column(s) took %.3fs\n" @@ -4491,21 +4161,12 @@ msgstr "" msgid "" "Item %d of order (%d) is either NA, out of range [1,%d], or is duplicated. " "The new order must be a strict permutation of 1:n" -<<<<<<< HEAD -msgstr "" - -#: reorder.c:105 -msgid "dt passed to setcolorder has no names" -msgstr "" - -======= msgstr "" #: reorder.c:105 msgid "dt passed to setcolorder has no names" msgstr "" ->>>>>>> master #: reorder.c:107 #, c-format msgid "Internal error: dt passed to setcolorder has %d columns but %d names" @@ -4550,166 +4211,98 @@ msgstr "" msgid "Internal error: subsetVectorRaw length(ans)==%d n=%d" msgstr "" -<<<<<<< HEAD -#: subset.c:83 -======= #: subset.c:101 ->>>>>>> master #, c-format msgid "" "Internal error: column type '%s' not supported by data.table subset. All " "known types are supported so please report as bug." msgstr "" -<<<<<<< HEAD -#: subset.c:92 subset.c:116 -======= #: subset.c:110 subset.c:134 ->>>>>>> master #, c-format msgid "Internal error. 'idx' is type '%s' not 'integer'" msgstr "" -<<<<<<< HEAD -#: subset.c:117 -======= #: subset.c:135 ->>>>>>> master #, c-format msgid "" "Internal error. 'maxArg' is type '%s' and length %d, should be an integer " "singleton" msgstr "" -<<<<<<< HEAD -#: subset.c:118 -msgid "Internal error: allowOverMax must be TRUE/FALSE" -msgstr "" - -#: subset.c:120 -======= #: subset.c:136 msgid "Internal error: allowOverMax must be TRUE/FALSE" msgstr "" #: subset.c:138 ->>>>>>> master #, c-format msgid "Internal error. max is %d, must be >= 0." msgstr "" -<<<<<<< HEAD -#: subset.c:144 -======= #: subset.c:162 ->>>>>>> master #, c-format msgid "i[%d] is %d which is out of range [1,nrow=%d]" msgstr "" -<<<<<<< HEAD -#: subset.c:156 -======= #: subset.c:174 ->>>>>>> master #, c-format msgid "" "Item %d of i is %d and item %d is %d. Cannot mix positives and negatives." msgstr "" -<<<<<<< HEAD -#: subset.c:166 -======= #: subset.c:184 ->>>>>>> master #, c-format msgid "Item %d of i is %d and item %d is NA. Cannot mix negatives and NA." msgstr "" -<<<<<<< HEAD -#: subset.c:202 -======= #: subset.c:220 ->>>>>>> master #, c-format msgid "" "Item %d of i is %d but there are only %d rows. Ignoring this and %d more " "like it out of %d." msgstr "" -<<<<<<< HEAD -#: subset.c:204 -======= #: subset.c:222 ->>>>>>> master #, c-format msgid "" "Item %d of i is %d which removes that item but that has occurred before. " "Ignoring this dup and %d other dups." msgstr "" -<<<<<<< HEAD -#: subset.c:218 -======= #: subset.c:236 ->>>>>>> master #, c-format msgid "Column %d is NULL; malformed data.table." msgstr "" -<<<<<<< HEAD -#: subset.c:221 -======= #: subset.c:239 ->>>>>>> master #, c-format msgid "Column %d ['%s'] is a data.frame or data.table; malformed data.table." msgstr "" -<<<<<<< HEAD -#: subset.c:226 -======= #: subset.c:244 ->>>>>>> master #, c-format msgid "" "Column %d ['%s'] is length %d but column 1 is length %d; malformed data." "table." msgstr "" -<<<<<<< HEAD -#: subset.c:242 -======= #: subset.c:260 ->>>>>>> master #, c-format msgid "Internal error. Argument 'x' to CsubsetDT is type '%s' not 'list'" msgstr "" -<<<<<<< HEAD -#: subset.c:255 -======= #: subset.c:273 ->>>>>>> master #, c-format msgid "Internal error. Argument 'cols' to Csubset is type '%s' not 'integer'" msgstr "" -<<<<<<< HEAD -#: subset.c:332 -======= #: subset.c:350 ->>>>>>> master msgid "" "Internal error: NULL can not be subset. It is invalid for a data.table to " "contain a NULL column." msgstr "" -<<<<<<< HEAD -#: subset.c:334 -======= #: subset.c:352 ->>>>>>> master msgid "" "Internal error: CsubsetVector is internal-use-only but has received " "negatives, zeros or out-of-range" diff --git a/po/zh_CN.po b/po/zh_CN.po index e6c5f7923a..57242f7044 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -2,13 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: data.table 1.12.5\n" "Report-Msgid-Bugs-To: \n" -<<<<<<< HEAD -"POT-Creation-Date: 2020-01-31 17:27+0800\n" -"PO-Revision-Date: 2019-11-18 00:26-04\n" -======= "POT-Creation-Date: 2020-10-17 13:11-0400\n" "PO-Revision-Date: 2020-10-18 20:39-0400\n" ->>>>>>> master "Last-Translator: Yuhang Chen \n" "Language-Team: Mandarin\n" "Language: Mandarin\n" @@ -472,20 +467,6 @@ msgstr " 因为一个键(key)列的更新,丢掉索引(index) '%s'\n" msgid "Shortening index '%s' to '%s' due to an update on a key column\n" msgstr "因为一个键(key)列的更新,缩短索引(index) '%s' 到 '%s'\n" -<<<<<<< HEAD -#: assign.c:683 -#, c-format -msgid "" -"Internal error memrecycle: sourceStart=%d sourceLen=%d length(source)=%d" -msgstr "内部错误 memrecycle: sourceStart=%d sourceLen=%d length(source)=%d" - -#: assign.c:685 -#, c-format -msgid "Internal error memrecycle: start=%d len=%d length(target)=%d" -msgstr "内部错误 memrecycle: start=%d len=%d length(target)=%d" - -#: assign.c:688 -======= #: assign.c:650 #, c-format msgid "" @@ -506,24 +487,15 @@ msgid "Internal error memrecycle: start=%d len=%d length(target)=%d" msgstr "memrecycle 内部错误:start=%d len=%d length(target)=%d" #: assign.c:693 ->>>>>>> master #, c-format msgid "Internal error: recycle length error not caught earlier. slen=%d len=%d" msgstr "内部错误: 早期未被发现的循环长度错误 slen=%d len=%d" -<<<<<<< HEAD -#: assign.c:692 -msgid "Internal error: memrecycle has received NULL colname" -msgstr "内部错误: memrecycle 接受到的列名为 NULL " - -#: assign.c:718 -======= #: assign.c:697 msgid "Internal error: memrecycle has received NULL colname" msgstr "内部错误: memrecycle 接受到的列名为 NULL " #: assign.c:706 ->>>>>>> master #, c-format msgid "" "Cannot assign 'factor' to '%s'. Factors can only be assigned to factor, " @@ -531,22 +503,14 @@ msgid "" msgstr "" "不能将 'factor' 赋值为 '%s' 。因子类型只能赋值为因子,字符或者列表其中的列" -<<<<<<< HEAD -#: assign.c:732 -======= #: assign.c:720 ->>>>>>> master #, c-format msgid "" "Assigning factor numbers to column %d named '%s'. But %d is outside the " "level range [1,%d]" msgstr "将列 %d 名称为 '%s' 赋值为因子。但是 %d 在层次范围[1,%d]之外" -<<<<<<< HEAD -#: assign.c:740 -======= #: assign.c:728 ->>>>>>> master #, c-format msgid "" "Assigning factor numbers to column %d named '%s'. But %f is outside the " @@ -555,11 +519,7 @@ msgstr "" "将列 %d 名称为 '%s' 赋值为因子。但是 %f 在层次范围[1,%d]之外,或者不是一个完" "整的数字" -<<<<<<< HEAD -#: assign.c:746 -======= #: assign.c:734 ->>>>>>> master #, c-format msgid "" "Cannot assign '%s' to 'factor'. Factor columns can be assigned factor, " @@ -567,48 +527,28 @@ msgid "" msgstr "" "不能将 'factor' 赋值为 '%s' 。 因子列可被赋值为因子,字符 ,NA 或者 层次数值" -<<<<<<< HEAD -#: assign.c:767 -======= #: assign.c:755 ->>>>>>> master msgid "" "Internal error: levels of target are either not unique or have truelength<0" msgstr "内部错误: 目标的层次不是唯一或者长度<0" -<<<<<<< HEAD -#: assign.c:806 -======= #: assign.c:794 ->>>>>>> master #, c-format msgid "Unable to allocate working memory of %d bytes to combine factor levels" msgstr "不能分配 %d 字节的工作内存来组合因子层次" -<<<<<<< HEAD -#: assign.c:813 -msgid "Internal error: extra level check sum failed" -msgstr "内部错误: 额外的层次校验和失败" - -#: assign.c:832 -======= #: assign.c:801 msgid "Internal error: extra level check sum failed" msgstr "内部错误: 额外的层次校验和失败" #: assign.c:820 ->>>>>>> master #, c-format msgid "" "Coercing 'character' RHS to '%s' to match the type of the target column " "(column %d named '%s')." msgstr "将'character' RHS 强制转换成 '%s' 来匹配目标列的类型(列 %d 名称 '%s')" -<<<<<<< HEAD -#: assign.c:838 -======= #: assign.c:826 ->>>>>>> master #, c-format msgid "" "Cannot coerce 'list' RHS to 'integer64' to match the type of the target " @@ -616,68 +556,40 @@ msgid "" msgstr "" "不能将'list' RHS 强制转换成 'integer64' 来匹配目标列的类型(列 %d 名称 '%s')" -<<<<<<< HEAD -#: assign.c:843 -======= #: assign.c:831 ->>>>>>> master #, c-format msgid "" "Coercing 'list' RHS to '%s' to match the type of the target column (column " "%d named '%s')." msgstr "将'list' RHS 强制转换成 '%s' 来匹配目标列的类型(列 %d 名称 '%s')" -<<<<<<< HEAD -#: assign.c:849 -======= #: assign.c:837 ->>>>>>> master #, c-format msgid "Zero-copy coerce when assigning '%s' to '%s' column %d named '%s'.\n" msgstr "当 '%s' 赋值成 '%s' 列 %d 名称 '%s',进行Zero-copy强制转换。\n" -<<<<<<< HEAD -#: assign.c:944 -======= #: assign.c:932 ->>>>>>> master #, c-format msgid "type '%s' cannot be coerced to '%s'" msgstr "类型 '%s' 不能强制转换成 '%s'" -<<<<<<< HEAD -#: assign.c:1064 -======= #: assign.c:1052 ->>>>>>> master msgid "" "To assign integer64 to a character column, please use as.character() for " "clarity." msgstr "请使用 as.character() 把 integer64 类型的数值赋值给字符列" -<<<<<<< HEAD -#: assign.c:1076 -======= #: assign.c:1064 ->>>>>>> master #, c-format msgid "Unsupported column type in assign.c:memrecycle '%s'" msgstr "assign.c:memrecycle '%s' 里有不支持的列的类型" -<<<<<<< HEAD -#: assign.c:1123 -======= #: assign.c:1111 ->>>>>>> master #, c-format msgid "Internal error: writeNA passed a vector of type '%s'" msgstr "内部错误:writeNA 函数读取到了一个类型是'%s'的向量" -<<<<<<< HEAD -#: assign.c:1154 -======= #: assign.c:1142 ->>>>>>> master #, c-format msgid "" "Internal error: savetl_init checks failed (%d %d %p %p). please report to " @@ -686,20 +598,12 @@ msgstr "" "内部错误:savetl_init的校验失败 (%d %d %p %p),请将此问题汇报给data.table 问" "题追踪器。" -<<<<<<< HEAD -#: assign.c:1162 -======= #: assign.c:1150 ->>>>>>> master #, c-format msgid "Failed to allocate initial %d items in savetl_init" msgstr "不能为 savetl_init 最开始的 %d 个项分配空间" -<<<<<<< HEAD -#: assign.c:1171 -======= #: assign.c:1159 ->>>>>>> master #, c-format msgid "" "Internal error: reached maximum %d items for savetl. Please report to data." @@ -708,39 +612,16 @@ msgstr "" "内部错误:已经达到了 savetl 能处理的子项上限 %d。请将此问题汇报给data.table问" "题追踪器。" -<<<<<<< HEAD -#: assign.c:1178 -======= #: assign.c:1166 ->>>>>>> master #, c-format msgid "Failed to realloc saveds to %d items in savetl" msgstr "不能给 savetl 里的 %d 个项重新分配 saveds" -<<<<<<< HEAD -#: assign.c:1184 -======= #: assign.c:1172 ->>>>>>> master #, c-format msgid "Failed to realloc savedtl to %d items in savetl" msgstr "不能给savetl里的 %d 个项提供 savetl" -<<<<<<< HEAD -#: assign.c:1207 -msgid "x must be a character vector" -msgstr "x 必须是一个字符向量" - -#: assign.c:1208 -msgid "'which' must be an integer vector" -msgstr "'which' 必须是一个整数向量" - -#: assign.c:1209 -msgid "'new' must be a character vector" -msgstr "'new' 必须是一个字符向量" - -#: assign.c:1210 -======= #: assign.c:1195 msgid "x must be a character vector" msgstr "x 必须是一个字符向量" @@ -754,16 +635,11 @@ msgid "'new' must be a character vector" msgstr "'new' 必须是一个字符向量" #: assign.c:1198 ->>>>>>> master #, c-format msgid "'new' is length %d. Should be the same as length of 'which' (%d)" msgstr "'new' 的长度是 %d。 它的长度必须和'which' (%d)的长度一致。" -<<<<<<< HEAD -#: assign.c:1213 -======= #: assign.c:1201 ->>>>>>> master #, c-format msgid "" "Item %d of 'which' is %d which is outside range of the length %d character " @@ -1070,33 +946,6 @@ msgstr "coalesce 复制了第一项 (inplace=FALSE)\n" msgid "Unsupported type: %s" msgstr "不支持的类型:%s" -<<<<<<< HEAD -#: dogroups.c:15 -msgid "Internal error: order not integer vector" -msgstr "内部错误:order 不是整型向量" - -#: dogroups.c:16 -msgid "Internal error: starts not integer" -msgstr "内部错误:starts 不是整型" - -#: dogroups.c:17 -msgid "Internal error: lens not integer" -msgstr "内部错误:lens 不是整型" - -#: dogroups.c:19 -msgid "Internal error: jiscols not NULL but o__ has length" -msgstr "内部错误:jiscols 非 NULL,但 o__ 长度不为0" - -#: dogroups.c:20 -msgid "Internal error: xjiscols not NULL but o__ has length" -msgstr "内部错误:jiscols 非 NULL,但 o__ 长度不为0" - -#: dogroups.c:21 -msgid "'env' should be an environment" -msgstr "'env' 应该是一个环境" - -#: dogroups.c:40 -======= #: dogroups.c:69 msgid "Internal error: order not integer vector" msgstr "内部错误:order 不是整型向量" @@ -1122,7 +971,6 @@ msgid "'env' should be an environment" msgstr "'env' 应该是一个环境" #: dogroups.c:94 ->>>>>>> master #, c-format msgid "" "Internal error: unsupported size-0 type '%s' in column %d of 'by' should " @@ -1130,28 +978,16 @@ msgid "" msgstr "" "内部错误:未能被提前捕获到 'by' 中第 %2$d 列不支持类型 '%1$s' 且size-0 的问题" -<<<<<<< HEAD -#: dogroups.c:44 -======= #: dogroups.c:99 ->>>>>>> master #, c-format msgid "!length(bynames)[%d]==length(groups)[%d]==length(grpcols)[%d]" msgstr "!length(bynames)[%d]==length(groups)[%d]==length(grpcols)[%d]" -<<<<<<< HEAD -#: dogroups.c:63 -msgid "row.names attribute of .SD not found" -msgstr ".SD 的行名属性不存在" - -#: dogroups.c:65 -======= #: dogroups.c:121 msgid "row.names attribute of .SD not found" msgstr ".SD 的行名属性不存在" #: dogroups.c:123 ->>>>>>> master #, c-format msgid "" "row.names of .SD isn't integer length 2 with NA as first item; i.e., ." @@ -1160,32 +996,17 @@ msgstr "" ".SD 的行名不是长度为2且首个元素为 NA 的整型;例如:set_row_names(). [%s %d " "%d]" -<<<<<<< HEAD -#: dogroups.c:70 -msgid "length(names)!=length(SD)" -msgstr "length(names)!=length(SD)" - -#: dogroups.c:74 -======= #: dogroups.c:128 msgid "length(names)!=length(SD)" msgstr "length(names)!=length(SD)" #: dogroups.c:134 ->>>>>>> master #, c-format msgid "" "Internal error: size-0 type %d in .SD column %d should have been caught " "earlier" msgstr "内部错误:未能提前捕获到 .SD 中第 %2$d 列类型 %1$d size-0 的问题" -<<<<<<< HEAD -#: dogroups.c:84 -msgid "length(xknames)!=length(xSD)" -msgstr "length(xknames)!=length(xSD)" - -#: dogroups.c:88 -======= #: dogroups.c:136 #, c-format msgid "Internal error: SDall %d length = %d != %d" @@ -1196,44 +1017,27 @@ msgid "length(xknames)!=length(xSD)" msgstr "length(xknames)!=length(xSD)" #: dogroups.c:148 ->>>>>>> master #, c-format msgid "" "Internal error: type %d in .xSD column %d should have been caught by now" msgstr "内部错误:当前未能捕获到 .xSD 中第 %2$d 列类型 %1$d 的问题" -<<<<<<< HEAD -#: dogroups.c:92 -======= #: dogroups.c:152 ->>>>>>> master #, c-format msgid "length(iSD)[%d] != length(jiscols)[%d]" msgstr "length(iSD)[%d] != length(jiscols)[%d]" -<<<<<<< HEAD -#: dogroups.c:93 -======= #: dogroups.c:153 ->>>>>>> master #, c-format msgid "length(xSD)[%d] != length(xjiscols)[%d]" msgstr "length(xSD)[%d] != length(xjiscols)[%d]" -<<<<<<< HEAD -#: dogroups.c:198 -======= #: dogroups.c:259 ->>>>>>> master #, c-format msgid "j evaluates to type '%s'. Must evaluate to atomic vector or list." msgstr "j的运算结果为'%s'类型。其运算结果必须为原子向量或列表。" -<<<<<<< HEAD -#: dogroups.c:206 -======= #: dogroups.c:267 ->>>>>>> master msgid "" "All items in j=list(...) should be atomic vectors or lists. If you are " "trying something like j=list(.SD,newcol=mean(colA)) then use := by group " @@ -1243,21 +1047,13 @@ msgstr "" "newcol=mean(colA)) 之类的操作请使用 := by group 代替(更快速),或事后使用 " "cbind()、merge()" -<<<<<<< HEAD -#: dogroups.c:215 -======= #: dogroups.c:276 ->>>>>>> master msgid "" "RHS of := is NULL during grouped assignment, but it's not possible to delete " "parts of a column." msgstr "用 := 分组时 RHS 为 NULL但無法刪除部分列" -<<<<<<< HEAD -#: dogroups.c:219 -======= #: dogroups.c:280 ->>>>>>> master #, c-format msgid "" "Supplied %d items to be assigned to group %d of size %d in column '%s'. The " @@ -1269,11 +1065,7 @@ msgstr "" "须是 1(可以是单个值) 或完全符合 LHS 的长度如果您想回收(recycle) RHS,请使用 " "rep() 向你的代码读者明确表达你的意图" -<<<<<<< HEAD -#: dogroups.c:230 -======= #: dogroups.c:291 ->>>>>>> master msgid "" "Internal error: Trying to add new column by reference but tl is full; " "setalloccol should have run first at R level before getting to this point in " @@ -1282,28 +1074,16 @@ msgstr "" "内部错误 : 尝试依照引用增加新列但 tl 已满在进入 dogroups 之前,setalloccol 应" "该先在 R 运行" -<<<<<<< HEAD -#: dogroups.c:245 -======= #: dogroups.c:312 ->>>>>>> master #, c-format msgid "Group %d column '%s': %s" msgstr "列 '%2$s' 第 %1$d 组 : %3$s" -<<<<<<< HEAD -#: dogroups.c:252 -msgid "j doesn't evaluate to the same number of columns for each group" -msgstr "j 估算出的每组的列数不同" - -#: dogroups.c:286 -======= #: dogroups.c:319 msgid "j doesn't evaluate to the same number of columns for each group" msgstr "j 估算出的每组的列数不同" #: dogroups.c:353 ->>>>>>> master #, c-format msgid "" "Column %d of j's result for the first group is NULL. We rely on the column " @@ -1317,11 +1097,7 @@ msgstr "" "(需要一致性)空 (NULL) 列可以出现在后面的组(适当的以 NA 取代并回收)但不能是第 " "1 组请输入空向量代替,例如 integer() 或 numeric()" -<<<<<<< HEAD -#: dogroups.c:289 -======= #: dogroups.c:356 ->>>>>>> master msgid "" "j appears to be a named vector. The same names will likely be created over " "and over again for each group and slow things down. Try and pass a named " @@ -1330,11 +1106,7 @@ msgstr "" "j 是名称向量,这可能使相同的名称不停重复创建导致速度变慢请尝试输入名称列表(较" "适合 data.table)或是非名称列表代替\n" -<<<<<<< HEAD -#: dogroups.c:291 -======= #: dogroups.c:358 ->>>>>>> master #, c-format msgid "" "Column %d of j is a named vector (each item down the rows is named, " @@ -1344,11 +1116,7 @@ msgstr "" "j 的第 %d 列是名称向量(整行的项都是名称)为了效率请移除这些名称(避免在每组重复" "创建这些名称)总之他们被忽略了\n" -<<<<<<< HEAD -#: dogroups.c:299 -======= #: dogroups.c:366 ->>>>>>> master msgid "" "The result of j is a named list. It's very inefficient to create the same " "names over and over again for each group. When j=list(...), any names are " @@ -1360,29 +1128,17 @@ msgstr "" "j=list(...) 时侦测到的所有名称会被移出,待分组完成后再放回来可以使用 " "j=transform() 避免这种加速此讯息可能会在未来升级为警告\n" -<<<<<<< HEAD -#: dogroups.c:311 -======= #: dogroups.c:378 ->>>>>>> master #, c-format msgid "dogroups: growing from %d to %d rows\n" msgstr "dogroups: 从 %d 列增加至 %d 列\n" -<<<<<<< HEAD -#: dogroups.c:312 -======= #: dogroups.c:379 ->>>>>>> master #, c-format msgid "dogroups: length(ans)[%d]!=ngrpcols[%d]+njval[%d]" msgstr "dogroups: length(ans)[%d]!=ngrpcols[%d]+njval[%d]" -<<<<<<< HEAD -#: dogroups.c:330 -======= #: dogroups.c:397 ->>>>>>> master #, c-format msgid "" "Item %d of j's result for group %d is zero length. This will be filled with " @@ -1393,11 +1149,7 @@ msgstr "" "j 的结果第 %d 项在第 %d 组中为零长度(zero length)将使用 %d 个 NA 填入以符合结" "果中最长列的长度后面的分组也有相同问题,但只回报第一组以避免过多警告" -<<<<<<< HEAD -#: dogroups.c:337 -======= #: dogroups.c:404 ->>>>>>> master #, c-format msgid "" "Column %d of result for group %d is type '%s' but expecting type '%s'. " @@ -1406,11 +1158,7 @@ msgstr "" "结果的第 %d 列在第 %d 组中是 '%s' 类别而非预期的 '%s' 类别所有组的列类别必须" "一致" -<<<<<<< HEAD -#: dogroups.c:339 -======= #: dogroups.c:406 ->>>>>>> master #, c-format msgid "" "Supplied %d items for column %d of group %d which has %d rows. The RHS " @@ -1422,29 +1170,17 @@ msgstr "" "單個值) 或與 LHS 長度完全匹配如果您想回收(recycle) RHS,请使用 rep() 向你的代" "码读者明确表达你的意图" -<<<<<<< HEAD -#: dogroups.c:354 -======= #: dogroups.c:427 ->>>>>>> master #, c-format msgid "Wrote less rows (%d) than allocated (%d).\n" msgstr "写入的行 (%d) 少于分配的 (%d)\n" -<<<<<<< HEAD -#: dogroups.c:364 -======= #: dogroups.c:449 ->>>>>>> master #, c-format msgid "Internal error: block 0 [%d] and block 1 [%d] have both run" msgstr "内部错误 : 区块 0 [%d] 与区块 1 [%d] 都运行了" -<<<<<<< HEAD -#: dogroups.c:366 -======= #: dogroups.c:451 ->>>>>>> master #, c-format msgid "" "\n" @@ -1453,25 +1189,11 @@ msgstr "" "\n" " %s 花了 %.3fs 在 %d 个组\n" -<<<<<<< HEAD -#: dogroups.c:368 -======= #: dogroups.c:453 ->>>>>>> master #, c-format msgid " eval(j) took %.3fs for %d calls\n" msgstr " eval(j)取%.3fs给 %d 调用\n" -<<<<<<< HEAD -#: dogroups.c:392 -msgid "growVector passed NULL" -msgstr "growVector通过NULL" - -#: dogroups.c:412 -#, c-format -msgid "Internal error: growVector doesn't support type '%s'" -msgstr "内部错误:growVector 不支持的列类型 '%s'" -======= #: dogroups.c:477 msgid "growVector passed NULL" msgstr "growVector通过NULL" @@ -1480,7 +1202,6 @@ msgstr "growVector通过NULL" #, c-format msgid "Internal error: growVector doesn't support type '%s'" msgstr "内部错误:growVector 不支持 '%s' 类型" ->>>>>>> master #: fastmean.c:39 msgid "narm should be TRUE or FALSE" @@ -1505,13 +1226,10 @@ msgstr "fcast val不支持的列类型:'%s'" msgid "Argument 'test' must be logical." msgstr "参数'test'必须是逻辑类型。" -<<<<<<< HEAD -======= #: fifelse.c:9 msgid "S4 class objects (except nanotime) are not supported." msgstr "不支持的S4 类对象(nanotime 除外)。" ->>>>>>> master #: fifelse.c:28 #, c-format msgid "" @@ -1563,11 +1281,7 @@ msgstr "'yes'的类型与'na'不同。请确认两个参数是同一类型。" msgid "'yes' and 'na' are both type factor but their levels are different." msgstr "'yes'和'na'都是因子类型但他们的因子水平不同" -<<<<<<< HEAD -#: fifelse.c:138 -======= #: fifelse.c:138 fifelse.c:336 ->>>>>>> master #, c-format msgid "Type %s is not supported." msgstr "不支持类型 %s" @@ -2087,40 +1801,24 @@ msgstr "内部错误:参数 'x' 关于 Cdt_na 是 '%s' 类型而不是 'list' msgid "Internal error. Argument 'cols' to Cdt_na is type '%s' not 'integer'" msgstr "内部错误:参数 'cols' 关于 Cdt_na 是 '%s' 类型而不是 'integer' 类型" -<<<<<<< HEAD -#: frank.c:14 frank.c:144 subset.c:258 -======= #: frank.c:14 frank.c:155 subset.c:276 ->>>>>>> master #, c-format msgid "Item %d of 'cols' is %d which is outside 1-based range [1,ncol(x)=%d]" msgstr "'cols' 的 %d 项为 %d ,超出1的范围 [1,ncol(x)=%d]" -<<<<<<< HEAD -#: frank.c:24 frank.c:153 -======= #: frank.c:24 frank.c:164 ->>>>>>> master #, c-format msgid "" "Column %d of input list x is length %d, inconsistent with first column of " "that item which is length %d." msgstr "输入列表x的列 %d 长度为 %d,不同于第一列的该项长度为 %d" -<<<<<<< HEAD -#: frank.c:63 frank.c:200 transpose.c:88 -======= #: frank.c:63 frank.c:211 transpose.c:88 ->>>>>>> master #, c-format msgid "Unsupported column type '%s'" msgstr "不支持的列类型 '%s'" -<<<<<<< HEAD -#: frank.c:80 -======= #: frank.c:82 ->>>>>>> master msgid "" "Internal error: invalid ties.method for frankv(), should have been caught " "before. please report to data.table issue tracker" @@ -2128,29 +1826,17 @@ msgstr "" "内部错误:对于 frankv()的无效值ties.method,应在之前被捕获。请报告给 data." "table issue tracker" -<<<<<<< HEAD -#: frank.c:128 -======= #: frank.c:139 ->>>>>>> master #, c-format msgid "Internal error: unknown ties value in frank: %d" msgstr "内部错误:frank中有未知的ties值 %d" -<<<<<<< HEAD -#: frank.c:139 -======= #: frank.c:150 ->>>>>>> master #, c-format msgid "Internal error. Argument 'x' to CanyNA is type '%s' not 'list'" msgstr "内部错误:参数 'x' 关于 CanyNA 是 '%s' 类型而不是'list'类型" -<<<<<<< HEAD -#: frank.c:140 -======= #: frank.c:151 ->>>>>>> master #, c-format msgid "Internal error. Argument 'cols' to CanyNA is type '%s' not 'integer'" msgstr "内部错误:参数 'cols' 关于 CanyNA 是 '%s' 类型而不是'integer'类型" @@ -3424,11 +3110,7 @@ msgstr "" "内部错误: 在 rolling 函数中无效的 fun 参数, 理应在更早阶段排除请向data.table " "issue tracker报告" -<<<<<<< HEAD -#: frollR.c:155 frollR.c:279 nafill.c:162 shift.c:21 -======= #: frollR.c:155 frollR.c:279 nafill.c:162 shift.c:19 ->>>>>>> master msgid "fill must be a vector of length 1" msgstr "fill 必须是长度为1的向量" @@ -3785,20 +3467,12 @@ msgid "" "Column %d's length (%d) is not the same as column 1's length (%)" msgstr "列%d的长度(%d)和列1的长度(%)不一致" -<<<<<<< HEAD -#: fwriteR.c:235 -======= #: fwriteR.c:236 ->>>>>>> master #, c-format msgid "Column %d's type is '%s' - not yet implemented in fwrite." msgstr "列%d的类型是'%s' - 尚未在fwrite中实施" -<<<<<<< HEAD -#: fwriteR.c:260 -======= #: fwriteR.c:261 ->>>>>>> master msgid "" "No list columns are present. Setting sep2='' otherwise quote='auto' would " "quote fields containing sep2.\n" @@ -3806,11 +3480,7 @@ msgstr "" "当前没有列表页. 设置sep2=''否则quote='auto'会自动为所有包含sep2的字段加上引" "号.\n" -<<<<<<< HEAD -#: fwriteR.c:264 -======= #: fwriteR.c:265 ->>>>>>> master #, c-format msgid "" "If quote='auto', fields will be quoted if the field contains either sep " @@ -3820,11 +3490,7 @@ msgstr "" "that host lists),所有包含sep('%1$c') 或 sep2 ('%2$c')的字段将会被自动加上引" "号。\n" -<<<<<<< HEAD -#: fwriteR.c:268 -======= #: fwriteR.c:269 ->>>>>>> master #, c-format msgid "" "sep ('%c'), sep2 ('%c') and dec ('%c') must all be different. Column %d is a " @@ -4460,13 +4126,10 @@ msgstr "" "内部错误:函数 nafillR 中有无效类型的参数, 该错误理应已被捕获,请向data.table" "的issue通道报告" -<<<<<<< HEAD -======= #: nafill.c:182 msgid "nan_is_na must be TRUE or FALSE" msgstr "nan_is_na 必须是 TRUE 或者 FALSE" ->>>>>>> master #: nafill.c:206 #, c-format msgid "%s: parallel processing of %d column(s) took %.3fs\n" @@ -4844,11 +4507,8 @@ msgid "" "Item %d of order (%d) is either NA, out of range [1,%d], or is duplicated. " "The new order must be a strict permutation of 1:n" msgstr "" -<<<<<<< HEAD -======= "排序(%2$d)的 %1$d 项为 NA,超出范围 [1,%3$d],或与其他项重复。新的排序必须" "为 1:n 的排列" ->>>>>>> master #: reorder.c:105 msgid "dt passed to setcolorder has no names" @@ -4901,11 +4561,7 @@ msgstr "dt_win_snprintf 测试 %d 失败了: %s" msgid "Internal error: subsetVectorRaw length(ans)==%d n=%d" msgstr "内部错误: subsetVectorRaw ans length(ans)==%d n=%d" -<<<<<<< HEAD -#: subset.c:83 -======= #: subset.c:101 ->>>>>>> master #, c-format msgid "" "Internal error: column type '%s' not supported by data.table subset. All " @@ -4914,76 +4570,44 @@ msgstr "" "内部错误:data.table 子集不支持列类型 '%s' 。已知所有类型均被支持,因此请提交" "此BUG。" -<<<<<<< HEAD -#: subset.c:92 subset.c:116 -======= #: subset.c:110 subset.c:134 ->>>>>>> master #, c-format msgid "Internal error. 'idx' is type '%s' not 'integer'" msgstr "内部错误:'idx' 是 '%s' 类型,而非 '整数'" -<<<<<<< HEAD -#: subset.c:117 -======= #: subset.c:135 ->>>>>>> master #, c-format msgid "" "Internal error. 'maxArg' is type '%s' and length %d, should be an integer " "singleton" msgstr "内部错误:'maxArg' 是 '%s' 类型,长度为 %d ,应该是单一整数" -<<<<<<< HEAD -#: subset.c:118 -msgid "Internal error: allowOverMax must be TRUE/FALSE" -msgstr "内部错误:allowOverMax 必须是 TRUE 或 FALSE" - -#: subset.c:120 -======= #: subset.c:136 msgid "Internal error: allowOverMax must be TRUE/FALSE" msgstr "内部错误:allowOverMax 必须是 TRUE 或 FALSE" #: subset.c:138 ->>>>>>> master #, c-format msgid "Internal error. max is %d, must be >= 0." msgstr "内部错误。最大值是 %d ,且必须 >= 0。" -<<<<<<< HEAD -#: subset.c:144 -======= #: subset.c:162 ->>>>>>> master #, c-format msgid "i[%d] is %d which is out of range [1,nrow=%d]" msgstr "i[%d] 是 %d ,超出 [1,nrow=%d] 的范围" -<<<<<<< HEAD -#: subset.c:156 -======= #: subset.c:174 ->>>>>>> master #, c-format msgid "" "Item %d of i is %d and item %d is %d. Cannot mix positives and negatives." msgstr "i 的第 %d 项是 %d ,第 %d 项是 %d 。正负不能混用。" -<<<<<<< HEAD -#: subset.c:166 -======= #: subset.c:184 ->>>>>>> master #, c-format msgid "Item %d of i is %d and item %d is NA. Cannot mix negatives and NA." msgstr "i 的第 %d 项是 %d ,第 %d 项是 NA 。负值和 NA 不能混用。" -<<<<<<< HEAD -#: subset.c:202 -======= #: subset.c:220 ->>>>>>> master #, c-format msgid "" "Item %d of i is %d but there are only %d rows. Ignoring this and %d more " @@ -4991,11 +4615,7 @@ msgid "" msgstr "" "i 的第 %d 项是 %d ,但只有 %d 行。忽略这项以及其他相似的 %d 项(共 %d 项)。" -<<<<<<< HEAD -#: subset.c:204 -======= #: subset.c:222 ->>>>>>> master #, c-format msgid "" "Item %d of i is %d which removes that item but that has occurred before. " @@ -5004,68 +4624,40 @@ msgstr "" "i 的第 %d 项是 %d ,它删除了这项但此操作之前发生过。忽略该重复以及其他 %d 个" "重复。" -<<<<<<< HEAD -#: subset.c:218 -======= #: subset.c:236 ->>>>>>> master #, c-format msgid "Column %d is NULL; malformed data.table." msgstr "%d 列为空(NULL);data.table 格式错误。" -<<<<<<< HEAD -#: subset.c:221 -======= #: subset.c:239 ->>>>>>> master #, c-format msgid "Column %d ['%s'] is a data.frame or data.table; malformed data.table." msgstr "%d ['%s'] 列是 data.frame 或 data.table; data.table 格式错误。" -<<<<<<< HEAD -#: subset.c:226 -======= #: subset.c:244 ->>>>>>> master #, c-format msgid "" "Column %d ['%s'] is length %d but column 1 is length %d; malformed data." "table." msgstr "%d ['%s'] 长度为 %d ,而列 1 的长度为 %d ;data.table 格式错误。" -<<<<<<< HEAD -#: subset.c:242 -======= #: subset.c:260 ->>>>>>> master #, c-format msgid "Internal error. Argument 'x' to CsubsetDT is type '%s' not 'list'" msgstr "内部错误:CsubsetDT 的参数 'x' 是 '%s' 类型而非列表" -<<<<<<< HEAD -#: subset.c:255 -======= #: subset.c:273 ->>>>>>> master #, c-format msgid "Internal error. Argument 'cols' to Csubset is type '%s' not 'integer'" msgstr "内部错误:CsubsetDT 的参数 'cols' 是 '%s' 类型而非整数" -<<<<<<< HEAD -#: subset.c:332 -======= #: subset.c:350 ->>>>>>> master msgid "" "Internal error: NULL can not be subset. It is invalid for a data.table to " "contain a NULL column." msgstr "内部错误:空集(NULL)不能作为子集。data.table 包含空列是无效的。" -<<<<<<< HEAD -#: subset.c:334 -======= #: subset.c:352 ->>>>>>> master msgid "" "Internal error: CsubsetVector is internal-use-only but has received " "negatives, zeros or out-of-range" From 2edd6cdea09c60e0ea4e71fbe82d54691429cf86 Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Sat, 8 May 2021 20:24:58 -0700 Subject: [PATCH 26/28] use HEAD version of .mo --- inst/po/en@quot/LC_MESSAGES/R-data.table.mo | Bin 102128 -> 91028 bytes inst/po/en@quot/LC_MESSAGES/data.table.mo | Bin 139274 -> 143608 bytes inst/po/zh_CN/LC_MESSAGES/R-data.table.mo | Bin 100126 -> 89247 bytes inst/po/zh_CN/LC_MESSAGES/data.table.mo | Bin 138206 -> 142657 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/inst/po/en@quot/LC_MESSAGES/R-data.table.mo b/inst/po/en@quot/LC_MESSAGES/R-data.table.mo index 033b61bd71a63c6a61ded69e4ec0a22c9b21bc28..95fcad832b98620b8aeff0f526f36f8b0a2704f6 100644 GIT binary patch delta 16217 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 delta 20264 zcmd_xXIK?i+vxF`4Op-%HY{whVnOUEBG?=D61$>+U=Wm|V%uu$T~V?3USdJBHEQg} z*rJIo)|gl@YBVv%8h!uwtVIs5&v`$cbDb||u4nmM_gZV(Dl-G*d3`s_)WcaExAVHr zHx0vZb1@7*>{7@uf?N$_41tY!WPQUZkJGVw12SwqS{R1x(-Xb0H*QA4a1H} zSR5ClH}1nqcoVy$dx+sMCXF^oujhLf;MD|LXMu`jXN+Ay+U7`DNIC>MJWtKskH ziQZHW#6Xl2Zox8m9_!&t9Dvo^s`e||ItVEEnu5ys4D+E^J9VYiFc)zs7RJGN7N;TS zG`h4mj0(5`eep*ug|-gLvM9$7!Mr#YeQ+Mi@xF18ksYpS|H0bC-W^qW50ncVi*m<1 zQ7-5gq;rfvu_gw0Qg<{I7ZK0Ju2`|NVbs8hC_QpO$9GW9>&X9^%GA;J#)edk$NYE- zrE70vX?%lK(5s7Ke2eW+#<(zNV+tAmco6GiAil*+Qr^ul@?a2pU^^_w`HcuNy(pN4 z%nRdploQushR6ZiqD-=m=#L4Q54WKWk6?K`jxtA{VG(?dbf)3a!!Sl;Buf25T#C*T4Yc zE+}(k9#+R=nB*Yynv9HT98hQY)+ z!`13(gF(cD&H7>w-ypN2I(KU{T7#_f)SdvP)&|s9IOh8{;iE<;~qs)oSjs&%w z8e&rl614|WF2s$?mkS6$8M{7M8pmlj>iY9omhu-UtD(pcbpuVX4Dlds3d;W9U^{f& zBf|nPY7SM-!`{SyqI6;VVJhB+jfrz4sUGNnDa5OB4%Qh?ui#mf)zXip&;X}nXZ#+S zE=HM=>K!o?O_TAzM&>*f*GH+b+BDiQ3K4rTG$+v?zhLrwM6T8NVyu3!V120{r=FO@ zQF>}Odf`u41>ax@R``O8#9=6tIu(b=`hP{H69qBj4I?)m$AWkn<$?1QnHENw33NLy zzy?@&qB>y@bVIJIzjtDZR$>hZ< z(^VHWLg^w0$}%~IP4EwFhW;~DyRo>P_y7*T=$R~EhUzNLCVoAO{fVa#NV$`VB3_%z zvGGkZ{Vyj-ny-_LHYHwza)QU&8cWrI9oUWX{n!!< zEaN7yFG>&H#JX5|IlUw0C^zD@Lb)0l9iy~kr5d9hC}a0CcECKV45JZ-Yd2$K;%6vx zqQ+`v0@f!^MK64bLOV?$mv=dg(MrS&kcV1m4BY*mH|I(Qa%@{1K&H+pX%3r(h%E3)ma;Z&N*%h!ti1 zJIVB*;vUM5^}keiFdT!4*P&d<1C*{U&6ID3t#LG_=(xZRwQ71}b;{RZ9lVAWFyBtq z(?QsYco4Sa{KiQ#6EN>CzSD3ajz_Ol)e~z`?)VK#yTsk<w1Ye-k2k%#p>L~OlUbCP6mod3Xfm}#k)=E>1Mu~T$ocJC}yUGW7 zvEVF}3wfcf_Kljf@mQ1cW9W@3Wp6Nih?lo!Sg6r z{2D7_i6iRDTcaFcGRlRXzANg%J*R+{*L`I?1Z|Lvlu|^byBtKjxxz+>-YfHA^rn>vEsK36L!Z&_y*;| z9Q97A*Y7-(1NQrlHzBUT@|g3qdM?z)w#3U(CfzfXW!vzK8uJC%j`$`vK;N^5F&qaY z)5>^)&2jBHRsTD7m-S!ey!x4K21=K_!$(;Cd-d`uenIUJf^vbgv}Z7gIP*pI@@k4B ziMwGiUd1ph^aG!EreTc2rC9Njy7TWY%iLo8y{@P`9e{b*VLtlc2JJ;GLi`TBu;5ko z!)h&@O1u)K$0}S?H?kO`iL?Bqh9nXFh*x1P`~h2{`*r3B=Qlc&sfiP@8y-aK%5SI- zkx>{<`F#8w-{BPOe^afBKX43p*6x=2(D>mtKV(q<6m#RaJ8FoMu?X=`$nYC4(IK<> z;LmCnzr`Tp+IQ81CkbWD&LhV%3jM;*a-8TDt|I>MD<3DsEAOe#@E!NnN9ZMNO#ORp zg9mC7PR2@}He?b4YAoJNn?uG-c#zn;LOn_iqi~rz#{1JcsjU|K5$LiCn?Gx3N zF&Iqw*H{AIVLL4LRLzZ8EKEEO3*u5Nj=P^a)B%5_K)NjYcP;|WXUue5i&Eb3x%%3@ zhI5Gr{h`{q{Hf~Kqg+_P3-z<)C9FU^;4k(0y+C^qhfsbGrKh_)UaHBr1Oq5Ii83U% zztsaM2z`hnQR?TS?06m`TE$9h=owR&XtK-q5=Hbcjcx}xYC zb)q&{jfx~JiraL28p{)Z!2Ia*R*iKKdJy+VxzLd~5ZB`v^mwP9g!8dJ@d=dUWPWd5 zh{LE#Mh-Xx3*dAtjBBtA9>mgk538a(6QTnKqO_ZXa=d;KvT}>@*tdq8w*GcEfupJs8B=mHoppC#Il7o?Pq6$N}Ui#XOyd%9 zO$@?pj=bv5TVfjuW?&Ayg~RYM=E1Ohs_TYe0`WYQF3##gtjdH=EDD|;e z1lQ^K2o@!Ng~8}i(6k;1B$fpcnO=-{?Zd4@Y22 z+={Z?UZbpnT6WX8fMYQY+m}#x8sM#ZsyDWxd^AcAp2f!a2R6W3CDmLRj*oe3@ z%7rb#f_NBZbzLjN`tL`^wJejuWL+W{%gU)SU4h$)525r#tdHv2eJFF}I!YJ6K^g0! zRQoZTE7%NK!Gg36DUKGzml5uO;E;aI1a@5 zC?|CBRm-gmN*A|6d6LdXY5x(cqi1FHsBVMuQgWd5R5IqmBT^t;d=by$V{DCk{Ztoa zuA+vb8cG-T)lNb=!B&*jaTk5?FSLfNs-DE!o>-guaXLPLm5Cj9$;ch&siv-|0m@`* zkMe+7iPF_qaS{HFU2!(!C0+g-N{`rUsJJ1@g(hj2YmcG4P17(x`qi|0%3(AiBa<)` z<&ioGzr}qhCmvf%yl-V7L9dJC3!)urwy9b!YN{qzKn6<9z zvEA64xOJdu{axWplpgo0$A!xJZ%d{GCP@Ji1y)-b7ih zg@Vj4cF#suK2Z3Cv1Z!s2`10u~AEP;X_e|dMV24x!lsB zy3jpDeS$SXdE1Rfd429e8Jg=Tuh;h|ld5DZ)y3n`D#yZ7-de5iK)g)+Iev-t+o;v? z9A%l7X{#=%t%J-k3KCJ){qHDa9oWvaexgeuq)Ji+Z*%!}e4>#3fj#t7-jN?g}m@j_#%= zSLW{Ok?V(@DUZkgcpBxwRkerudLDzfi6{0nt>2)8_fp>zH}E9of8iI*KVyGy_1PR0 zsy@ZO(Hec#gQfw>tR90h+c%*+`OaZmbm^yF*Bw!oSu)Cp$yMxxt;5vYaxKc+Zx6~O zJcqHe{xgNE2gwj@K>P+}Z0bg+_jD-MCQd`?TJQeqb)A5+oaUm;@@*&=_A|EP!4it2bM+Nl3o8;2 z#XPtcWsJYVyjU#Sw0;@ohtflzqr3&TN7MgJ$lRhp9x$Z_s)hq`JMl)83+fU>kFd^< z;XLBBSY|izs6ncH`(WjzI2luVFkYQtRH9lnTQHpcPNA$C-yxzk3QonYW7H7c z!@9&CV@>NnxoC$nX}4(|AIQj^wi&0M(W|siQ0}-E{pp1hP*%Y@9iK;;JHMk0q3?M0 zc1uK=D-W~0ZP#!?V zCaVi=hVq<9MwyJ2rzm@)oM0Bp5FJJ7*}_xR=XxiU*}ob4%KQHj8Cj1Z(^w8T0cA(G z>FPv1P`YdbO1sx6cU)zL`nny4{fG}@eJn9kt%iOmb7MBjeos+upv)}O2*!3;Pfj?O zjCAcqlresbqp{&^6(2=eHreK=1GPb!Y?D!D^BI&be}(eEDK}U3=xCHleHtfX+ho)F zyTVoMNZex{H#~yOPBPN4(tOkUt9B}WMqGA*Y5hvop?#0?@<~cj?~H9Iv-^9Lp>tcP zUqUEDG6Lm-wxAu&Me4%5QC`0>i&+0H$gH8jnoKBT=et1uio|u0)$jGz3_-b{4 zE+`L(`6#pW7Rsb4x<>8L6y**QP`Y+4$`HIo`5ltqTGa!QD92faQTPaDa&}m!E_^;F z5<5)=I{cR}`zrm+nJun|5&Iic?+)B3ai zLX_k6->iN@T7z;!dAC^41&0wxMwZuVln2BMlrC+$RlT(qqul8|lv!VAn`!-FVH7%v zU!%O;c6_Po-(q*-!0oE*7oprp<{j!+F~L}gxcp98#;m_CWaJ80Xm6l&UBO-I?bRDc z631aMKEp8dOXb_nWT=pNW;EKPF7)nKYI4bl2K6ps`2#aujBi~;2h^>r+ zh})pNoepE1#QRL^*X2i1>Z^aP=D<3XA-Rll1Md6P@@j%IN9JNpJc`}$4a$XgJfJ>A z_Ms!3f{SE6$65zX>kkWSP*z2yZ+IJWXERVfG&~Qh*KZBXO?(<C`RSmKCjoWVep zmrmBBY7#d=>Cp+;5znCvnfEc)|7|kS$M|IsCu(`zG&T`;KEV|d8z+cFlXB?(+m5QNfP3!mf zZO*Art2C6CQl|52hxS;4I2q+_xd-!N=I_;azb8r$R7ZI}w8f zFRJnv4l+w9nEr!l{pT~~epC$)q3jrONge1TE+SrfS&ePYD{68@Xy@P%>JMNLR=cX| z<5A|ua+D#tj`9F1cuh@4M=%*_FaTx8^(Zf!2Pk)3{wMXe3qhG|$tX{*Qz*;vCCU)^ zUsq!siy_2Lln0pW4fTUaLzG8xBHD2i^1yN!r^(2J#CB74WfhdST1)i6p(x8{I?5C4 zE1ZlKZ>gTxgY}8;qdZv3-d2z7_L!e|H5S0VSQx*@GWZBf%lglKN4<1vqC9}2P#PXY zIp9?+i?*ND?+40bapHPt!=5_sgZGFXD03j}u6n0TLU{l^)|UE3^;A!6#rchOWbF6? z%RKQs2R#6 zZvBAuFY9_GnJTy+<-ze3p}O-fIF5J>${cV>Qx6n>EKQt@vj0BJiH|V`-=g$f z)FX9+b5Ppv(q4PS`j>V3fdc9BR==s&XMdDC-hnQ74`sQfp-i@SD3i15V>L%QVlm<< zl({kqW&fRM%?*@yOxY*u!7~hliH|;UsJE8OQ}sk^hVn%0in8M&?2G2_>dM1Vx_Bx| z7q8OsIrJjFr^{WRnZ`H7ekd=SXDE}r*mJdC2parvn1hT=vZO!M0oJ07@o|)8_7JJO&QI_$VztkN16=hQUyi~u$9)-h*r(qs+xc;rWt^mqg zt~yE=@5G{*hBCR_Ua29fh%%;4Q0imQ6{n%h`q?OVoQfs!F3Om@y;k)VP)^($86t<# zhm73uJe00IjdFs!m;`495jB1IeUeJy)AGnaaAU19ZT4ln+5U z@hNPKPq6`3%Ve|W$`F(b-i8y=mf2>F`4p6%-Hs*j9Lg$qhO*p?XR$e~_ql%-n>BV5 zQ9dm8qjcq2tb&hF#=b~ao7I)Iun}=zlndK{Qhyd@HKbub^l-PyDzmm(+G-ShMv`}k z%s-=+Zeb(*TK-`hN&1KUJW??E3A#;vj391-U+c2I+McwP2`Jk%lFS*|N>Sg5)PVdg zT!KaLJ?(uQ{8NjRag%SpV9E-Tp6I#)>@bBiM8}tDvy?aoab`^4C}v(T%HLTw-400Q=XG_k&4;K zYr?ofnnW5;+DFQ`%_FEw+4s6|3Hh$%9X#xek{oabuE0CG!9Uu)lusqSrEVvV)#Y!9 zc`jMMrca`54{=e_SjuEuMm|6JKA67sBrZ*yqTAHt`IBB}e4%slJ+NNy^qBlv63-i> z3(21yn_?Nt%Y@0~6DVspqW|BNtlKK9yHk%7i zBYiL_xK5JSZU|*Owv8q1(22MW=@$7PGPIS~aBa%uft0>wB6Es1c}Y3RpCk<@JtxV7 zEq(LvL+(C1KO@QJL~raux~$9Ob)3E(AQQwvJ#Yu9N`?!`N<5nQ6duHeq?XAS8x*Xx zkP>U-Hm8u0x4;`!VtmJ0z9OZP_`ozCCReGO&-%0Q7E0=nWLtwrRMz^<>?Go0IuSLin%|$V%YN2vt`WzOZ=2o-D^fOBUJE~w zIfy>GvVz`eGX72aRv#>t`Z}bcy4`W=hbea4d(qYQuiDmnmRE9WxTSy`hYMAp#dF3+lqTC|}fHuwzqFcJgOPNAv;yz=f0#BBgJ4$QPzOFX=pa z8)-KAUf2$0o3AkHP$t`QtDN!YM-uDn$_u|E=_iFzmOLNX)-OB<(Kvu)Cq79!O&U&I zo;077zLld~wq(k>lb4U6mUxNeN8Vqz%}3mgWSy)8g@L3Zy3&P;Fw!;RT)M0?v3#rc zmz~&-QGSHHsq0%&c0<>_$0o!bsXI$PA66%ACAm`WMwzQ_Yu)TUDl%?kb-Y6xNaI5^ z*hzerRDrk{=`+34P2EoB;%drI5KqL6+g{2>XDGO$_Hh_dG`vK`15yDB#}U8DuybR| z;1D)epBb~%WGkm4uYuol7_OmE397` z^`LCGj&osx&L3t!S-vZ=oi6hv--~=Reav|3BS;@8`$@MEHk1012FL+CrG#xJ`HWjR zf}Ny89ITSA7)qPp$oJH-@E55tZQA2{d`+8g@LT+XRF@>%I2?e-sM}8d8VLle$H^thC-a3G-8Smp0*ef_OjqtGfO*&X5DJIml;GS?k}W zwC_zCLUc~n-zqY%Nq<zaxNv&o4+v`GNV=y~?MGB%Ui#|Xj^8Ltvq`od`5~-8kXCryp+(>O{6Gizu zQdja`m=&kumsTtFAKtFj`DN5`|NL~N3xtgnMze!#^T;n(S?k}e{F{Taj9X_Ngs@M4 z(p|mp8SJ6!zSm_((Oc&$W0;)Z_56nS-|YhNKz$G? zY(jpq)RSt!O;Q!gYLb?bA4u9nT_e(L@+U~Lb(Zm8B|GZv25uwv!tZq1Q5;W-r0o#u z5^xM@x85%es}ak#4xj7t5tvA7L3t%zCT;qVKBHYO${arvxad1?PeCy%{vzGhI~*V{ zTRw%+g>rt!WvnKig@dX0#W37RIz<{sojX<~4JQ9NmZVJsQu@}Md_(!Mpaz*(QZE{% zZ{8Ui9;fiOuE<3B4$@xY7}5svo*DL&W><+l^!^dJP72vdDU1)4eM^20?Ru;EuWHIt zP(vTg)IAbPRWn`o3;7?&55jF&QI~J$fFnui+iG1tP?!CwE4JvkGJcufUe;eZc342c zW72QrOObx1+)2Cz+hC$TNC5dv)L%q9WjV>qmYFn+J{KK$vjGn^Quc-%pVWxdg%nL1 zLz+k0NOBzKpKGM|q}+`-Imw^Yku-=jowSm)n{XO=$!boFC^GF*> z2S^u4Pe}4L;z24$s!QrZiYASbKg%s8vzK(1ltyxG%Eu?EA}N^EkrYW9Pg+PiK)OJ> zM|w^2XvWKg6hi7lN+3-pttIUxT_UBC-jj0kEH6b0CUqo5Hs{M?B$?Tyt)#=GOQbZ? zdr~3RPDN5MX`*}bhenSq@#+K6~=*#-0U|sFEV7 z%C4*CW>3!9#Jk=psseSDyROQW!)C}QkTeg_Wt}Js)@A8ek&+`hrirKRNRH&GO+34m zXP(KIg6#F_J#?YYuItjTZ31QT9F+E%NpcTID3f~G();9A&g2hGJPTyYrGCvP&C@TS zU9M!`rk?HhQI&~esR|~^kv>u;KQ2g_tVSuC$UB1BW0j59Wo`4QUqec}oVsj!p5(<% zJstO{lFu2bvg@jn{PKD1tWS$j(ufIAHZ>x zeL5kMDf@I%Z=x)H0;Nyt_mq7)sf!l0CUwJt|2e696tpJwT&g~u)IU-7>7@25^q-SD zw2(Earxmg$^Z$zdl&uBN!_ccHL0CcrB7D5cx$du_UWV!;w7KnE`0*W zQI_5=y=*6C|I?&?O`UX(Z2wN`cNBg)soU_8_UWV^NZF^8`rG0%sms5l>eETxhA-Jq zC-pL~R9mZGvpS#GG5edTgS&W|DY^65JW`efnio>Xc6*p3b!p_OOsS;?XLHGFuUogY zZ~6Fo^-^mkyvmzWp`@*vEzBpi#H1Jx)5lq5tU1q2ExBx%tB0RGG$za*9Ujv^A+p?% z@P0l4cE8l^t0FR`te9!eO7+;}?&^$9Hd~krTuj&0lrIn1QfKZg<}3h)89zGJIW*FNp^EVixGTa^;7Zx7Jd6I^PCfTFdIX0n>U7fKa z$_b>noF3WOx|JfVUCR0T`uh0z*oo}n5fM@SqQYbPafBGICfpvM5I(3P$F_$LPK+87 z%FYQ4fnDE0N}s}JCFh@}&Bt`!@-!E_W{n$YkB^K^j1Eh=nAw)knd)Wk&f;4xEIcAK zF*?CV4isvSr~9JA?JkL`x(&3}>DV)psB*ZL`*?F{+8IWPMINiFMBl4v$m*f(Y@;fI- zo165SDVOPgS}tiW&Q8ozBgW}UTQ3b?XPyiMnWg=QvKSuGpg{#_`m+&*0-rb|lF zRf=7Go0oHbK(D593^u$3;bowLRlHVj9K)5 zWo-;j33zD+xRzy7r>~NIdV%bFZ65#sXo39b_P<#gdrjxQthV6H|4$ak@k~yZ#s)LR cvy82(Gqa~Ha~5ZxlC~K(Ck2hId_(iU0Jph!C;$Ke diff --git a/inst/po/zh_CN/LC_MESSAGES/R-data.table.mo b/inst/po/zh_CN/LC_MESSAGES/R-data.table.mo index 40290abcdb22617316e24e0a047a353af292b7bf..fd6955445577f14542f1f682448760eee7ea9f51 100644 GIT binary patch delta 16746 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 From e5be6674a2419950569f0306eb9e78c2f5328a81 Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Sat, 8 May 2021 22:26:43 -0700 Subject: [PATCH 27/28] fix some mistakes --- R/data.table.R | 6 +++--- R/test.data.table.R | 7 +++---- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/R/data.table.R b/R/data.table.R index d6d4c11bf3..f5cfbb1f21 100644 --- a/R/data.table.R +++ b/R/data.table.R @@ -422,7 +422,7 @@ replace_dot_alias = function(e) { which_cols_msg = if (len_common_names == length(x)) { catf("Joining but 'x' has no key, natural join using all 'x' columns") } else { - catf("Joining but 'x' has no key, natural join using %s", paste(":", brackify(common_names))) + catf("Joining but 'x' has no key, natural join using: %s", brackify(common_names)) } } on = common_names @@ -1022,7 +1022,7 @@ replace_dot_alias = function(e) { if (!missing(.SDcols)) warning("This j doesn't use .SD but .SDcols has been supplied. Ignoring .SDcols. See ?data.table.") allcols = c(names_x, xdotprefix, names_i, idotprefix) ansvars = sdvars = setdiff(intersect(av, allcols), bynames) - if (verbose) catf("Detected that j uses these columns: %s\n",if (!length(ansvars)) "" else brackfiy(ansvars)) + if (verbose) catf("Detected that j uses these columns: %s\n",if (!length(ansvars)) "" else brackify(ansvars)) # using a few named columns will be faster # Consider: DT[,max(diff(date)),by=list(month=month(date))] # and: DT[,lapply(.SD,sum),by=month(date)] @@ -3018,7 +3018,7 @@ isReallyReal = function(x) { ## if nothing else helped, auto create a new index that can be used if (!getOption("datatable.auto.index")) return(NULL) if (verbose) {catf("Creating new index '%s'\n", paste0(names(i), collapse = "__"));flush.console()} - if (verbose) {last.started.at=proc.time();catf("Creating index %s done in ... %s\n", paste0(names(i), collapse = "__"));flush.console()} + if (verbose) {last.started.at=proc.time();catf("Creating index %s done in ...", paste0(names(i), collapse = "__"));flush.console()} setindexv(x, names(i)) if (verbose) {cat(timetaken(last.started.at),"\n");flush.console()} if (verbose) {catf("Optimized subsetting with index '%s'\n", paste0(names(i), collapse = "__"));flush.console()} diff --git a/R/test.data.table.R b/R/test.data.table.R index 906fe0ca45..ef834e8438 100644 --- a/R/test.data.table.R +++ b/R/test.data.table.R @@ -92,7 +92,7 @@ test.data.table = function(script="tests.Rraw", verbose=FALSE, pkg=".", silent=F cat("getDTthreads(verbose=TRUE):\n") # for tracing on CRAN; output to log before anything is attempted getDTthreads(verbose=TRUE) # includes the returned value in the verbose output (rather than dangling '[1] 4'); e.g. "data.table is using 4 threads" - catf("test.data.table() running: %s\n") # print fn to log before attempting anything on it (in case it is missing); on same line for slightly easier grep + catf("test.data.table() running: %s\n", fn) # print fn to log before attempting anything on it (in case it is missing); on same line for slightly easier grep env = new.env(parent=.GlobalEnv) assign("testDir", function(x) file.path(fulldir, x), envir=env) @@ -290,8 +290,7 @@ test = function(num,x,y=TRUE,error=NULL,warning=NULL,message=NULL,output=NULL,no } ) if (showProgress) # \r can't be in gettextf msg - cat("\r") # nocov - catf("Running test id %s ", numStr) # nocov. + cat("\rRunning test id", numStr, " ") # nocov. # See PR #4090 for comments about change here in Dec 2019. # If a segfault error occurs in future and we'd like to know after which test, then arrange for the # try(sys.source()) in test.data.table() to be run in a separate R process. That process could write out @@ -365,7 +364,7 @@ test = function(num,x,y=TRUE,error=NULL,warning=NULL,message=NULL,output=NULL,no } if (length(expected) != length(observed)) { # nocov start - catf("Test %s produced %d %ss but expected %d\n%s\n%s\n", numStr, length(observed), length(expected), paste("Expected:", expected), paste("Observed:", observed)) + catf("Test %s produced %d %ss but expected %d\n%s\n%s\n", numStr, length(observed), type, length(expected), paste("Expected:", expected), paste("Observed:", observed)) fail = TRUE # nocov end } else { From 75f7cffc12ee162d1d9f6478f41b462cb833fdd7 Mon Sep 17 00:00:00 2001 From: Matt Dowle Date: Sun, 9 May 2021 23:58:24 -0600 Subject: [PATCH 28/28] ... can be passed on when empty; need to because ...length() was new in R 3.5.0 so would fail R 3.1.0 --- R/utils.R | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/R/utils.R b/R/utils.R index a31930887c..2655e72cd6 100644 --- a/R/utils.R +++ b/R/utils.R @@ -141,5 +141,6 @@ edit.data.table = function(name, ...) { # nocov end catf = function(fmt, ...) { - if (...length()) cat(gettextf(fmt, ...)) else cat(gettext(fmt)) + cat(gettextf(fmt, ...)) } +