From f89c3702a75f5a5e0e2ca119510b319a9061ff58 Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Fri, 4 Oct 2019 02:45:40 +0800 Subject: [PATCH 01/22] initial exploration of adding a chinese translation of messages working version of chinese translation --- R/between.R | 2 +- R/data.table.R | 2 +- inst/po/zh_CN/LC_MESSAGES/R-data.table.mo | Bin 0 -> 463 bytes po/R-data.table.pot | 1730 +++++++++++++++++ po/R-zh_CN.po | 2104 +++++++++++++++++++++ src/data.table.h | 7 + 6 files changed, 3843 insertions(+), 2 deletions(-) create mode 100644 inst/po/zh_CN/LC_MESSAGES/R-data.table.mo create mode 100644 po/R-data.table.pot create mode 100644 po/R-zh_CN.po diff --git a/R/between.R b/R/between.R index a49cea461b..4e358c3310 100644 --- a/R/between.R +++ b/R/between.R @@ -1,6 +1,6 @@ # is x[i] in between lower[i] and upper[i] ? between = function(x, lower, upper, incbounds=TRUE, NAbounds=TRUE, check=FALSE) { - if (is.logical(x)) stop("between has been x of type logical") + if (is.logical(x)) stop("between has been passed an argument x of type logical") if (is.logical(lower)) lower = as.integer(lower) # typically NA (which is logical type) if (is.logical(upper)) upper = as.integer(upper) # typically NA (which is logical type) is.px = function(x) inherits(x, "POSIXct") diff --git a/R/data.table.R b/R/data.table.R index 15cc632f4a..d6e4188030 100644 --- a/R/data.table.R +++ b/R/data.table.R @@ -183,7 +183,7 @@ replace_dot_alias = function(e) { } return(x) } - if (!mult %chin% c("first","last","all")) stop("mult argument can only be 'first','last' or 'all'") + if (!mult %chin% c("first","last","all")) stop("mult argument can only be 'first', 'last' or 'all'") missingroll = missing(roll) if (length(roll)!=1L || is.na(roll)) stop("roll must be a single TRUE, FALSE, positive/negative integer/double including +Inf and -Inf or 'nearest'") if (is.character(roll)) { diff --git a/inst/po/zh_CN/LC_MESSAGES/R-data.table.mo b/inst/po/zh_CN/LC_MESSAGES/R-data.table.mo new file mode 100644 index 0000000000000000000000000000000000000000..1a599bd7d1f787813e0f87fb87496992180a9b1b GIT binary patch literal 463 zcmYk1ze@u#6vyLl=-}Y&kjV;?^R85_=MRM1LZQ_n)!Fne*2rD1)E`b^L^1a<#Wt7BQl6}6c+FF|!W8Ci*PW^WTTJ@g6DGE)qMD*bC@?f5rp-k1>tur+@bH+dQpHRh(~Wsz=tPfWW6soP zr}RW5OMOKOk_z9U@Un?>+}fqg!O2}Nx#i)-uF&1bS4uABj%Io8GBk_QJ}og)VAO?H zDr_pb_|yMMxlAtAb8BdNBbk__FMJq==l4+9z5Oz*JqvATIcq>-E4F&9zaJy?WFbc G6h%LKyN?|J literal 0 HcmV?d00001 diff --git a/po/R-data.table.pot b/po/R-data.table.pot new file mode 100644 index 0000000000..b8f94b3d87 --- /dev/null +++ b/po/R-data.table.pot @@ -0,0 +1,1730 @@ +msgid "" +msgstr "" +"Project-Id-Version: data.table 1.12.5\n" +"POT-Creation-Date: 2019-10-04 17:06\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + + +msgid "data.table package loaded. When developing don't load package" +msgstr "" + +msgid "Internal error -- difftime objects may not be added to IDate, but Ops dispatch should have intervened to prevent this" +msgstr "" + +msgid "binary + is not defined for \"IDate\" objects" +msgstr "" + +msgid "can only subtract from \"IDate\" objects" +msgstr "" + +msgid "Internal error: storage mode of IDate is somehow no longer integer" +msgstr "" + +msgid "unary - is not defined for \"IDate\" objects" +msgstr "" + +msgid "Internal error -- difftime objects may not be subtracted from IDate, but Ops dispatch should have intervened to prevent this" +msgstr "" + +msgid "Valid options for ms are 'truncate'," +msgstr "" + +msgid "'nearest', and 'ceil'." +msgstr "" + +msgid "as.data.table.array method should only be called for arrays with 3+ dimensions; use the matrix method for 2-dimensional arrays" +msgstr "" + +msgid "Argument 'value.name' must be scalar character, non-NA and at least one character" +msgstr "" + +msgid "Argument 'sorted' must be scalar logical and non-NA" +msgstr "" + +msgid "Argument 'na.rm' must be scalar logical and non-NA" +msgstr "" + +msgid "Please provide either 'key' or 'sorted', but not both." +msgstr "" + +msgid "Argument 'value.name' should not overlap with column names in result:" +msgstr "" + +msgid "POSIXlt column type detected and converted to POSIXct. We do not recommend use of POSIXlt at all because it uses 40 bytes to store one date." +msgstr "" + +msgid "Item" +msgstr "" + +msgid "has" +msgstr "" + +msgid "rows but longest item has" +msgstr "" + +msgid "; recycled with remainder." +msgstr "" + +msgid "has 0 rows but longest item has" +msgstr "" + +msgid "; filled with NA" +msgstr "" + +msgid "A column may not be called .SD. That has special meaning." +msgstr "" + +msgid "class must be length 1" +msgstr "" + +msgid "between has been passed an argument x of type logical" +msgstr "" + +msgid "'between' function the 'x' argument is a POSIX class while 'lower' was not, coercion to POSIX failed with:" +msgstr "" + +msgid "'between' function the 'x' argument is a POSIX class while 'upper' was not, coercion to POSIX failed with:" +msgstr "" + +msgid "'between' lower= and upper= are both POSIXct but have different tzone attributes:" +msgstr "" + +msgid ". Please align their time zones." +msgstr "" + +msgid "'between' arguments are all POSIXct but have mismatched tzone attributes:" +msgstr "" + +msgid ". The UTC times will be compared." +msgstr "" + +msgid "trying to use integer64 class when 'bit64' package is not installed" +msgstr "" + +msgid "Not yet implemented NAbounds=TRUE for this non-numeric and non-character type" +msgstr "" + +msgid "Some lower>upper for this non-numeric and non-character type" +msgstr "" + +msgid "RHS has length()" +msgstr "" + +msgid "; expecting length 2." +msgstr "" + +msgid "c" +msgstr "" + +msgid "Perhaps you meant %s?" +msgstr "" + +msgid "The first element should be the lower bound(s);" +msgstr "" + +msgid "the second element should be the upper bound(s)." +msgstr "" + +msgid "x." +msgstr "" + +msgid "is type" +msgstr "" + +msgid "which is not supported by data.table join" +msgstr "" + +msgid "i." +msgstr "" + +msgid "Attempting roll join on factor column when joining x." +msgstr "" + +msgid "to i." +msgstr "" + +msgid ". Only integer, double or character columns may be roll joined." +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 ")" +msgstr "" + +msgid "Incompatible join types:" +msgstr "" + +msgid "is type integer64 but" +msgstr "" + +msgid "is type double and contains fractions" +msgstr "" + +msgid "roll is not implemented for non-equi joins yet." +msgstr "" + +msgid "Column name '_nqgrp_' is reserved for non-equi joins." +msgstr "" + +msgid "key argument of data.table() must be character" +msgstr "" + +msgid "Object '" +msgstr "" + +msgid "' not found. Perhaps you intended" +msgstr "" + +msgid "," +msgstr "" + +msgid "or" +msgstr "" + +msgid "more" +msgstr "" + +msgid "' not found amongst" +msgstr "" + +msgid "and" +msgstr "" + +msgid "Provide either by= or keyby= but not both" +msgstr "" + +msgid "Ignoring keyby= because j= is not supplied" +msgstr "" + +msgid "Ignoring by= because j= is not supplied" +msgstr "" + +msgid "When on= is provided but not i=, on= must be a named list or data.table|frame, and a natural join (i.e. join on common names) is invoked. Ignoring on= which is '" +msgstr "" + +msgid "'." +msgstr "" + +msgid "i and j are both missing so ignoring the other arguments. This warning will be upgraded to error in future." +msgstr "" + +msgid "mult argument can only be 'first', 'last' or 'all'" +msgstr "" + +msgid "roll must be a single TRUE, FALSE, positive/negative integer/double including +Inf and -Inf or 'nearest'" +msgstr "" + +msgid "roll is '" +msgstr "" + +msgid "' (type character). Only valid character value is 'nearest'." +msgstr "" + +msgid "rollends must be a logical vector" +msgstr "" + +msgid "rollends must be length 1 or 2" +msgstr "" + +msgid "nomatch= must be either NA or NULL (or 0 for backwards compatibility which is the same as NULL)" +msgstr "" + +msgid "which= must be a logical vector length 1. Either FALSE, TRUE or NA." +msgstr "" + +msgid "which==" +msgstr "" + +msgid "(meaning return row numbers) but j is also supplied. Either you need row numbers or the result of j, but only one type of result can be returned." +msgstr "" + +msgid "which=NA with nomatch=0 would always return an empty vector. Please change or remove either which or nomatch." +msgstr "" + +msgid "j must be provided when with=FALSE" +msgstr "" + +msgid "The symbol .. is invalid. The .. prefix must be followed by at least one character." +msgstr "" + +msgid "Variable '" +msgstr "" + +msgid "' is not found in calling scope. Looking in calling scope because you used the .. prefix." +msgstr "" + +msgid "Variable '.." +msgstr "" + +msgid "' does exist in calling scope though, so please just removed the .. prefix from that variable name in calling scope." +msgstr "" + +msgid "Both '" +msgstr "" + +msgid "' and '.." +msgstr "" + +msgid "' exist in calling scope. Please remove the '.." +msgstr "" + +msgid "' variable in calling scope for clarity." +msgstr "" + +msgid "Internal error: DT[, ..var] should be dealt with by the branch above now." +msgstr "" + +msgid "' is not found in calling scope. Looking in calling scope because you set with=FALSE. Also, please use .. symbol prefix and remove with=FALSE." +msgstr "" + +msgid "You have wrapped := with {} which is ok but then := must be the only thing inside {}. You have something else inside {} as well. Consider placing the {} on the RHS of := instead; e.g. DT[,someCol:={tmpVar1<-...;tmpVar2<-...;tmpVar1*tmpVar2}" +msgstr "" + +msgid ":= with keyby is only possible when i is not supplied since you can't setkey on a subset of rows. Either change keyby to by or remove i" +msgstr "" + +msgid "nomatch isn't relevant together with :=, ignoring nomatch" +msgstr "" + +msgid "not-join '!' prefix is present on i but nomatch is provided. Please remove nomatch." +msgstr "" + +msgid "is not found in calling scope" +msgstr "" + +msgid "When the first argument inside DT[...] is a single symbol (e.g. DT[var]), data.table looks for var in calling scope." +msgstr "" + +msgid "i is invalid type (matrix). Perhaps in future a 2 column matrix could return a list of elements of DT (in the spirit of A[B] in FAQ 2.14). Please report to data.table issue tracker if you'd like this, or add your comments to FR #657." +msgstr "" + +msgid "When i is a data.table (or character vector), the columns to join by must be specified using 'on=' argument (see ?data.table), by keying x (i.e. sorted, and, marked as sorted, see ?setkey), or by sharing column names between x and i (i.e., a natural join). Keyed joins might have further speed benefits on very large data due to x being sorted in RAM." +msgstr "" + +msgid "Attempting to do natural join but no common columns in provided tables" +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 "logical error. i is not a data.table, but 'on' argument is provided." +msgstr "" + +msgid "i has evaluated to type" +msgstr "" + +msgid ". Expecting logical, integer or double." +msgstr "" + +msgid "i evaluates to a logical vector length" +msgstr "" + +msgid "but there are" +msgstr "" + +msgid "rows. Recycling of logical i is no longer allowed as it hides more bugs than is worth the rare convenience. Explicitly use rep(...,length=.N) if you really need to recycle." +msgstr "" + +msgid "Internal error: notjoin but byjoin or !integer or nomatch==NA" +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 "" + +msgid "with=FALSE ignored, it isn't needed when using :=. See ?':=' for examples." +msgstr "" + +msgid "column(s) not removed because not found:" +msgstr "" + +msgid "column(s) not found:" +msgstr "" + +msgid "of j is" +msgstr "" + +msgid "which is outside the column number range [1,ncol=" +msgstr "" + +msgid "]" +msgstr "" + +msgid "j mixes positives and negatives" +msgstr "" + +msgid "When with=FALSE, j-argument should be of type logical/character/integer indicating the columns to select." +msgstr "" + +msgid "by=c(...), key(...) or names(...) must evaluate to 'character'" +msgstr "" + +msgid "'by' is a character vector length" +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 "Internal error: irows isn't integer" +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 "" + +msgid "should work. This is for efficiency so data.table can detect which columns are needed." +msgstr "" + +msgid "'by' or 'keyby' must evaluate to a vector or a list of vectors (where 'list' includes data.table and data.frame which are lists, too)" +msgstr "" + +msgid "column or expression" +msgstr "" + +msgid "of 'by' or 'keyby' is type" +msgstr "" + +msgid ". Do not quote column names. Usage: DT[,sum(colC),by=list(colA,month(colB))]" +msgstr "" + +msgid "The items in the 'by' or 'keyby' list are length (" +msgstr "" + +msgid "). Each must be length" +msgstr "" + +msgid "; the same length as there are rows in x (after subsetting if i is provided)." +msgstr "" + +msgid "of the .() or list() passed to j is missing" +msgstr "" + +msgid ".SDcols missing at the following indices:" +msgstr "" + +msgid ".SDcols is numeric but has both +ve and -ve indices" +msgstr "" + +msgid ".SDcols is numeric but out of bounds [1," +msgstr "" + +msgid "] at:" +msgstr "" + +msgid ".SDcols should be column numbers or names" +msgstr "" + +msgid "Some items of .SDcols are not column names:" +msgstr "" + +msgid "This j doesn't use .SD but .SDcols has been supplied. Ignoring .SDcols. See ?data.table." +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 "" + +msgid "In `:=`(col1=val1, col2=val2, ...) form, all arguments must be named." +msgstr "" + +msgid "LHS of := must be a symbol, or an atomic vector (column names or positions)." +msgstr "" + +msgid "LHS of := appears to be column positions but are outside [1,ncol] range. New columns can only be added by name." +msgstr "" + +msgid "LHS of := isn't column names ('character') or positions ('integer' or 'numeric')" +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 "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 "" + +msgid "Internal error -- item '" +msgstr "" + +msgid "' not found in names of list" +msgstr "" + +msgid "Internal error -- column(s) not found:" +msgstr "" + +msgid "strptime() usage detected and wrapped with as.POSIXct(). This is to minimize the chance of assigning POSIXlt columns, which use 40+ bytes to store one date (versus 8 for POSIXct). Use as.POSIXct() (which will call strptime() as needed internally) to avoid this warning." +msgstr "" + +msgid "' is not found in calling scope. Looking in calling scope because this symbol was prefixed with .. in the j= parameter." +msgstr "" + +msgid "Internal error: xcolAns does not pass checks:" +msgstr "" + +msgid "Internal error: irows is NULL when making join result at R level. Should no longer happen now we use CsubsetDT earlier." +msgstr "" + +msgid "j (the 2nd argument inside [...]) is a single symbol but column name '" +msgstr "" + +msgid "' is not found. Perhaps you intended DT[, .." +msgstr "" + +msgid "]. This difference to data.frame is deliberate and explained in FAQ 1.1." +msgstr "" + +msgid "Internal error: j has created a data.table result containing a NULL column" +msgstr "" + +msgid "The column '.N' can't be grouped because it conflicts with the special .N variable. Try setnames(DT,'.N','N') first." +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 "logical error. i is not data.table, but mult='all' and 'by'=.EACHI" +msgstr "" + +msgid "Internal error: by= is missing" +msgstr "" + +msgid "Internal error: byindex not the index name" +msgstr "" + +msgid "Internal error: byindex not found" +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 "Internal error: length(irows)!=length(o__)" +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 "" + +msgid "Internal error: jvnames is length" +msgstr "" + +msgid "but ans is" +msgstr "" + +msgid "and bynames is" +msgstr "" + +msgid "rownames and rownames.value cannot both be used at the same time" +msgstr "" + +msgid "length(rownames)==" +msgstr "" + +msgid "but nrow(DT)==" +msgstr "" + +msgid ". The rownames argument specifies a single column name or number. Consider rownames.value= instead." +msgstr "" + +msgid "length(rownames)==0 but should be a single column name or number, or NULL" +msgstr "" + +msgid "rownames is TRUE but key has multiple columns" +msgstr "" + +msgid "; taking first column x[,1] as rownames" +msgstr "" + +msgid "'" +msgstr "" + +msgid "' is not a column of x" +msgstr "" + +msgid "as.integer(rownames)==" +msgstr "" + +msgid "]." +msgstr "" + +msgid "length(rownames.value)==" +msgstr "" + +msgid "but should be nrow(x)==" +msgstr "" + +msgid "When i is a matrix in DT[i]<-value syntax, it doesn't make sense to provide j" +msgstr "" + +msgid "j must be an atomic vector, see ?is.atomic" +msgstr "" + +msgid "NA in j" +msgstr "" + +msgid "j must be vector of column name or positions" +msgstr "" + +msgid "Attempt to assign to column position greater than ncol(x). Create the column by name, instead. This logic intends to catch (most likely) user errors." +msgstr "" + +msgid "data.table inherits from data.frame (from v1.5), but this data.table does not. Has it been created manually (e.g. by using 'structure' rather than 'data.table') or saved to disk using a prior version of data.table?" +msgstr "" + +msgid "attempting to assign invalid object to dimnames of a data.table" +msgstr "" + +msgid "data.tables do not have rownames" +msgstr "" + +msgid "Can't assign" +msgstr "" + +msgid "colnames to a" +msgstr "" + +msgid "-column data.table" +msgstr "" + +msgid "'subset' must evaluate to logical" +msgstr "" + +msgid "Argument 'invert' must be logical TRUE/FALSE" +msgstr "" + +msgid "x argument must be a data.table" +msgstr "" + +msgid "group length is 0 but data nrow > 0" +msgstr "" + +msgid "passing 'f' argument together with 'by' is not allowed, use 'by' when split by column in data.table and 'f' when split by external factor" +msgstr "" + +msgid "Either 'by' or 'f' argument must be supplied" +msgstr "" + +msgid "Column '.ll.tech.split' is reserved for split.data.table processing" +msgstr "" + +msgid "Column '.nm.tech.split' is reserved for split.data.table processing" +msgstr "" + +msgid "Argument 'by' must refer to column names in x" +msgstr "" + +msgid "Argument 'by' must refer only to atomic-type columns, but the following columns are non-atomic:" +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 "" + +msgid "setalloccol attempting to modify `*tmp*`" +msgstr "" + +msgid "Input is a length=1 logical that points to the same address as R's global value. Therefore the attribute has not been set by reference, rather on a copy. You will need to assign the result back to a variable. See issue #1281." +msgstr "" + +msgid "x is not a data.table or data.frame" +msgstr "" + +msgid "x has" +msgstr "" + +msgid "columns but its names are length" +msgstr "" + +msgid "Passed a vector of type '" +msgstr "" + +msgid "'. Needs to be type 'character'." +msgstr "" + +msgid "names to a" +msgstr "" + +msgid "column data.table" +msgstr "" + +msgid "When 'new' is provided, 'old' must be provided too" +msgstr "" + +msgid "'new' is not a character vector or a function" +msgstr "" + +msgid "NA in 'new' at positions" +msgstr "" + +msgid "Some duplicates exist in 'old':" +msgstr "" + +msgid "'old' is type" +msgstr "" + +msgid "but should be integer, double or character" +msgstr "" + +msgid "'old' is length" +msgstr "" + +msgid "but 'new' is length" +msgstr "" + +msgid "NA (or out of bounds) in 'old' at positions" +msgstr "" + +msgid "of 'old' is '" +msgstr "" + +msgid "' which appears several times in column names. Just the first will be changed. There are" +msgstr "" + +msgid "other items in old that are also duplicated in column names." +msgstr "" + +msgid "Items of 'old' not found in column names:" +msgstr "" + +msgid ". Consider skip_absent=TRUE." +msgstr "" + +msgid "Internal error: length(i)!=length(new)" +msgstr "" + +msgid "x has some duplicated column name(s):" +msgstr "" + +msgid ". Please remove or rename the duplicate(s) and try again." +msgstr "" + +msgid "Input is" +msgstr "" + +msgid "but should be a plain list of items to be stacked" +msgstr "" + +msgid "idcol must be a logical or character vector of length 1. If logical TRUE the id column will named '.id'." +msgstr "" + +msgid "use.names=NA invalid" +msgstr "" + +msgid "use.names='check' cannot be used explicitly because the value 'check' is new in v1.12.2 and subject to change. It is just meant to convey default behavior. See ?rbindlist." +msgstr "" + +msgid "Check that is.data.table(DT) == TRUE. Otherwise, := and `:=`(...) are defined for use in j, once only and in particular ways. See help(\":=\")." +msgstr "" + +msgid "setDF only accepts data.table, data.frame or list of equal length as input" +msgstr "" + +msgid "rownames contains duplicates" +msgstr "" + +msgid "rownames incorrect length; expected" +msgstr "" + +msgid "names, got" +msgstr "" + +msgid "All elements in argument 'x' to 'setDF' must be of same length" +msgstr "" + +msgid "Cannot find symbol" +msgstr "" + +msgid "Cannot convert '" +msgstr "" + +msgid "' to data.table by reference because binding is locked. It is very likely that '" +msgstr "" + +msgid "' resides within a package (or an environment) that is locked to prevent modifying its variable bindings. Try copying the object to your current environment, ex: var <- copy(var) and then using setDT again." +msgstr "" + +msgid "Some columns are a multi-column type (such as a matrix column):" +msgstr "" + +msgid ". setDT will retain these columns as-is but subsequent operations like grouping and joining may fail. Please consider as.data.table() instead which will create a new column for each embedded column." +msgstr "" + +msgid "Column" +msgstr "" + +msgid "is of POSIXlt type. Please convert it to POSIXct using as.POSIXct and run setDT again. We do not recommend use of POSIXlt at all because it uses 40 bytes to store one date." +msgstr "" + +msgid "All elements in argument 'x' to 'setDT' must be of same length, but the profile of input lengths (length:frequency) is:" +msgstr "" + +msgid "%s:%d" +msgstr "" + +msgid "The first entry with fewer than" +msgstr "" + +msgid "entries is" +msgstr "" + +msgid "Argument 'x' to 'setDT' should be a 'list', 'data.frame' or 'data.table'" +msgstr "" + +msgid "Item '" +msgstr "" + +msgid "' not found in names of input list" +msgstr "" + +msgid "'prefix' must be NULL or a character vector of length 1." +msgstr "" + +msgid "x is a single vector, non-NULL 'cols' doesn't make sense." +msgstr "" + +msgid "x is a list, 'cols' cannot be 0-length." +msgstr "" + +msgid "RHS of" +msgstr "" + +msgid "is length" +msgstr "" + +msgid "which is not 1 or nrow (" +msgstr "" + +msgid "). For robustness, no recycling is allowed (other than of length 1 RHS). Consider %in% instead." +msgstr "" + +msgid "Internal error in .isFastSubsettable. Please report to data.table developers" +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 "" + +msgid "Found more than one operator in one 'on' statement:" +msgstr "" + +msgid ". Please specify a single operator." +msgstr "" + +msgid "'on' contains no column name:" +msgstr "" + +msgid ". Each 'on' clause must contain one or two column names." +msgstr "" + +msgid "'on' contains more than 2 column names:" +msgstr "" + +msgid "Invalid operators" +msgstr "" + +msgid ". Only allowed operators are" +msgstr "" + +msgid "." +msgstr "" + +msgid "'fromLast' must be TRUE or FALSE" +msgstr "" + +msgid "x must be an atomic vector or data.frames/data.tables" +msgstr "" + +msgid "Using '" +msgstr "" + +msgid "' as value column. Use 'value.var' to override" +msgstr "" + +msgid "The dcast generic in data.table has been passed a" +msgstr "" + +msgid ", but data.table::dcast currently only has a method for data.tables. Please confirm your input is a data.table, with setDT(" +msgstr "" + +msgid ") or as.data.table(" +msgstr "" + +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 "" + +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 "" + +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." +msgstr "" + +msgid "data.table to cast must have unique column names" +msgstr "" + +msgid "value.var values [" +msgstr "" + +msgid "] are not found in 'data'." +msgstr "" + +msgid "When 'fun.aggregate' and 'value.var' are both lists, 'value.var' must be either of length =1 or =length(fun.aggregate)." +msgstr "" + +msgid "'data' must be a data.table." +msgstr "" + +msgid "'drop' must be logical TRUE/FALSE" +msgstr "" + +msgid "Column [" +msgstr "" + +msgid "] not found or of unknown type." +msgstr "" + +msgid "Columns specified in formula can not be of type list" +msgstr "" + +msgid "Can not cast an empty data.table" +msgstr "" + +msgid "Aggregate function missing, defaulting to 'length'" +msgstr "" + +msgid "Internal error -- empty rhsnames in dcast; please report" +msgstr "" + +msgid "The melt generic in data.table has been passed a" +msgstr "" + +msgid ", but data.table::melt currently only has a method for data.tables. Please confirm your input is a data.table, with setDT(" +msgstr "" + +msgid "). If you intend to use a method from reshape2, try installing that package first, but do note that reshape2 is deprecated and you should be migrating your code away from using it." +msgstr "" + +msgid "and will attempt to redirect to the relevant reshape2 method; please note that reshape2 is deprecated, and this redirection is now deprecated as well. To continue using melt methods from reshape2 while both libraries are attached, e.g. melt.list, you can prepend the namespace like reshape2::melt(" +msgstr "" + +msgid "Input patterns must be of type character." +msgstr "" + +msgid "'data' must be a data.table" +msgstr "" + +msgid "'value.name' provided in both 'measure.vars'" +msgstr "" + +msgid "and 'value.name argument'; value provided in" +msgstr "" + +msgid "'measure.vars' is given precedence." +msgstr "" + +msgid "Please provide a name to each element of 'measure.vars'." +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 "" + +msgid "maxgap must be a non-negative integer value of length 1" +msgstr "" + +msgid "minoverlap must be a positive integer value of length 1" +msgstr "" + +msgid "which must be a logical vector of length 1. Either TRUE/FALSE" +msgstr "" + +msgid "nomatch must either be NA or NULL" +msgstr "" + +msgid "maxgap and minoverlap arguments are not yet implemented." +msgstr "" + +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 "" + +msgid "'by.x' and 'by.y' should contain at least two column names (or numbers) each - corresponding to 'start' and 'end' points of intervals. Please see ?foverlaps and examples for more info." +msgstr "" + +msgid "Invalid numeric value for 'by.x'; it should be a vector with values 1 <= by.x <= length(x)" +msgstr "" + +msgid "Invalid numeric value for 'by.y'; it should be a vector with values 1 <= by.y <= length(y)" +msgstr "" + +msgid "A non-empty vector of column names or numbers is required for by.x" +msgstr "" + +msgid "A non-empty vector of column names or numbers is required for by.y" +msgstr "" + +msgid "The first" +msgstr "" + +msgid "columns of y's key must be identical to the columns specified in by.y." +msgstr "" + +msgid "Elements listed in 'by.x' must be valid names in data.table 'x'" +msgstr "" + +msgid "Duplicate columns are not allowed in overlap joins. This may change in the future." +msgstr "" + +msgid "length(by.x) != length(by.y). Columns specified in by.x should correspond to columns specified in by.y and should be of same lengths." +msgstr "" + +msgid "y has some duplicated column name(s):" +msgstr "" + +msgid "The last two columns in by.x should correspond to the 'start' and 'end' intervals in data.table 'x' and must be integer/numeric type." +msgstr "" + +msgid "NA values in data.table 'x' start column: '" +msgstr "" + +msgid "'. All rows with NA values in the range columns must be removed for foverlaps() to work." +msgstr "" + +msgid "NA values in data.table 'x' end column: '" +msgstr "" + +msgid "All entries in column" +msgstr "" + +msgid "should be <= corresponding entries in column" +msgstr "" + +msgid "in data.table 'x'." +msgstr "" + +msgid "The last two columns in by.y should correspond to the 'start' and 'end' intervals in data.table 'y' and must be integer/numeric type." +msgstr "" + +msgid "NA values in data.table 'y' start column: '" +msgstr "" + +msgid "NA values in data.table 'y' end column: '" +msgstr "" + +msgid "in data.table 'y'." +msgstr "" + +msgid "Some interval cols are of type POSIXct while others are not. Please ensure all interval cols are (or are not) of POSIXct type" +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 "Not yet implemented" +msgstr "" + +msgid "maxgap > minoverlap. maxgap will have no effect here." +msgstr "" + +msgid "length(na.last) = 0" +msgstr "" + +msgid "length(na.last) > 1, only the first element will be used" +msgstr "" + +msgid "x is a single vector, non-NULL 'cols' doesn't make sense" +msgstr "" + +msgid "x is a list, 'cols' can not be 0-length" +msgstr "" + +msgid "Used more than one of the arguments input=, file=, text= and cmd=." +msgstr "" + +msgid "Argument 'encoding' must be 'unknown', 'UTF-8' or 'Latin-1'." +msgstr "" + +msgid "'text=' is type" +msgstr "" + +msgid "but must be character." +msgstr "" + +msgid "input= must be a single character string containing a file name, a system command containing at least one space, a URL starting 'http[s]://', 'ftp[s]://' or 'file://', or, the input data itself containing at least one \\n or \\r" +msgstr "" + +msgid "input= contains no \\n or \\r, but starts with a space. Please remove the leading space, or use text=, file= or cmd=" +msgstr "" + +msgid "Input URL requires https:// connection for which fread() requires 'curl' package which cannot be found. Please install 'curl' using 'install.packages('curl')'." +msgstr "" + +msgid "Taking input= as a system command ('" +msgstr "" + +msgid "') and a variable has been used in the expression passed to `input=`. Please use fread(cmd=...). There is a security concern if you are creating an app, and the app could have a malicious user, and the app is not running in a secure environment; e.g. the app is running as root. Please read item 5 in the NEWS file for v1.11.6 for more information and for the option to suppress this message." +msgstr "" + +msgid "File '" +msgstr "" + +msgid "' does not exist or is non-readable. getwd()=='" +msgstr "" + +msgid "' is a directory. Not yet implemented." +msgstr "" + +msgid "' has size 0. Returning a NULL" +msgstr "" + +msgid "data.table" +msgstr "" + +msgid "data.frame" +msgstr "" + +msgid "To read gz and bz2 files directly, fread() requires 'R.utils' package which cannot be found. Please install 'R.utils' using 'install.packages('R.utils')'." +msgstr "" + +msgid "'autostart' is now deprecated and ignored. Consider skip='string' or skip=n" +msgstr "" + +msgid "colClasses is type 'logical' which is ok if all NA but it has some TRUE or FALSE values in it which is not allowed. Please consider the drop= or select= argument instead. See ?fread." +msgstr "" + +msgid "colClasses is not type list or character vector" +msgstr "" + +msgid "colClasses=\"NULL\" (quoted) is interpreted as colClasses=NULL (the default) as opposed to dropping every column." +msgstr "" + +msgid "strip.white==TRUE (default) and \"\" is present in na.strings, so any number of spaces in string columns will already be read as ." +msgstr "" + +msgid "Since strip.white=TRUE (default), use na.strings=\"\" to specify that any number of spaces in a string column should be read as ." +msgstr "" + +msgid "But strip.white=FALSE. Use strip.white=TRUE (default) together with na.strings=\"\" to turn any number of spaces in string columns into " +msgstr "" + +msgid "'data.table' relies on the package 'yaml' to parse the file header; please add this to your library with install.packages('yaml') and try again." +msgstr "" + +msgid "Combining a search string as 'skip' and reading a YAML header may not work as expected -- currently," +msgstr "" + +msgid "reading will proceed to search for 'skip' from the beginning of the file, NOT from the end of" +msgstr "" + +msgid "the metadata; please file an issue on GitHub if you'd like to see more intuitive behavior supported." +msgstr "" + +msgid "Encountered <" +msgstr "" + +msgid "..." +msgstr "" + +msgid "> at the first" +msgstr "" + +msgid "unskipped line (" +msgstr "" + +msgid "), which does not constitute the start to a valid YAML header" +msgstr "" + +msgid "(expecting something matching regex \"" +msgstr "" + +msgid "\"); please check your input and try again." +msgstr "" + +msgid "Reached the end of the file before finding a completion to the YAML header. A valid YAML header is bookended by lines matching" +msgstr "" + +msgid "the regex \"" +msgstr "" + +msgid "\". Please double check the input file is a valid csvy." +msgstr "" + +msgid "User-supplied 'header' will override that found in metadata." +msgstr "" + +msgid "User-supplied column names in 'col.names' will override those found in YAML metadata." +msgstr "" + +msgid "colClasses dictated by user input and those read from YAML header are in conflict (specifically, for column" +msgstr "" + +msgid "s" +msgstr "" + +msgid "[" +msgstr "" + +msgid "]); the proceeding assumes the user input was" +msgstr "" + +msgid "an intentional override and will ignore the types implied by the YAML header; please exclude" +msgstr "" + +msgid "these columns" +msgstr "" + +msgid "this column from colClasses if this was unintentional." +msgstr "" + +msgid "User-supplied 'sep' will override that found in metadata." +msgstr "" + +msgid "User-supplied 'quote' will override that found in metadata." +msgstr "" + +msgid "User-supplied 'dec' will override that found in metadata." +msgstr "" + +msgid "User-supplied 'na.strings' will override that found in metadata." +msgstr "" + +msgid "Column '" +msgstr "" + +msgid "' was requested to be '" +msgstr "" + +msgid "' but fread encountered the following" +msgstr "" + +msgid "error" +msgstr "" + +msgid "warning" +msgstr "" + +msgid ":" +msgstr "" + +msgid "so the column has been left as type '" +msgstr "" + +msgid "key argument of data.table() must be a character vector naming columns (NB: col.names are applied before this)" +msgstr "" + +msgid "index argument of data.table() must be a character vector naming columns (NB: col.names are applied before this)" +msgstr "" + +msgid "dateTimeAs must be a single string" +msgstr "" + +msgid "dateTimeAs must be 'ISO','squash','epoch' or 'write.csv'" +msgstr "" + +msgid "logicalAsInt has been renamed logical01. Use logical01 only, not both." +msgstr "" + +msgid "x being coerced from class: matrix to data.table" +msgstr "" + +msgid "Input has no columns; doing nothing." +msgstr "" + +msgid "If you intended to overwrite the file at" +msgstr "" + +msgid "with an empty one, please use file.remove first." +msgstr "" + +msgid "Input has no columns; creating an empty file at '" +msgstr "" + +msgid "' and exiting." +msgstr "" + +msgid "'data.table' relies on the package 'yaml' to write the file header; please add this to your library with install.packages('yaml') and try again." +msgstr "" + +msgid "Argument 'x' must be a data.table object" +msgstr "" + +msgid "Argument 'by' must be a character vector of column names used in grouping." +msgstr "" + +msgid "Argument 'id' must be a logical scalar." +msgstr "" + +msgid "Argument 'x' is a 0-column data.table; no measure to apply grouping over." +msgstr "" + +msgid "Input data.table must not contain duplicate column names." +msgstr "" + +msgid "Argument 'by' must have unique column names for grouping." +msgstr "" + +msgid "Argument 'sets' must be a list of character vectors." +msgstr "" + +msgid "All columns used in 'sets' argument must be in 'by' too. Columns used in 'sets' but not present in 'by':" +msgstr "" + +msgid "When using `id=TRUE` the 'x' data.table must not have a column named 'grouping'." +msgstr "" + +msgid "Character vectors in 'sets' list must not have duplicated column names within a single grouping set." +msgstr "" + +msgid "Double counting is going to happen. Argument 'sets' should be unique without taking order into account, unless you really want double counting, then get used to that warning. Otherwise `sets=unique(lapply(sets, sort))` will do the trick." +msgstr "" + +msgid "Expression passed to grouping sets function must not update by reference. Use ':=' on results of your grouping function." +msgstr "" + +msgid "When using `id=TRUE` the 'j' expression must not evaluate to a column named 'grouping'." +msgstr "" + +msgid "There exists duplicated column names in the results, ensure the column passed/evaluated in `j` and those in `by` are not overlapping." +msgstr "" + +msgid "Using integer64 class columns require to have 'bit64' package installed." +msgstr "" + +msgid "internal error, package:xts is on search path but could not be loaded via requireNamespace" +msgstr "" + +msgid "Argument 'sort' should be logical TRUE/FALSE" +msgstr "" + +msgid "Argument 'no.dups' should be logical TRUE/FALSE" +msgstr "" + +msgid "You are trying to join data.tables where" +msgstr "" + +msgid "'x' and 'y' arguments are" +msgstr "" + +msgid "'x' argument is" +msgstr "" + +msgid "'y' argument is" +msgstr "" + +msgid "0 columns data.table." +msgstr "" + +msgid "`by.x` and `by.y` must be of same length." +msgstr "" + +msgid "Supplied both `by` and `by.x/by.y`. `by` argument will be ignored." +msgstr "" + +msgid "A non-empty vector of column names are required for `by.x` and `by.y`." +msgstr "" + +msgid "Elements listed in `by.x` must be valid column names in x." +msgstr "" + +msgid "Elements listed in `by.y` must be valid column names in y." +msgstr "" + +msgid "A non-empty vector of column names for `by` is required." +msgstr "" + +msgid "Elements listed in `by` must be valid column names in x and y" +msgstr "" + +msgid "column names" +msgstr "" + +msgid "are duplicated in the result" +msgstr "" + +msgid "IN DEVELOPMENT built" +msgstr "" + +msgid "using" +msgstr "" + +msgid "threads (see ?getDTthreads). Latest news: r-datatable.com" +msgstr "" + +msgid "**********\nThis development version of data.table was built more than 4 weeks ago. Please update: data.table::update.dev.pkg()\n**********" +msgstr "" + +msgid "**********\nThis installation of data.table has not detected OpenMP support. It should still work but in single-threaded mode." +msgstr "" + +msgid "If this is a Mac, please ensure you are using R>=3.4.0 and have followed our Mac instructions here: https://github.com/Rdatatable/data.table/wiki/Installation." +msgstr "" + +msgid "This warning message should not occur on Windows or Linux. If it does, please file a GitHub issue.\n**********" +msgstr "" + +msgid "There is no" +msgstr "" + +msgid "package in provided repository." +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." +msgstr "" + +msgid "Option 'datatable.old.bywithoutby' has been removed as warned for 2 years. It is now ignored. Please use by=.EACHI instead and stop using this option." +msgstr "" + +msgid "Unexpected base R behaviour: list(x) has copied x" +msgstr "" + +msgid "Unexpected base R behaviour: names<- has copied column contents" +msgstr "" + +msgid "Unexpected base R behaviour: DF[2,2]<- did not copy column 2 which was assigned to" +msgstr "" + +msgid "Unexpected base R behaviour: DF[2,2]<- copied the first column which was not assigned to, too" +msgstr "" + +msgid "Unexpected base R behaviour: DF[2,2]<- has not copied address(DF)" +msgstr "" + +msgid "Reminder to data.table developers: don't use getRversion() internally. Add a behaviour test to .onLoad instead." +msgstr "" + +msgid "Provide either threads= or percent= but not both" +msgstr "" + +msgid "percent= is provided but is length" +msgstr "" + +msgid "percent==" +msgstr "" + +msgid "but should be a number between 2 and 100" +msgstr "" + +msgid "Valid options for col.names are 'auto', 'top', and 'none'" +msgstr "" + +msgid "Column classes will be suppressed when col.names is 'none'" +msgstr "" + +msgid "Internal structure doesn't seem to be a list. Possibly corrupt data.table." +msgstr "" + +msgid "x may no longer be the character name of the data.table. The possibility was undocumented and has been removed." +msgstr "" + +msgid "set2key() is now deprecated. Please use setindex() instead." +msgstr "" + +msgid "set2keyv() is now deprecated. Please use setindexv() instead." +msgstr "" + +msgid "key2() is now deprecated. Please use indices() instead." +msgstr "" + +msgid "key(x)<-value is deprecated and not supported. Please change to use setkey() with perhaps copy(). Has been warning since 2012 and will be an error in future." +msgstr "" + +msgid "x is not a data.table" +msgstr "" + +msgid "cols is not a character vector. Please see further information in ?setkey." +msgstr "" + +msgid "Setting a physical key on .SD is reserved for possible future use; to modify the original data's order by group. Try setindex() instead. Or, set*(copy(.SD)) as a (slow) last resort." +msgstr "" + +msgid "cols is a character vector of zero length. Removed the key, but use NULL instead, or wrap with suppressWarnings() to avoid this warning." +msgstr "" + +msgid "cols is the empty string. Use NULL to remove the key." +msgstr "" + +msgid "cols contains some blanks." +msgstr "" + +msgid "some columns are not in the data.table:" +msgstr "" + +msgid "x contains a column called '.xi'. Conflicts with internal use by data.table." +msgstr "" + +msgid "' is type '" +msgstr "" + +msgid "' which is not supported as a key column type, currently." +msgstr "" + +msgid "Internal error. 'cols' should be character at this point in setkey; please report." +msgstr "" + +msgid "Internal error: index '" +msgstr "" + +msgid "' exists but is invalid" +msgstr "" + +msgid "Use 'if (length(o <- forderv(DT,by))) ...' for efficiency in one step, so you have o as well if not sorted." +msgstr "" + +msgid "x is vector but 'by' is supplied" +msgstr "" + +msgid "x is a single vector, non-NULL 'by' doesn't make sense" +msgstr "" + +msgid "Attempting to order a 0-column data.table or data.frame." +msgstr "" + +msgid "The first item passed to [f]order is a plain list but there are more items. It should be a data.table or data.frame." +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 "New parallel sort has not been implemented for decreasing=TRUE so far. Using one thread." +msgstr "" + +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." +msgstr "" + +msgid "x must be a data.frame or data.table" +msgstr "" + +msgid "na.last must be logical TRUE/FALSE" +msgstr "" + +msgid "cols is not a character vector. Please see further information in ?setorder." +msgstr "" + +msgid "cols is a character vector of zero length. Use NULL instead, or wrap with suppressWarnings() to avoid this warning." +msgstr "" + +msgid "' which is not supported for ordering currently." +msgstr "" + +msgid "'sorted' is TRUE but element" +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" +msgstr "" + +msgid "rows which exceeds .Machine$integer.max ==" +msgstr "" + +msgid "x and y must both be data.tables" +msgstr "" + +msgid "length(by.x) != length(by.y)" +msgstr "" + +msgid "When x's column ('" +msgstr "" + +msgid "') is character, the corresponding column in y ('" +msgstr "" + +msgid "') should be factor or character, but found incompatible type '" +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 '" +msgstr "" + +msgid "argument 'all' should be logical of length one" +msgstr "" + +msgid "x and y must have the same column names" +msgstr "" + +msgid "x and y must have the same column order" +msgstr "" + +msgid "unsupported column type" +msgstr "" + +msgid "found in x or y:" +msgstr "" + +msgid "of x is '" +msgstr "" + +msgid "' but the corresponding item of y is '" +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 "" + +msgid "None of the datasets to compare should contain a column named '.seqn'" +msgstr "" + +msgid "Datasets to compare with 'ignore.row.order' must not have unsupported column types:" +msgstr "" + +msgid "Argument 'tolerance' was forced to lowest accepted value `sqrt(.Machine$double.eps)` from provided" +msgstr "" + +msgid "Duplicate rows in datasets, numeric columns and ignore.row.order cannot be used with non 0 tolerance argument" +msgstr "" + +msgid "Factor columns and ignore.row.order cannot be used with non 0 tolerance argument" +msgstr "" + +msgid "Internal error: factor type mismatch should have been caught earlier" +msgstr "" + +msgid "argument 'fill' ignored, only make sense for type='const'" +msgstr "" + +msgid "order.col='" +msgstr "" + +msgid "' not a column name of info" +msgstr "" + +msgid "data.table package is loaded. Unload or start a fresh R session." +msgstr "" + +msgid "'script' argument should not be NULL" +msgstr "" + +msgid "does not exist" +msgstr "" + +msgid "Timings count mismatch:" +msgstr "" + +msgid "vs" +msgstr "" + +msgid "out of" +msgstr "" + +msgid "in" +msgstr "" + +msgid "on" +msgstr "" + +msgid ". [" +msgstr "" + +msgid "Search" +msgstr "" + +msgid "for test number" +msgstr "" + +msgid "Test" +msgstr "" + +msgid "is invalid: when error= is provided it does not make sense to pass y as well" +msgstr "" + +msgid "Use started.at=proc.time() not Sys.time() (POSIXt and slow)" +msgstr "" + +msgid "make.names='" +msgstr "" + +msgid "' not found in names of input" +msgstr "" + +msgid "make.names=" +msgstr "" + +msgid "is out of range [1,ncol=" +msgstr "" + +msgid "'names' must be TRUE/FALSE or a character vector." +msgstr "" + +msgid "'keep' should contain integer values between" +msgstr "" + +msgid "length(names) (=" +msgstr "" + +msgid ") is not equal to length(" +msgstr "" + +msgid ") (=" +msgstr "" + +msgid ")." +msgstr "" + +msgid "l not type list" +msgstr "" + +msgid "x not boolean" +msgstr "" + +msgid "Some columns are type 'integer64' but package bit64 is not installed. Those columns will print as strange looking floating point data. There is no need to reload the data. Simply install.packages('bit64') to obtain the integer64 print method and print the data again." +msgstr "" + +msgid "Pattern" +msgstr "" + +msgid "not found: [" +msgstr "" + +msgid "Input xts object should not have 'index' column because it would result in duplicate column names. Rename 'index' column in xts or use `keep.rownames=FALSE` and add index manually as another column." +msgstr "" + +msgid "data.table must have a time based column in first position, use `setcolorder` function to change the order, or see ?timeBased for supported types" +msgstr "" + +msgid "Following columns are not numeric and will be omitted:" +msgstr "" diff --git a/po/R-zh_CN.po b/po/R-zh_CN.po new file mode 100644 index 0000000000..2469c2fe1d --- /dev/null +++ b/po/R-zh_CN.po @@ -0,0 +1,2104 @@ +msgid "" +msgstr "" +"Project-Id-Version: data.table 1.12.5\n" +"POT-Creation-Date: 2019-10-04 17:06\n" +"PO-Revision-Date: 2019-10-04 17:06+08\n" +"Last-Translator: Michael Chirico \n" +"Language-Team: Mandarin\n" +"Language: Mandarin\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "data.table package loaded. When developing don't load package" +msgstr "" + +msgid "" +"Internal error -- difftime objects may not be added to IDate, but Ops " +"dispatch should have intervened to prevent this" +msgstr "" + +msgid "binary + is not defined for \"IDate\" objects" +msgstr "" + +msgid "can only subtract from \"IDate\" objects" +msgstr "" + +msgid "Internal error: storage mode of IDate is somehow no longer integer" +msgstr "" + +msgid "unary - is not defined for \"IDate\" objects" +msgstr "" + +msgid "" +"Internal error -- difftime objects may not be subtracted from IDate, but Ops " +"dispatch should have intervened to prevent this" +msgstr "" + +msgid "Valid options for ms are 'truncate'," +msgstr "" + +msgid "'nearest', and 'ceil'." +msgstr "" + +msgid "" +"as.data.table.array method should only be called for arrays with 3+ " +"dimensions; use the matrix method for 2-dimensional arrays" +msgstr "" + +msgid "" +"Argument 'value.name' must be scalar character, non-NA and at least one " +"character" +msgstr "" + +msgid "Argument 'sorted' must be scalar logical and non-NA" +msgstr "" + +msgid "Argument 'na.rm' must be scalar logical and non-NA" +msgstr "" + +msgid "Please provide either 'key' or 'sorted', but not both." +msgstr "" + +msgid "Argument 'value.name' should not overlap with column names in result:" +msgstr "" + +msgid "" +"POSIXlt column type detected and converted to POSIXct. We do not recommend " +"use of POSIXlt at all because it uses 40 bytes to store one date." +msgstr "" + +msgid "Item" +msgstr "" + +msgid "has" +msgstr "" + +msgid "rows but longest item has" +msgstr "" + +msgid "; recycled with remainder." +msgstr "" + +msgid "has 0 rows but longest item has" +msgstr "" + +msgid "; filled with NA" +msgstr "" + +msgid "A column may not be called .SD. That has special meaning." +msgstr "" + +msgid "class must be length 1" +msgstr "" + +msgid "between has been passed an argument x of type logical" +msgstr "" + +msgid "" +"'between' function the 'x' argument is a POSIX class while 'lower' was not, " +"coercion to POSIX failed with:" +msgstr "" + +msgid "" +"'between' function the 'x' argument is a POSIX class while 'upper' was not, " +"coercion to POSIX failed with:" +msgstr "" + +msgid "" +"'between' lower= and upper= are both POSIXct but have different tzone " +"attributes:" +msgstr "" + +msgid ". Please align their time zones." +msgstr "" + +msgid "" +"'between' arguments are all POSIXct but have mismatched tzone attributes:" +msgstr "" + +msgid ". The UTC times will be compared." +msgstr "" + +msgid "trying to use integer64 class when 'bit64' package is not installed" +msgstr "" + +msgid "" +"Not yet implemented NAbounds=TRUE for this non-numeric and non-character type" +msgstr "" + +msgid "Some lower>upper for this non-numeric and non-character type" +msgstr "" + +msgid "RHS has length()" +msgstr "" + +msgid "; expecting length 2." +msgstr "" + +msgid "c" +msgstr "" + +msgid "Perhaps you meant %s?" +msgstr "" + +msgid "The first element should be the lower bound(s);" +msgstr "" + +msgid "the second element should be the upper bound(s)." +msgstr "" + +msgid "x." +msgstr "" + +msgid "is type" +msgstr "" + +msgid "which is not supported by data.table join" +msgstr "" + +msgid "i." +msgstr "" + +msgid "Attempting roll join on factor column when joining x." +msgstr "" + +msgid "to i." +msgstr "" + +msgid ". Only integer, double or character columns may be roll joined." +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 ")" +msgstr "" + +msgid "Incompatible join types:" +msgstr "" + +msgid "is type integer64 but" +msgstr "" + +msgid "is type double and contains fractions" +msgstr "" + +msgid "roll is not implemented for non-equi joins yet." +msgstr "" + +msgid "Column name '_nqgrp_' is reserved for non-equi joins." +msgstr "" + +msgid "key argument of data.table() must be character" +msgstr "" + +msgid "Object '" +msgstr "" + +msgid "' not found. Perhaps you intended" +msgstr "" + +msgid "," +msgstr "" + +msgid "or" +msgstr "" + +msgid "more" +msgstr "" + +msgid "' not found amongst" +msgstr "" + +msgid "and" +msgstr "" + +msgid "Provide either by= or keyby= but not both" +msgstr "" + +msgid "Ignoring keyby= because j= is not supplied" +msgstr "" + +msgid "Ignoring by= because j= is not supplied" +msgstr "" + +msgid "" +"When on= is provided but not i=, on= must be a named list or data.table|" +"frame, and a natural join (i.e. join on common names) is invoked. Ignoring " +"on= which is '" +msgstr "" + +msgid "'." +msgstr "" + +msgid "" +"i and j are both missing so ignoring the other arguments. This warning will " +"be upgraded to error in future." +msgstr "" + +msgid "mult argument can only be 'first', 'last' or 'all'" +msgstr "" + +msgid "" +"roll must be a single TRUE, FALSE, positive/negative integer/double " +"including +Inf and -Inf or 'nearest'" +msgstr "" + +msgid "roll is '" +msgstr "" + +msgid "' (type character). Only valid character value is 'nearest'." +msgstr "" + +msgid "rollends must be a logical vector" +msgstr "" + +msgid "rollends must be length 1 or 2" +msgstr "" + +msgid "" +"nomatch= must be either NA or NULL (or 0 for backwards compatibility which " +"is the same as NULL)" +msgstr "" + +msgid "which= must be a logical vector length 1. Either FALSE, TRUE or NA." +msgstr "" + +msgid "which==" +msgstr "" + +msgid "" +"(meaning return row numbers) but j is also supplied. Either you need row " +"numbers or the result of j, but only one type of result can be returned." +msgstr "" + +msgid "" +"which=NA with nomatch=0 would always return an empty vector. Please change " +"or remove either which or nomatch." +msgstr "" + +msgid "j must be provided when with=FALSE" +msgstr "" + +msgid "" +"The symbol .. is invalid. The .. prefix must be followed by at least one " +"character." +msgstr "" + +msgid "Variable '" +msgstr "" + +msgid "" +"' is not found in calling scope. Looking in calling scope because you used " +"the .. prefix." +msgstr "" + +msgid "Variable '.." +msgstr "" + +msgid "" +"' does exist in calling scope though, so please just removed the .. prefix " +"from that variable name in calling scope." +msgstr "" + +msgid "Both '" +msgstr "" + +msgid "' and '.." +msgstr "" + +msgid "' exist in calling scope. Please remove the '.." +msgstr "" + +msgid "' variable in calling scope for clarity." +msgstr "" + +msgid "" +"Internal error: DT[, ..var] should be dealt with by the branch above now." +msgstr "" + +msgid "" +"' is not found in calling scope. Looking in calling scope because you set " +"with=FALSE. Also, please use .. symbol prefix and remove with=FALSE." +msgstr "" + +msgid "" +"You have wrapped := with {} which is ok but then := must be the only thing " +"inside {}. You have something else inside {} as well. Consider placing the " +"{} on the RHS of := instead; e.g. DT[,someCol:={tmpVar1<-...;tmpVar2<-...;" +"tmpVar1*tmpVar2}" +msgstr "" + +msgid "" +":= with keyby is only possible when i is not supplied since you can't setkey " +"on a subset of rows. Either change keyby to by or remove i" +msgstr "" + +msgid "nomatch isn't relevant together with :=, ignoring nomatch" +msgstr "" + +msgid "" +"not-join '!' prefix is present on i but nomatch is provided. Please remove " +"nomatch." +msgstr "" + +msgid "is not found in calling scope" +msgstr "" + +msgid "" +"When the first argument inside DT[...] is a single symbol (e.g. DT[var]), " +"data.table looks for var in calling scope." +msgstr "" + +msgid "" +"i is invalid type (matrix). Perhaps in future a 2 column matrix could return " +"a list of elements of DT (in the spirit of A[B] in FAQ 2.14). Please report " +"to data.table issue tracker if you'd like this, or add your comments to FR " +"#657." +msgstr "" + +msgid "" +"When i is a data.table (or character vector), the columns to join by must be " +"specified using 'on=' argument (see ?data.table), by keying x (i.e. sorted, " +"and, marked as sorted, see ?setkey), or by sharing column names between x " +"and i (i.e., a natural join). Keyed joins might have further speed benefits " +"on very large data due to x being sorted in RAM." +msgstr "" + +msgid "Attempting to do natural join but no common columns in provided tables" +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 "logical error. i is not a data.table, but 'on' argument is provided." +msgstr "" + +msgid "i has evaluated to type" +msgstr "" + +msgid ". Expecting logical, integer or double." +msgstr "" + +msgid "i evaluates to a logical vector length" +msgstr "" + +msgid "but there are" +msgstr "" + +msgid "" +"rows. Recycling of logical i is no longer allowed as it hides more bugs than " +"is worth the rare convenience. Explicitly use rep(...,length=.N) if you " +"really need to recycle." +msgstr "" + +msgid "Internal error: notjoin but byjoin or !integer or nomatch==NA" +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 "" + +msgid "" +"with=FALSE ignored, it isn't needed when using :=. See ?':=' for examples." +msgstr "" + +msgid "column(s) not removed because not found:" +msgstr "" + +msgid "column(s) not found:" +msgstr "" + +msgid "of j is" +msgstr "" + +msgid "which is outside the column number range [1,ncol=" +msgstr "" + +msgid "]" +msgstr "" + +msgid "j mixes positives and negatives" +msgstr "" + +msgid "" +"When with=FALSE, j-argument should be of type logical/character/integer " +"indicating the columns to select." +msgstr "" + +msgid "by=c(...), key(...) or names(...) must evaluate to 'character'" +msgstr "" + +msgid "'by' is a character vector length" +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 "Internal error: irows isn't integer" +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 "" + +msgid "" +"should work. This is for efficiency so data.table can detect which columns " +"are needed." +msgstr "" + +msgid "" +"'by' or 'keyby' must evaluate to a vector or a list of vectors (where 'list' " +"includes data.table and data.frame which are lists, too)" +msgstr "" + +msgid "column or expression" +msgstr "" + +msgid "of 'by' or 'keyby' is type" +msgstr "" + +msgid "" +". Do not quote column names. Usage: DT[,sum(colC),by=list(colA,month(colB))]" +msgstr "" + +msgid "The items in the 'by' or 'keyby' list are length (" +msgstr "" + +msgid "). Each must be length" +msgstr "" + +msgid "" +"; the same length as there are rows in x (after subsetting if i is provided)." +msgstr "" + +msgid "of the .() or list() passed to j is missing" +msgstr "" + +msgid ".SDcols missing at the following indices:" +msgstr "" + +msgid ".SDcols is numeric but has both +ve and -ve indices" +msgstr "" + +msgid ".SDcols is numeric but out of bounds [1," +msgstr "" + +msgid "] at:" +msgstr "" + +msgid ".SDcols should be column numbers or names" +msgstr "" + +msgid "Some items of .SDcols are not column names:" +msgstr "" + +msgid "" +"This j doesn't use .SD but .SDcols has been supplied. Ignoring .SDcols. See ?" +"data.table." +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 "" + +msgid "In `:=`(col1=val1, col2=val2, ...) form, all arguments must be named." +msgstr "" + +msgid "" +"LHS of := must be a symbol, or an atomic vector (column names or positions)." +msgstr "" + +msgid "" +"LHS of := appears to be column positions but are outside [1,ncol] range. New " +"columns can only be added by name." +msgstr "" + +msgid "" +"LHS of := isn't column names ('character') or positions ('integer' or " +"'numeric')" +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 "" +"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 "" + +msgid "Internal error -- item '" +msgstr "" + +msgid "' not found in names of list" +msgstr "" + +msgid "Internal error -- column(s) not found:" +msgstr "" + +msgid "" +"strptime() usage detected and wrapped with as.POSIXct(). This is to minimize " +"the chance of assigning POSIXlt columns, which use 40+ bytes to store one " +"date (versus 8 for POSIXct). Use as.POSIXct() (which will call strptime() as " +"needed internally) to avoid this warning." +msgstr "" + +msgid "" +"' is not found in calling scope. Looking in calling scope because this " +"symbol was prefixed with .. in the j= parameter." +msgstr "" + +msgid "Internal error: xcolAns does not pass checks:" +msgstr "" + +msgid "" +"Internal error: irows is NULL when making join result at R level. Should no " +"longer happen now we use CsubsetDT earlier." +msgstr "" + +msgid "j (the 2nd argument inside [...]) is a single symbol but column name '" +msgstr "" + +msgid "' is not found. Perhaps you intended DT[, .." +msgstr "" + +msgid "" +"]. This difference to data.frame is deliberate and explained in FAQ 1.1." +msgstr "" + +msgid "" +"Internal error: j has created a data.table result containing a NULL column" +msgstr "" + +msgid "" +"The column '.N' can't be grouped because it conflicts with the special .N " +"variable. Try setnames(DT,'.N','N') first." +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 "logical error. i is not data.table, but mult='all' and 'by'=.EACHI" +msgstr "" + +msgid "Internal error: by= is missing" +msgstr "" + +msgid "Internal error: byindex not the index name" +msgstr "" + +msgid "Internal error: byindex not found" +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 "Internal error: length(irows)!=length(o__)" +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 "" + +msgid "Internal error: jvnames is length" +msgstr "" + +msgid "but ans is" +msgstr "" + +msgid "and bynames is" +msgstr "" + +msgid "rownames and rownames.value cannot both be used at the same time" +msgstr "" + +msgid "length(rownames)==" +msgstr "" + +msgid "but nrow(DT)==" +msgstr "" + +msgid "" +". The rownames argument specifies a single column name or number. Consider " +"rownames.value= instead." +msgstr "" + +msgid "" +"length(rownames)==0 but should be a single column name or number, or NULL" +msgstr "" + +msgid "rownames is TRUE but key has multiple columns" +msgstr "" + +msgid "; taking first column x[,1] as rownames" +msgstr "" + +msgid "'" +msgstr "" + +msgid "' is not a column of x" +msgstr "" + +msgid "as.integer(rownames)==" +msgstr "" + +msgid "]." +msgstr "" + +msgid "length(rownames.value)==" +msgstr "" + +msgid "but should be nrow(x)==" +msgstr "" + +msgid "" +"When i is a matrix in DT[i]<-value syntax, it doesn't make sense to provide j" +msgstr "" + +msgid "j must be an atomic vector, see ?is.atomic" +msgstr "" + +msgid "NA in j" +msgstr "" + +msgid "j must be vector of column name or positions" +msgstr "" + +msgid "" +"Attempt to assign to column position greater than ncol(x). Create the column " +"by name, instead. This logic intends to catch (most likely) user errors." +msgstr "" + +msgid "" +"data.table inherits from data.frame (from v1.5), but this data.table does " +"not. Has it been created manually (e.g. by using 'structure' rather than " +"'data.table') or saved to disk using a prior version of data.table?" +msgstr "" + +msgid "attempting to assign invalid object to dimnames of a data.table" +msgstr "" + +msgid "data.tables do not have rownames" +msgstr "" + +msgid "Can't assign" +msgstr "" + +msgid "colnames to a" +msgstr "" + +msgid "-column data.table" +msgstr "" + +msgid "'subset' must evaluate to logical" +msgstr "" + +msgid "Argument 'invert' must be logical TRUE/FALSE" +msgstr "" + +msgid "x argument must be a data.table" +msgstr "" + +msgid "group length is 0 but data nrow > 0" +msgstr "" + +msgid "" +"passing 'f' argument together with 'by' is not allowed, use 'by' when split " +"by column in data.table and 'f' when split by external factor" +msgstr "" + +msgid "Either 'by' or 'f' argument must be supplied" +msgstr "" + +msgid "Column '.ll.tech.split' is reserved for split.data.table processing" +msgstr "" + +msgid "Column '.nm.tech.split' is reserved for split.data.table processing" +msgstr "" + +msgid "Argument 'by' must refer to column names in x" +msgstr "" + +msgid "" +"Argument 'by' must refer only to atomic-type columns, but the following " +"columns are non-atomic:" +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 "" + +msgid "setalloccol attempting to modify `*tmp*`" +msgstr "" + +msgid "" +"Input is a length=1 logical that points to the same address as R's global " +"value. Therefore the attribute has not been set by reference, rather on a " +"copy. You will need to assign the result back to a variable. See issue #1281." +msgstr "" + +msgid "x is not a data.table or data.frame" +msgstr "" + +msgid "x has" +msgstr "" + +msgid "columns but its names are length" +msgstr "" + +msgid "Passed a vector of type '" +msgstr "" + +msgid "'. Needs to be type 'character'." +msgstr "" + +msgid "names to a" +msgstr "" + +msgid "column data.table" +msgstr "" + +msgid "When 'new' is provided, 'old' must be provided too" +msgstr "" + +msgid "'new' is not a character vector or a function" +msgstr "" + +msgid "NA in 'new' at positions" +msgstr "" + +msgid "Some duplicates exist in 'old':" +msgstr "" + +msgid "'old' is type" +msgstr "" + +msgid "but should be integer, double or character" +msgstr "" + +msgid "'old' is length" +msgstr "" + +msgid "but 'new' is length" +msgstr "" + +msgid "NA (or out of bounds) in 'old' at positions" +msgstr "" + +msgid "of 'old' is '" +msgstr "" + +msgid "" +"' which appears several times in column names. Just the first will be " +"changed. There are" +msgstr "" + +msgid "other items in old that are also duplicated in column names." +msgstr "" + +msgid "Items of 'old' not found in column names:" +msgstr "" + +msgid ". Consider skip_absent=TRUE." +msgstr "" + +msgid "Internal error: length(i)!=length(new)" +msgstr "" + +msgid "x has some duplicated column name(s):" +msgstr "" + +msgid ". Please remove or rename the duplicate(s) and try again." +msgstr "" + +msgid "Input is" +msgstr "" + +msgid "but should be a plain list of items to be stacked" +msgstr "" + +msgid "" +"idcol must be a logical or character vector of length 1. If logical TRUE the " +"id column will named '.id'." +msgstr "" + +msgid "use.names=NA invalid" +msgstr "" + +msgid "" +"use.names='check' cannot be used explicitly because the value 'check' is new " +"in v1.12.2 and subject to change. It is just meant to convey default " +"behavior. See ?rbindlist." +msgstr "" + +msgid "" +"Check that is.data.table(DT) == TRUE. Otherwise, := and `:=`(...) are " +"defined for use in j, once only and in particular ways. See help(\":=\")." +msgstr "" + +msgid "" +"setDF only accepts data.table, data.frame or list of equal length as input" +msgstr "" + +msgid "rownames contains duplicates" +msgstr "" + +msgid "rownames incorrect length; expected" +msgstr "" + +msgid "names, got" +msgstr "" + +msgid "All elements in argument 'x' to 'setDF' must be of same length" +msgstr "" + +msgid "Cannot find symbol" +msgstr "" + +msgid "Cannot convert '" +msgstr "" + +msgid "" +"' to data.table by reference because binding is locked. It is very likely " +"that '" +msgstr "" + +msgid "" +"' resides within a package (or an environment) that is locked to prevent " +"modifying its variable bindings. Try copying the object to your current " +"environment, ex: var <- copy(var) and then using setDT again." +msgstr "" + +msgid "Some columns are a multi-column type (such as a matrix column):" +msgstr "" + +msgid "" +". setDT will retain these columns as-is but subsequent operations like " +"grouping and joining may fail. Please consider as.data.table() instead which " +"will create a new column for each embedded column." +msgstr "" + +msgid "Column" +msgstr "" + +msgid "" +"is of POSIXlt type. Please convert it to POSIXct using as.POSIXct and run " +"setDT again. We do not recommend use of POSIXlt at all because it uses 40 " +"bytes to store one date." +msgstr "" + +msgid "" +"All elements in argument 'x' to 'setDT' must be of same length, but the " +"profile of input lengths (length:frequency) is:" +msgstr "" + +msgid "%s:%d" +msgstr "" + +msgid "The first entry with fewer than" +msgstr "" + +msgid "entries is" +msgstr "" + +msgid "" +"Argument 'x' to 'setDT' should be a 'list', 'data.frame' or 'data.table'" +msgstr "" + +msgid "Item '" +msgstr "" + +msgid "' not found in names of input list" +msgstr "" + +msgid "'prefix' must be NULL or a character vector of length 1." +msgstr "" + +msgid "x is a single vector, non-NULL 'cols' doesn't make sense." +msgstr "" + +msgid "x is a list, 'cols' cannot be 0-length." +msgstr "" + +msgid "RHS of" +msgstr "" + +msgid "is length" +msgstr "" + +msgid "which is not 1 or nrow (" +msgstr "" + +msgid "" +"). For robustness, no recycling is allowed (other than of length 1 RHS). " +"Consider %in% instead." +msgstr "" + +msgid "" +"Internal error in .isFastSubsettable. Please report to data.table developers" +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 "" + +msgid "Found more than one operator in one 'on' statement:" +msgstr "" + +msgid ". Please specify a single operator." +msgstr "" + +msgid "'on' contains no column name:" +msgstr "" + +msgid ". Each 'on' clause must contain one or two column names." +msgstr "" + +msgid "'on' contains more than 2 column names:" +msgstr "" + +msgid "Invalid operators" +msgstr "" + +msgid ". Only allowed operators are" +msgstr "" + +msgid "." +msgstr "" + +msgid "'fromLast' must be TRUE or FALSE" +msgstr "" + +msgid "x must be an atomic vector or data.frames/data.tables" +msgstr "" + +msgid "Using '" +msgstr "" + +msgid "' as value column. Use 'value.var' to override" +msgstr "" + +msgid "The dcast generic in data.table has been passed a" +msgstr "" + +msgid "" +", but data.table::dcast currently only has a method for data.tables. Please " +"confirm your input is a data.table, with setDT(" +msgstr "" + +msgid ") or as.data.table(" +msgstr "" + +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 "" + +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 "" + +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." +msgstr "" + +msgid "data.table to cast must have unique column names" +msgstr "" + +msgid "value.var values [" +msgstr "" + +msgid "] are not found in 'data'." +msgstr "" + +msgid "" +"When 'fun.aggregate' and 'value.var' are both lists, 'value.var' must be " +"either of length =1 or =length(fun.aggregate)." +msgstr "" + +msgid "'data' must be a data.table." +msgstr "" + +msgid "'drop' must be logical TRUE/FALSE" +msgstr "" + +msgid "Column [" +msgstr "" + +msgid "] not found or of unknown type." +msgstr "" + +msgid "Columns specified in formula can not be of type list" +msgstr "" + +msgid "Can not cast an empty data.table" +msgstr "" + +msgid "Aggregate function missing, defaulting to 'length'" +msgstr "" + +msgid "Internal error -- empty rhsnames in dcast; please report" +msgstr "" + +msgid "The melt generic in data.table has been passed a" +msgstr "" + +msgid "" +", but data.table::melt currently only has a method for data.tables. Please " +"confirm your input is a data.table, with setDT(" +msgstr "" + +msgid "" +"). If you intend to use a method from reshape2, try installing that package " +"first, but do note that reshape2 is deprecated and you should be migrating " +"your code away from using it." +msgstr "" + +msgid "" +"and will attempt to redirect to the relevant reshape2 method; please note " +"that reshape2 is deprecated, and this redirection is now deprecated as well. " +"To continue using melt methods from reshape2 while both libraries are " +"attached, e.g. melt.list, you can prepend the namespace like reshape2::melt(" +msgstr "" + +msgid "Input patterns must be of type character." +msgstr "" + +msgid "'data' must be a data.table" +msgstr "" + +msgid "'value.name' provided in both 'measure.vars'" +msgstr "" + +msgid "and 'value.name argument'; value provided in" +msgstr "" + +msgid "'measure.vars' is given precedence." +msgstr "" + +msgid "Please provide a name to each element of 'measure.vars'." +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 "" + +msgid "maxgap must be a non-negative integer value of length 1" +msgstr "" + +msgid "minoverlap must be a positive integer value of length 1" +msgstr "" + +msgid "which must be a logical vector of length 1. Either TRUE/FALSE" +msgstr "" + +msgid "nomatch must either be NA or NULL" +msgstr "" + +msgid "maxgap and minoverlap arguments are not yet implemented." +msgstr "" + +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 "" + +msgid "" +"'by.x' and 'by.y' should contain at least two column names (or numbers) each " +"- corresponding to 'start' and 'end' points of intervals. Please see ?" +"foverlaps and examples for more info." +msgstr "" + +msgid "" +"Invalid numeric value for 'by.x'; it should be a vector with values 1 <= by." +"x <= length(x)" +msgstr "" + +msgid "" +"Invalid numeric value for 'by.y'; it should be a vector with values 1 <= by." +"y <= length(y)" +msgstr "" + +msgid "A non-empty vector of column names or numbers is required for by.x" +msgstr "" + +msgid "A non-empty vector of column names or numbers is required for by.y" +msgstr "" + +msgid "The first" +msgstr "" + +msgid "columns of y's key must be identical to the columns specified in by.y." +msgstr "" + +msgid "Elements listed in 'by.x' must be valid names in data.table 'x'" +msgstr "" + +msgid "" +"Duplicate columns are not allowed in overlap joins. This may change in the " +"future." +msgstr "" + +msgid "" +"length(by.x) != length(by.y). Columns specified in by.x should correspond to " +"columns specified in by.y and should be of same lengths." +msgstr "" + +msgid "y has some duplicated column name(s):" +msgstr "" + +msgid "" +"The last two columns in by.x should correspond to the 'start' and 'end' " +"intervals in data.table 'x' and must be integer/numeric type." +msgstr "" + +msgid "NA values in data.table 'x' start column: '" +msgstr "" + +msgid "" +"'. All rows with NA values in the range columns must be removed for " +"foverlaps() to work." +msgstr "" + +msgid "NA values in data.table 'x' end column: '" +msgstr "" + +msgid "All entries in column" +msgstr "" + +msgid "should be <= corresponding entries in column" +msgstr "" + +msgid "in data.table 'x'." +msgstr "" + +msgid "" +"The last two columns in by.y should correspond to the 'start' and 'end' " +"intervals in data.table 'y' and must be integer/numeric type." +msgstr "" + +msgid "NA values in data.table 'y' start column: '" +msgstr "" + +msgid "NA values in data.table 'y' end column: '" +msgstr "" + +msgid "in data.table 'y'." +msgstr "" + +msgid "" +"Some interval cols are of type POSIXct while others are not. Please ensure " +"all interval cols are (or are not) of POSIXct type" +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 "Not yet implemented" +msgstr "" + +msgid "maxgap > minoverlap. maxgap will have no effect here." +msgstr "" + +msgid "length(na.last) = 0" +msgstr "" + +msgid "length(na.last) > 1, only the first element will be used" +msgstr "" + +msgid "x is a single vector, non-NULL 'cols' doesn't make sense" +msgstr "" + +msgid "x is a list, 'cols' can not be 0-length" +msgstr "" + +msgid "Used more than one of the arguments input=, file=, text= and cmd=." +msgstr "" + +msgid "Argument 'encoding' must be 'unknown', 'UTF-8' or 'Latin-1'." +msgstr "" + +msgid "'text=' is type" +msgstr "" + +msgid "but must be character." +msgstr "" + +msgid "" +"input= must be a single character string containing a file name, a system " +"command containing at least one space, a URL starting 'http[s]://', " +"'ftp[s]://' or 'file://', or, the input data itself containing at least one " +"\\n or \\r" +msgstr "" + +msgid "" +"input= contains no \\n or \\r, but starts with a space. Please remove the " +"leading space, or use text=, file= or cmd=" +msgstr "" + +msgid "" +"Input URL requires https:// connection for which fread() requires 'curl' " +"package which cannot be found. Please install 'curl' using 'install." +"packages('curl')'." +msgstr "" + +msgid "Taking input= as a system command ('" +msgstr "" + +msgid "" +"') and a variable has been used in the expression passed to `input=`. Please " +"use fread(cmd=...). There is a security concern if you are creating an app, " +"and the app could have a malicious user, and the app is not running in a " +"secure environment; e.g. the app is running as root. Please read item 5 in " +"the NEWS file for v1.11.6 for more information and for the option to " +"suppress this message." +msgstr "" + +msgid "File '" +msgstr "文件'" + +msgid "' does not exist or is non-readable. getwd()=='" +msgstr "" + +msgid "' is a directory. Not yet implemented." +msgstr "'是个目录。还没有编程实现。" + +msgid "' has size 0. Returning a NULL" +msgstr "" + +msgid "data.table" +msgstr "" + +msgid "data.frame" +msgstr "" + +msgid "" +"To read gz and bz2 files directly, fread() requires 'R.utils' package which " +"cannot be found. Please install 'R.utils' using 'install.packages('R." +"utils')'." +msgstr "" + +msgid "" +"'autostart' is now deprecated and ignored. Consider skip='string' or skip=n" +msgstr "" + +msgid "" +"colClasses is type 'logical' which is ok if all NA but it has some TRUE or " +"FALSE values in it which is not allowed. Please consider the drop= or " +"select= argument instead. See ?fread." +msgstr "" + +msgid "colClasses is not type list or character vector" +msgstr "" + +msgid "" +"colClasses=\"NULL\" (quoted) is interpreted as colClasses=NULL (the default) " +"as opposed to dropping every column." +msgstr "" + +msgid "" +"strip.white==TRUE (default) and \"\" is present in na.strings, so any number " +"of spaces in string columns will already be read as ." +msgstr "" + +msgid "" +"Since strip.white=TRUE (default), use na.strings=\"\" to specify that any " +"number of spaces in a string column should be read as ." +msgstr "" + +msgid "" +"But strip.white=FALSE. Use strip.white=TRUE (default) together with na." +"strings=\"\" to turn any number of spaces in string columns into " +msgstr "" + +msgid "" +"'data.table' relies on the package 'yaml' to parse the file header; please " +"add this to your library with install.packages('yaml') and try again." +msgstr "" + +msgid "" +"Combining a search string as 'skip' and reading a YAML header may not work " +"as expected -- currently," +msgstr "" + +msgid "" +"reading will proceed to search for 'skip' from the beginning of the file, " +"NOT from the end of" +msgstr "" + +msgid "" +"the metadata; please file an issue on GitHub if you'd like to see more " +"intuitive behavior supported." +msgstr "" + +msgid "Encountered <" +msgstr "" + +msgid "..." +msgstr "" + +msgid "> at the first" +msgstr "" + +msgid "unskipped line (" +msgstr "" + +msgid "), which does not constitute the start to a valid YAML header" +msgstr "" + +msgid "(expecting something matching regex \"" +msgstr "" + +msgid "\"); please check your input and try again." +msgstr "" + +msgid "" +"Reached the end of the file before finding a completion to the YAML header. " +"A valid YAML header is bookended by lines matching" +msgstr "" + +msgid "the regex \"" +msgstr "" + +msgid "\". Please double check the input file is a valid csvy." +msgstr "" + +msgid "User-supplied 'header' will override that found in metadata." +msgstr "" + +msgid "" +"User-supplied column names in 'col.names' will override those found in YAML " +"metadata." +msgstr "" + +msgid "" +"colClasses dictated by user input and those read from YAML header are in " +"conflict (specifically, for column" +msgstr "" + +msgid "s" +msgstr "" + +msgid "[" +msgstr "" + +msgid "]); the proceeding assumes the user input was" +msgstr "" + +msgid "" +"an intentional override and will ignore the types implied by the YAML " +"header; please exclude" +msgstr "" + +msgid "these columns" +msgstr "" + +msgid "this column from colClasses if this was unintentional." +msgstr "" + +msgid "User-supplied 'sep' will override that found in metadata." +msgstr "" + +msgid "User-supplied 'quote' will override that found in metadata." +msgstr "" + +msgid "User-supplied 'dec' will override that found in metadata." +msgstr "" + +msgid "User-supplied 'na.strings' will override that found in metadata." +msgstr "" + +msgid "Column '" +msgstr "" + +msgid "' was requested to be '" +msgstr "" + +msgid "' but fread encountered the following" +msgstr "" + +msgid "error" +msgstr "" + +msgid "warning" +msgstr "" + +msgid ":" +msgstr "" + +msgid "so the column has been left as type '" +msgstr "" + +msgid "" +"key argument of data.table() must be a character vector naming columns (NB: " +"col.names are applied before this)" +msgstr "" + +msgid "" +"index argument of data.table() must be a character vector naming columns " +"(NB: col.names are applied before this)" +msgstr "" + +msgid "dateTimeAs must be a single string" +msgstr "" + +msgid "dateTimeAs must be 'ISO','squash','epoch' or 'write.csv'" +msgstr "" + +msgid "logicalAsInt has been renamed logical01. Use logical01 only, not both." +msgstr "" + +msgid "x being coerced from class: matrix to data.table" +msgstr "" + +msgid "Input has no columns; doing nothing." +msgstr "" + +msgid "If you intended to overwrite the file at" +msgstr "" + +msgid "with an empty one, please use file.remove first." +msgstr "" + +msgid "Input has no columns; creating an empty file at '" +msgstr "" + +msgid "' and exiting." +msgstr "" + +msgid "" +"'data.table' relies on the package 'yaml' to write the file header; please " +"add this to your library with install.packages('yaml') and try again." +msgstr "" + +msgid "Argument 'x' must be a data.table object" +msgstr "" + +msgid "" +"Argument 'by' must be a character vector of column names used in grouping." +msgstr "" + +msgid "Argument 'id' must be a logical scalar." +msgstr "" + +msgid "" +"Argument 'x' is a 0-column data.table; no measure to apply grouping over." +msgstr "" + +msgid "Input data.table must not contain duplicate column names." +msgstr "" + +msgid "Argument 'by' must have unique column names for grouping." +msgstr "" + +msgid "Argument 'sets' must be a list of character vectors." +msgstr "" + +msgid "" +"All columns used in 'sets' argument must be in 'by' too. Columns used in " +"'sets' but not present in 'by':" +msgstr "" + +msgid "" +"When using `id=TRUE` the 'x' data.table must not have a column named " +"'grouping'." +msgstr "" + +msgid "" +"Character vectors in 'sets' list must not have duplicated column names " +"within a single grouping set." +msgstr "" + +msgid "" +"Double counting is going to happen. Argument 'sets' should be unique without " +"taking order into account, unless you really want double counting, then get " +"used to that warning. Otherwise `sets=unique(lapply(sets, sort))` will do " +"the trick." +msgstr "" + +msgid "" +"Expression passed to grouping sets function must not update by reference. " +"Use ':=' on results of your grouping function." +msgstr "" + +msgid "" +"When using `id=TRUE` the 'j' expression must not evaluate to a column named " +"'grouping'." +msgstr "" + +msgid "" +"There exists duplicated column names in the results, ensure the column " +"passed/evaluated in `j` and those in `by` are not overlapping." +msgstr "" + +msgid "" +"Using integer64 class columns require to have 'bit64' package installed." +msgstr "" + +msgid "" +"internal error, package:xts is on search path but could not be loaded via " +"requireNamespace" +msgstr "" + +msgid "Argument 'sort' should be logical TRUE/FALSE" +msgstr "" + +msgid "Argument 'no.dups' should be logical TRUE/FALSE" +msgstr "" + +msgid "You are trying to join data.tables where" +msgstr "" + +msgid "'x' and 'y' arguments are" +msgstr "" + +msgid "'x' argument is" +msgstr "" + +msgid "'y' argument is" +msgstr "" + +msgid "0 columns data.table." +msgstr "" + +msgid "`by.x` and `by.y` must be of same length." +msgstr "" + +msgid "Supplied both `by` and `by.x/by.y`. `by` argument will be ignored." +msgstr "" + +msgid "A non-empty vector of column names are required for `by.x` and `by.y`." +msgstr "" + +msgid "Elements listed in `by.x` must be valid column names in x." +msgstr "" + +msgid "Elements listed in `by.y` must be valid column names in y." +msgstr "" + +msgid "A non-empty vector of column names for `by` is required." +msgstr "" + +msgid "Elements listed in `by` must be valid column names in x and y" +msgstr "" + +msgid "column names" +msgstr "" + +msgid "are duplicated in the result" +msgstr "" + +msgid "IN DEVELOPMENT built" +msgstr "" + +msgid "using" +msgstr "" + +msgid "threads (see ?getDTthreads). Latest news: r-datatable.com" +msgstr "" + +msgid "" +"**********\n" +"This development version of data.table was built more than 4 weeks ago. " +"Please update: data.table::update.dev.pkg()\n" +"**********" +msgstr "" + +msgid "" +"**********\n" +"This installation of data.table has not detected OpenMP support. It should " +"still work but in single-threaded mode." +msgstr "" + +msgid "" +"If this is a Mac, please ensure you are using R>=3.4.0 and have followed our " +"Mac instructions here: https://github.com/Rdatatable/data.table/wiki/" +"Installation." +msgstr "" + +msgid "" +"This warning message should not occur on Windows or Linux. If it does, " +"please file a GitHub issue.\n" +"**********" +msgstr "" + +msgid "There is no" +msgstr "" + +msgid "package in provided repository." +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." +msgstr "" + +msgid "" +"Option 'datatable.old.bywithoutby' has been removed as warned for 2 years. " +"It is now ignored. Please use by=.EACHI instead and stop using this option." +msgstr "" + +msgid "Unexpected base R behaviour: list(x) has copied x" +msgstr "" + +msgid "Unexpected base R behaviour: names<- has copied column contents" +msgstr "" + +msgid "" +"Unexpected base R behaviour: DF[2,2]<- did not copy column 2 which was " +"assigned to" +msgstr "" + +msgid "" +"Unexpected base R behaviour: DF[2,2]<- copied the first column which was not " +"assigned to, too" +msgstr "" + +msgid "Unexpected base R behaviour: DF[2,2]<- has not copied address(DF)" +msgstr "" + +msgid "" +"Reminder to data.table developers: don't use getRversion() internally. Add a " +"behaviour test to .onLoad instead." +msgstr "" + +msgid "Provide either threads= or percent= but not both" +msgstr "" + +msgid "percent= is provided but is length" +msgstr "" + +msgid "percent==" +msgstr "" + +msgid "but should be a number between 2 and 100" +msgstr "" + +msgid "Valid options for col.names are 'auto', 'top', and 'none'" +msgstr "" + +msgid "Column classes will be suppressed when col.names is 'none'" +msgstr "" + +msgid "" +"Internal structure doesn't seem to be a list. Possibly corrupt data.table." +msgstr "" + +msgid "" +"x may no longer be the character name of the data.table. The possibility was " +"undocumented and has been removed." +msgstr "" + +msgid "set2key() is now deprecated. Please use setindex() instead." +msgstr "" + +msgid "set2keyv() is now deprecated. Please use setindexv() instead." +msgstr "" + +msgid "key2() is now deprecated. Please use indices() instead." +msgstr "" + +msgid "" +"key(x)<-value is deprecated and not supported. Please change to use setkey() " +"with perhaps copy(). Has been warning since 2012 and will be an error in " +"future." +msgstr "" + +msgid "x is not a data.table" +msgstr "" + +msgid "" +"cols is not a character vector. Please see further information in ?setkey." +msgstr "" + +msgid "" +"Setting a physical key on .SD is reserved for possible future use; to modify " +"the original data's order by group. Try setindex() instead. Or, set*(copy(." +"SD)) as a (slow) last resort." +msgstr "" + +msgid "" +"cols is a character vector of zero length. Removed the key, but use NULL " +"instead, or wrap with suppressWarnings() to avoid this warning." +msgstr "" + +msgid "cols is the empty string. Use NULL to remove the key." +msgstr "" + +msgid "cols contains some blanks." +msgstr "" + +msgid "some columns are not in the data.table:" +msgstr "" + +msgid "" +"x contains a column called '.xi'. Conflicts with internal use by data.table." +msgstr "" + +msgid "' is type '" +msgstr "" + +msgid "' which is not supported as a key column type, currently." +msgstr "" + +msgid "" +"Internal error. 'cols' should be character at this point in setkey; please " +"report." +msgstr "" + +msgid "Internal error: index '" +msgstr "" + +msgid "' exists but is invalid" +msgstr "" + +msgid "" +"Use 'if (length(o <- forderv(DT,by))) ...' for efficiency in one step, so " +"you have o as well if not sorted." +msgstr "" + +msgid "x is vector but 'by' is supplied" +msgstr "" + +msgid "x is a single vector, non-NULL 'by' doesn't make sense" +msgstr "" + +msgid "Attempting to order a 0-column data.table or data.frame." +msgstr "" + +msgid "" +"The first item passed to [f]order is a plain list but there are more items. " +"It should be a data.table or data.frame." +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 "" +"New parallel sort has not been implemented for decreasing=TRUE so far. Using " +"one thread." +msgstr "" + +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." +msgstr "" + +msgid "x must be a data.frame or data.table" +msgstr "" + +msgid "na.last must be logical TRUE/FALSE" +msgstr "" + +msgid "" +"cols is not a character vector. Please see further information in ?setorder." +msgstr "" + +msgid "" +"cols is a character vector of zero length. Use NULL instead, or wrap with " +"suppressWarnings() to avoid this warning." +msgstr "" + +msgid "' which is not supported for ordering currently." +msgstr "" + +msgid "'sorted' is TRUE but element" +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" +msgstr "" + +msgid "rows which exceeds .Machine$integer.max ==" +msgstr "" + +msgid "x and y must both be data.tables" +msgstr "" + +msgid "length(by.x) != length(by.y)" +msgstr "" + +msgid "When x's column ('" +msgstr "" + +msgid "') is character, the corresponding column in y ('" +msgstr "" + +msgid "') should be factor or character, but found incompatible type '" +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 '" +msgstr "" + +msgid "argument 'all' should be logical of length one" +msgstr "" + +msgid "x and y must have the same column names" +msgstr "" + +msgid "x and y must have the same column order" +msgstr "" + +msgid "unsupported column type" +msgstr "" + +msgid "found in x or y:" +msgstr "" + +msgid "of x is '" +msgstr "" + +msgid "' but the corresponding item of y is '" +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 "" + +msgid "None of the datasets to compare should contain a column named '.seqn'" +msgstr "" + +msgid "" +"Datasets to compare with 'ignore.row.order' must not have unsupported column " +"types:" +msgstr "" + +msgid "" +"Argument 'tolerance' was forced to lowest accepted value `sqrt(.Machine" +"$double.eps)` from provided" +msgstr "" + +msgid "" +"Duplicate rows in datasets, numeric columns and ignore.row.order cannot be " +"used with non 0 tolerance argument" +msgstr "" + +msgid "" +"Factor columns and ignore.row.order cannot be used with non 0 tolerance " +"argument" +msgstr "" + +msgid "Internal error: factor type mismatch should have been caught earlier" +msgstr "" + +msgid "argument 'fill' ignored, only make sense for type='const'" +msgstr "" + +msgid "order.col='" +msgstr "" + +msgid "' not a column name of info" +msgstr "" + +msgid "data.table package is loaded. Unload or start a fresh R session." +msgstr "" + +msgid "'script' argument should not be NULL" +msgstr "" + +msgid "does not exist" +msgstr "" + +msgid "Timings count mismatch:" +msgstr "" + +msgid "vs" +msgstr "" + +msgid "out of" +msgstr "" + +msgid "in" +msgstr "" + +msgid "on" +msgstr "" + +msgid ". [" +msgstr "" + +msgid "Search" +msgstr "" + +msgid "for test number" +msgstr "" + +msgid "Test" +msgstr "" + +msgid "" +"is invalid: when error= is provided it does not make sense to pass y as well" +msgstr "" + +msgid "Use started.at=proc.time() not Sys.time() (POSIXt and slow)" +msgstr "" + +msgid "make.names='" +msgstr "" + +msgid "' not found in names of input" +msgstr "" + +msgid "make.names=" +msgstr "" + +msgid "is out of range [1,ncol=" +msgstr "" + +msgid "'names' must be TRUE/FALSE or a character vector." +msgstr "" + +msgid "'keep' should contain integer values between" +msgstr "" + +msgid "length(names) (=" +msgstr "" + +msgid ") is not equal to length(" +msgstr "" + +msgid ") (=" +msgstr "" + +msgid ")." +msgstr "" + +msgid "l not type list" +msgstr "" + +msgid "x not boolean" +msgstr "" + +msgid "" +"Some columns are type 'integer64' but package bit64 is not installed. Those " +"columns will print as strange looking floating point data. There is no need " +"to reload the data. Simply install.packages('bit64') to obtain the integer64 " +"print method and print the data again." +msgstr "" + +msgid "Pattern" +msgstr "" + +msgid "not found: [" +msgstr "" + +msgid "" +"Input xts object should not have 'index' column because it would result in " +"duplicate column names. Rename 'index' column in xts or use `keep." +"rownames=FALSE` and add index manually as another column." +msgstr "" + +msgid "" +"data.table must have a time based column in first position, use " +"`setcolorder` function to change the order, or see ?timeBased for supported " +"types" +msgstr "" + +msgid "Following columns are not numeric and will be omitted:" +msgstr "" diff --git a/src/data.table.h b/src/data.table.h index 1f5c9cd5ff..dd27e7f571 100644 --- a/src/data.table.h +++ b/src/data.table.h @@ -63,6 +63,13 @@ typedef R_xlen_t RLEN; #define ALTREP(x) 0 // for R<3.5.0, see issue #2866 and grep for "ALTREP" to see comments where it's used #endif +#ifdef ENABLE_NLS +#include +#define _(String) dgettext ("data.table", String) +#else +#define _(String) (String) +#endif + // init.c SEXP char_integer64; SEXP char_ITime; From e7208a402d42fc733d9a829ba2c87cb7ba0955c2 Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Sat, 5 Oct 2019 21:50:34 +0800 Subject: [PATCH 02/22] adding another .mo file that was untracked --- inst/po/en@quot/LC_MESSAGES/R-data.table.mo | Bin 0 -> 87120 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 inst/po/en@quot/LC_MESSAGES/R-data.table.mo diff --git a/inst/po/en@quot/LC_MESSAGES/R-data.table.mo b/inst/po/en@quot/LC_MESSAGES/R-data.table.mo new file mode 100644 index 0000000000000000000000000000000000000000..8d628eced2b060217f28870325eca3aff0c246d0 GIT binary patch literal 87120 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 q9lf)I1;c(WAhq&B6P8 zw~9)#xPQbAN^zP$)OM|@=HPx)--#2K*FmAkcm28&eY;2D2Cvp6|IRPxthJW0Z7n9W z{;TMPfgW)VUhjGvFg=QNaxlp4G(`M~!zLu`^fEEgX7@*I@e z594voYm-uhg!w{R&a){ulbD``8%gXsI`=9pwf1G8f?h&qxw=nEp5}y@+8-lhkGfhp T`+idxVNw=KuJwoyoY?;b8ikhM literal 0 HcmV?d00001 From 12a169f85df7fd1ec55ef8ef984d7de4557eca23 Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Sun, 13 Oct 2019 17:03:08 +0800 Subject: [PATCH 03/22] trying to get the .pot for src/ files --- src/assign.c | 156 +-- src/between.c | 22 +- src/bmerge.c | 46 +- src/chmatch.c | 10 +- src/cj.c | 2 +- src/coalesce.c | 20 +- src/data.table.pot | 2482 ++++++++++++++++++++++++++++++++++++++++++++ src/dogroups.c | 63 +- src/fastmean.c | 8 +- src/fcast.c | 14 +- src/fifelse.c | 22 +- src/fmelt.c | 64 +- src/forder.c | 36 +- src/frank.c | 24 +- src/freadR.c | 18 +- src/froll.c | 4 +- src/frollR.c | 60 +- src/fsort.c | 10 +- src/fwriteR.c | 14 +- src/gsumm.c | 126 +-- src/ijoin.c | 30 +- src/init.c | 66 +- src/nafill.c | 14 +- src/openmp-utils.c | 14 +- src/rbindlist.c | 44 +- src/reorder.c | 16 +- src/shift.c | 14 +- src/subset.c | 36 +- src/transpose.c | 12 +- src/types.c | 4 +- src/uniqlist.c | 40 +- src/utils.c | 26 +- src/vecseq.c | 14 +- src/wrappers.c | 14 +- 34 files changed, 3013 insertions(+), 532 deletions(-) create mode 100644 src/data.table.pot diff --git a/src/assign.c b/src/assign.c index 1d33f9c3c2..cb9909d6ac 100644 --- a/src/assign.c +++ b/src/assign.c @@ -6,12 +6,12 @@ static void finalizer(SEXP p) { SEXP x; R_len_t n, l, tl; - if(!R_ExternalPtrAddr(p)) error("Internal error: finalizer hasn't received an ExternalPtr"); // # nocov + if(!R_ExternalPtrAddr(p)) error(_("Internal error: finalizer hasn't received an ExternalPtr")); // # nocov p = R_ExternalPtrTag(p); - if (!isString(p)) error("Internal error: finalizer's ExternalPtr doesn't see names in tag"); // # nocov + if (!isString(p)) error(_("Internal error: finalizer's ExternalPtr doesn't see names in tag")); // # nocov l = LENGTH(p); tl = TRUELENGTH(p); - if (l<0 || tl0 but 0 but l) ? n : l); // e.g. test 848 and 851 in R > 3.0.2 // added (n>l) ? ... for #970, see test 1481. // TO DO: test realloc names if selfrefnamesok (users can setattr(x,"name") themselves for example. // if (TRUELENGTH(getAttrib(dt,R_NamesSymbol))!=tl) - // error("Internal error: tl of dt passes checks, but tl of names (%d) != tl of dt (%d)", tl, TRUELENGTH(getAttrib(dt,R_NamesSymbol))); // # nocov + // error(_("Internal error: tl of dt passes checks, but tl of names (%d) != tl of dt (%d)"), tl, TRUELENGTH(getAttrib(dt,R_NamesSymbol))); // # nocov tl = TRUELENGTH(dt); // R <= 2.13.2 and we didn't catch uninitialized tl somehow - if (tl<0) error("Internal error, tl of class is marked but tl<0."); // # nocov - if (tl>0 && tl0 && tll+10000) warning("tl (%d) is greater than 10,000 items over-allocated (l = %d). If you didn't set the datatable.alloccol option to be very large, please report to data.table issue tracker including the result of sessionInfo().",tl,l); if (n>tl) return(shallow(dt,R_NilValue,n)); // usual case (increasing alloc) if (n=0 and not NA.", ans); + error(_("getOption('datatable.alloc')==%d. It must be >=0 and not NA."), ans); return ans; } SEXP alloccolwrapper(SEXP dt, SEXP overAllocArg, SEXP verbose) { - if (!isLogical(verbose) || length(verbose)!=1) error("verbose must be TRUE or FALSE"); + if (!isLogical(verbose) || length(verbose)!=1) error(_("verbose must be TRUE or FALSE")); int overAlloc = checkOverAlloc(overAllocArg); SEXP ans = PROTECT(alloccol(dt, length(dt)+overAlloc, LOGICAL(verbose)[0])); @@ -286,10 +286,10 @@ SEXP assign(SEXP dt, SEXP rows, SEXP cols, SEXP newcolnames, SEXP values) const char *c1, *tc1, *tc2; int *buf, newKeyLength, indexNo; size_t size; // must be size_t otherwise overflow later in memcpy - if (isNull(dt)) error("assign has been passed a NULL dt"); - if (TYPEOF(dt) != VECSXP) error("dt passed to assign isn't type VECSXP"); + if (isNull(dt)) error(_("assign has been passed a NULL dt")); + if (TYPEOF(dt) != VECSXP) error(_("dt passed to assign isn't type VECSXP")); if (islocked(dt)) - error(".SD is locked. Updating .SD by reference using := or set are reserved for future use. Use := in j directly. Or use copy(.SD) as a (slow) last resort, until shallow() is exported."); + error(_(".SD is locked. Updating .SD by reference using := or set are reserved for future use. Use := in j directly. Or use copy(.SD) as a (slow) last resort, until shallow() is exported.")); // We allow set() on data.frame too; e.g. package Causata uses set() on a data.frame in tests/testTransformationReplay.R // := is only allowed on a data.table. However, the ":=" = stop(...) message in data.table.R will have already @@ -297,15 +297,15 @@ SEXP assign(SEXP dt, SEXP rows, SEXP cols, SEXP newcolnames, SEXP values) // For data.frame, can use set() on existing columns but not add new ones because DF are not over-allocated. bool isDataTable = INHERITS(dt, char_datatable); if (!isDataTable && !INHERITS(dt, char_dataframe)) - error("Internal error: dt passed to Cassign is not a data.table or data.frame"); // # nocov + error(_("Internal error: dt passed to Cassign is not a data.table or data.frame")); // # nocov oldncol = LENGTH(dt); SEXP names = PROTECT(getAttrib(dt, R_NamesSymbol)); protecti++; - if (isNull(names)) error("dt passed to assign has no names"); + if (isNull(names)) error(_("dt passed to assign has no names")); if (length(names)!=oldncol) - error("Internal error in assign: length of names (%d) is not length of dt (%d)",length(names),oldncol); // # nocov + error(_("Internal error in assign: length of names (%d) is not length of dt (%d)"),length(names),oldncol); // # nocov if (isNull(dt)) { - error("data.table is NULL; malformed. A null data.table should be an empty list. typeof() should always return 'list' for data.table."); // # nocov + error(_("data.table is NULL; malformed. A null data.table should be an empty list. typeof() should always return 'list' for data.table.")); // # nocov // Not possible to test because R won't permit attributes be attached to NULL (which is good and we like); warning from R 3.4.0+ tested by 944.5 } const int nrow = LENGTH(dt) ? length(VECTOR_ELT(dt,0)) : @@ -322,13 +322,13 @@ SEXP assign(SEXP dt, SEXP rows, SEXP cols, SEXP newcolnames, SEXP values) warning("Coerced i from numeric to integer. Please pass integer for efficiency; e.g., 2L rather than 2"); } if (!isInteger(rows)) - error("i is type '%s'. Must be integer, or numeric is coerced with warning. If i is a logical subset, simply wrap with which(), and take the which() outside the loop if possible for efficiency.", type2char(TYPEOF(rows))); + error(_("i is type '%s'. Must be integer, or numeric is coerced with warning. If i is a logical subset, simply wrap with which(), and take the which() outside the loop if possible for efficiency."), type2char(TYPEOF(rows))); targetlen = length(rows); numToDo = 0; const int *rowsd = INTEGER(rows); for (i=0; inrow) - error("i[%d] is %d which is out of range [1,nrow=%d].",i+1,rowsd[i],nrow); // set() reaches here (test 2005.2); := reaches the same error in subset.c first + error(_("i[%d] is %d which is out of range [1,nrow=%d]."),i+1,rowsd[i],nrow); // set() reaches here (test 2005.2); := reaches the same error in subset.c first if (rowsd[i]>=1) numToDo++; } if (verbose) Rprintf("Assigning to %d row subset of %d rows\n", numToDo, nrow); @@ -358,7 +358,7 @@ SEXP assign(SEXP dt, SEXP rows, SEXP cols, SEXP newcolnames, SEXP values) if (INTEGER(tmp)[i] == 0) buf[k++] = i; } if (k>0) { - if (!isDataTable) error("set() on a data.frame is for changing existing columns, not adding new ones. Please use a data.table for that. data.table's are over-allocated and don't shallow copy."); + if (!isDataTable) error(_("set() on a data.frame is for changing existing columns, not adding new ones. Please use a data.table for that. data.table's are over-allocated and don't shallow copy.")); newcolnames = PROTECT(allocVector(STRSXP, k)); protecti++; for (i=0; i1; // initial value; may be revised below if (verbose) Rprintf("RHS_list_of_columns == %s\n", RHS_list_of_columns ? "true" : "false"); if (TYPEOF(values)==VECSXP && length(cols)==1 && length(values)==1) { @@ -387,7 +387,7 @@ SEXP assign(SEXP dt, SEXP rows, SEXP cols, SEXP newcolnames, SEXP values) } if (RHS_list_of_columns) { if (length(values)==0) - error("Supplied %d columns to be assigned an empty list (which may be an empty data.table or data.frame since they are lists too). " + error(_("Supplied %d columns to be assigned an empty list (which may be an empty data.table or data.frame since they are lists too). ") "To delete multiple columns use NULL instead. To add multiple empty list columns, use list(list()).", length(cols)); if (length(values)!=length(cols)) { if (length(values)==1) { // test 351.1; c("colA","colB"):=list(13:15) uses 13:15 for both columns @@ -395,7 +395,7 @@ SEXP assign(SEXP dt, SEXP rows, SEXP cols, SEXP newcolnames, SEXP values) RHS_list_of_columns = false; if (verbose) Rprintf("Recycling single RHS list item across %d columns. Please unwrap RHS.\n", length(cols)); } else { - error("Supplied %d columns to be assigned %d items. Please see NEWS for v1.12.2.", length(cols), length(values)); + error(_("Supplied %d columns to be assigned %d items. Please see NEWS for v1.12.2."), length(cols), length(values)); } } } @@ -403,24 +403,24 @@ SEXP assign(SEXP dt, SEXP rows, SEXP cols, SEXP newcolnames, SEXP values) for (i=0; ioldncol+length(newcolnames)) { - if (!isDataTable) error("Item %d of column numbers in j is %d which is outside range [1,ncol=%d]. set() on a data.frame is for changing existing columns, not adding new ones. Please use a data.table for that.", i+1, coln, oldncol); - else error("Item %d of column numbers in j is %d which is outside range [1,ncol=%d]. Use column names instead in j to add new columns.", i+1, coln, oldncol); + if (!isDataTable) error(_("Item %d of column numbers in j is %d which is outside range [1,ncol=%d]. set() on a data.frame is for changing existing columns, not adding new ones. Please use a data.table for that."), i+1, coln, oldncol); + else error(_("Item %d of column numbers in j is %d which is outside range [1,ncol=%d]. Use column names instead in j to add new columns."), i+1, coln, oldncol); } coln--; SEXP thisvalue = RHS_list_of_columns ? VECTOR_ELT(values, i) : values; vlen = length(thisvalue); - if (isNull(thisvalue) && !isNull(rows)) error("When deleting columns, i should not be provided"); // #1082, #3089 + if (isNull(thisvalue) && !isNull(rows)) error(_("When deleting columns, i should not be provided")); // #1082, #3089 if (coln+1 <= oldncol) colnam = STRING_ELT(names,coln); else colnam = STRING_ELT(newcolnames,coln-length(names)); if (coln+1 <= oldncol && isNull(thisvalue)) continue; // delete existing column(s) afterwards, near end of this function //if (vlen<1 && nrow>0) { if (coln+1 <= oldncol && nrow>0 && vlen<1 && numToDo>0) { // numToDo > 0 fixes #2829, see test 1911 - error("RHS of assignment to existing column '%s' is zero length but not NULL. If you intend to delete the column use NULL. Otherwise, the RHS must have length > 0; e.g., NA_integer_. If you are trying to change the column type to be an empty list column then, as with all column type changes, provide a full length RHS vector such as vector('list',nrow(DT)); i.e., 'plonk' in the new column.", CHAR(STRING_ELT(names,coln))); + error(_("RHS of assignment to existing column '%s' is zero length but not NULL. If you intend to delete the column use NULL. Otherwise, the RHS must have length > 0; e.g., NA_integer_. If you are trying to change the column type to be an empty list column then, as with all column type changes, provide a full length RHS vector such as vector('list',nrow(DT)); i.e., 'plonk' in the new column."), CHAR(STRING_ELT(names,coln))); } if (coln+1 > oldncol && TYPEOF(thisvalue)!=VECSXP) { // list() is ok for new columns newcolnum = coln-length(names); if (newcolnum<0 || newcolnum>=length(newcolnames)) - error("Internal error in assign.c: length(newcolnames)=%d, length(names)=%d, coln=%d", length(newcolnames), length(names), coln); // # nocov + error(_("Internal error in assign.c: length(newcolnames)=%d, length(names)=%d, coln=%d"), length(newcolnames), length(names), coln); // # nocov if (isNull(thisvalue)) { warning("Column '%s' does not exist to remove",CHAR(STRING_ELT(newcolnames,newcolnum))); continue; @@ -432,12 +432,12 @@ SEXP assign(SEXP dt, SEXP rows, SEXP cols, SEXP newcolnames, SEXP values) const SEXP existing = (coln+1)<=oldncol ? VECTOR_ELT(dt,coln) : R_NilValue; if (isFactor(existing) && !isString(thisvalue) && TYPEOF(thisvalue)!=INTSXP && TYPEOF(thisvalue)!=LGLSXP && !isReal(thisvalue) && !isNewList(thisvalue)) { // !=INTSXP includes factor - error("Can't assign to column '%s' (type 'factor') a value of type '%s' (not character, factor, integer or numeric)", + error(_("Can't assign to column '%s' (type 'factor') a value of type '%s' (not character, factor, integer or numeric)"), CHAR(STRING_ELT(names,coln)),type2char(TYPEOF(thisvalue))); } if (nrow>0 && targetlen>0 && vlen>1 && vlen!=targetlen && (TYPEOF(existing)!=VECSXP || TYPEOF(thisvalue)==VECSXP)) { // note that isNewList(R_NilValue) is true so it needs to be TYPEOF(existing)!=VECSXP above - error("Supplied %d items to be assigned to %d items of column '%s'. If you wish to 'recycle' the RHS please " + error(_("Supplied %d items to be assigned to %d items of column '%s'. If you wish to 'recycle' the RHS please ") "use rep() to make this intent clear to readers of your code.", vlen, targetlen, CHAR(colnam)); } } @@ -448,18 +448,18 @@ SEXP assign(SEXP dt, SEXP rows, SEXP cols, SEXP newcolnames, SEXP values) oldtncol = TRUELENGTH(dt); // TO DO: oldtncol can be just called tl now, as we won't realloc here any more. if (oldtncololdncol+10000L) warning("truelength (%d) is greater than 10,000 items over-allocated (length = %d). See ?truelength. If you didn't set the datatable.alloccol option very large, please report to data.table issue tracker including the result of sessionInfo().",oldtncol, oldncol); if (oldtncol < oldncol+LENGTH(newcolnames)) - error("Internal error: DT passed to assign has not been allocated enough column slots. l=%d, tl=%d, adding %d", oldncol, oldtncol, LENGTH(newcolnames)); // # nocov + error(_("Internal error: DT passed to assign has not been allocated enough column slots. l=%d, tl=%d, adding %d"), oldncol, oldtncol, LENGTH(newcolnames)); // # nocov if (!selfrefnamesok(dt,verbose)) - error("It appears that at some earlier point, names of this data.table have been reassigned. Please ensure to use setnames() rather than names<- or colnames<-. Otherwise, please report to data.table issue tracker."); // # nocov + error(_("It appears that at some earlier point, names of this data.table have been reassigned. Please ensure to use setnames() rather than names<- or colnames<-. Otherwise, please report to data.table issue tracker.")); // # nocov // Can growVector at this point easily enough, but it shouldn't happen in first place so leave it as // strong error message for now. else if (TRUELENGTH(names) != oldtncol) - error("Internal error: selfrefnames is ok but tl names [%d] != tl [%d]", TRUELENGTH(names), oldtncol); // # nocov + error(_("Internal error: selfrefnames is ok but tl names [%d] != tl [%d]"), TRUELENGTH(names), oldtncol); // # nocov SETLENGTH(dt, oldncol+LENGTH(newcolnames)); SETLENGTH(names, oldncol+LENGTH(newcolnames)); for (i=0; i1 && slen!=len && (!isNewList(target) || isNewList(source))) - error("Internal error: recycle length error not caught earlier. slen=%d len=%d", slen, len); // # nocov + error(_("Internal error: recycle length error not caught earlier. slen=%d len=%d"), slen, len); // # nocov // Internal error because the column has already been added to the DT, so length mismatch should have been caught before adding the column. // for 5647 this used to limit slen to len, but no longer if (colname==NULL) - error("Internal error: memrecycle has received NULL colname"); // # nocov + error(_("Internal error: memrecycle has received NULL colname")); // # nocov *memrecycle_message = '\0'; int protecti=0; if (isNewList(source)) { @@ -716,7 +716,7 @@ const char *memrecycle(SEXP target, SEXP where, int start, int len, SEXP source, if (sourceIsFactor || targetIsFactor) { if (!targetIsFactor) { if (!isString(target) && !isNewList(target)) - error("Cannot assign 'factor' to '%s'. Factors can only be assigned to factor, character or list columns.", type2char(TYPEOF(target))); + error(_("Cannot assign 'factor' to '%s'. Factors can only be assigned to factor, character or list columns."), type2char(TYPEOF(target))); // else assigning factor to character is left to later below, avoiding wasteful asCharacterFactor } else if (!sourceIsFactor && !isString(source)) { // target is factor @@ -730,7 +730,7 @@ const char *memrecycle(SEXP target, SEXP where, int start, int len, SEXP source, for (int i=0; inlevel) { - error("Assigning factor numbers to column %d named '%s'. But %d is outside the level range [1,%d]", colnum, colname, val, nlevel); + error(_("Assigning factor numbers to column %d named '%s'. But %d is outside the level range [1,%d]"), colnum, colname, val, nlevel); } } } else { @@ -738,13 +738,13 @@ const char *memrecycle(SEXP target, SEXP where, int start, int len, SEXP source, for (int i=0; inlevel)) { - error("Assigning factor numbers to column %d named '%s'. But %f is outside the level range [1,%d], or is not a whole number.", colnum, colname, val, nlevel); + error(_("Assigning factor numbers to column %d named '%s'. But %f is outside the level range [1,%d], or is not a whole number."), colnum, colname, val, nlevel); } } } // Now just let the valid level numbers fall through to regular assign by BODY below } else { - error("Cannot assign '%s' to 'factor'. Factor columns can be assigned factor, character, NA in any type, or level numbers.", type2char(TYPEOF(source))); + error(_("Cannot assign '%s' to 'factor'. Factor columns can be assigned factor, character, NA in any type, or level numbers."), type2char(TYPEOF(source))); } } else { // either factor or character being assigned to factor column @@ -765,7 +765,7 @@ const char *memrecycle(SEXP target, SEXP where, int start, int len, SEXP source, // # nocov start for (int j=0; j(INT_MAX/2) ? INT_MAX : nalloc*2; char *tmp = (char *)realloc(saveds, nalloc*sizeof(SEXP)); if (tmp==NULL) { // C spec states that if realloc() fails the original block is left untouched; it is not freed or moved. We rely on that here. savetl_end(); // # nocov free(saveds) happens inside savetl_end - error("Failed to realloc saveds to %d items in savetl", nalloc); // # nocov + error(_("Failed to realloc saveds to %d items in savetl"), nalloc); // # nocov } saveds = (SEXP *)tmp; tmp = (char *)realloc(savedtl, nalloc*sizeof(R_len_t)); if (tmp==NULL) { savetl_end(); // # nocov - error("Failed to realloc savedtl to %d items in savetl", nalloc); // # nocov + error(_("Failed to realloc savedtl to %d items in savetl"), nalloc); // # nocov } savedtl = (R_len_t *)tmp; } @@ -1204,13 +1204,13 @@ void savetl_end() { SEXP setcharvec(SEXP x, SEXP which, SEXP newx) { int w; - if (!isString(x)) error("x must be a character vector"); - if (!isInteger(which)) error("'which' must be an integer vector"); - if (!isString(newx)) error("'new' must be a character vector"); - if (LENGTH(newx)!=LENGTH(which)) error("'new' is length %d. Should be the same as length of 'which' (%d)",LENGTH(newx),LENGTH(which)); + if (!isString(x)) error(_("x must be a character vector")); + if (!isInteger(which)) error(_("'which' must be an integer vector")); + if (!isString(newx)) error(_("'new' must be a character vector")); + if (LENGTH(newx)!=LENGTH(which)) error(_("'new' is length %d. Should be the same as length of 'which' (%d)"),LENGTH(newx),LENGTH(which)); for (int i=0; iLENGTH(x)) error("Item %d of 'which' is %d which is outside range of the length %d character vector", i+1,w,LENGTH(x)); + if (w==NA_INTEGER || w<1 || w>LENGTH(x)) error(_("Item %d of 'which' is %d which is outside range of the length %d character vector"), i+1,w,LENGTH(x)); SET_STRING_ELT(x, w-1, STRING_ELT(newx, i)); } return R_NilValue; @@ -1220,18 +1220,18 @@ SEXP setcolorder(SEXP x, SEXP o) { SEXP names = getAttrib(x, R_NamesSymbol); const int *od = INTEGER(o), ncol=LENGTH(x); - if (isNull(names)) error("dt passed to setcolorder has no names"); + if (isNull(names)) error(_("dt passed to setcolorder has no names")); if (ncol != LENGTH(names)) - error("Internal error: dt passed to setcolorder has %d columns but %d names", ncol, LENGTH(names)); // # nocov + error(_("Internal error: dt passed to setcolorder has %d columns but %d names"), ncol, LENGTH(names)); // # nocov // Double-check here at C level that o[] is a strict permutation of 1:ncol. Reordering columns by reference makes no // difference to generations/refcnt so we can write behind barrier in this very special case of strict permutation. bool *seen = Calloc(ncol, bool); for (int i=0; incol) - error("Internal error: o passed to Csetcolorder contains an NA or out-of-bounds"); // # nocov + error(_("Internal error: o passed to Csetcolorder contains an NA or out-of-bounds")); // # nocov if (seen[od[i]-1]) - error("Internal error: o passed to Csetcolorder contains a duplicate"); // # nocov + error(_("Internal error: o passed to Csetcolorder contains a duplicate")); // # nocov seen[od[i]-1] = true; } Free(seen); diff --git a/src/between.c b/src/between.c index d7de5c7175..653a28c339 100644 --- a/src/between.c +++ b/src/between.c @@ -9,17 +9,17 @@ SEXP between(SEXP x, SEXP lower, SEXP upper, SEXP incbounds, SEXP NAboundsArg, S if ((nl!=1 && nl!=longest) || (nu!=1 && nu!=longest) || (nx!=1 && nx!=longest)) { - error("Incompatible vector lengths: length(x)==%d length(lower)==%d length(upper)==%d. Each should be either length 1 or the length of the longest.", nx, nl, nu); + error(_("Incompatible vector lengths: length(x)==%d length(lower)==%d length(upper)==%d. Each should be either length 1 or the length of the longest."), nx, nl, nu); } const int longestBound = MAX(nl, nu); // just for when check=TRUE if (!isLogical(incbounds) || LOGICAL(incbounds)[0]==NA_LOGICAL) - error("incbounds must be TRUE or FALSE"); + error(_("incbounds must be TRUE or FALSE")); const bool open = !LOGICAL(incbounds)[0]; if (!isLogical(NAboundsArg) || LOGICAL(NAboundsArg)[0]==FALSE) - error("NAbounds must be TRUE or NA"); + error(_("NAbounds must be TRUE or NA")); const bool NAbounds = LOGICAL(NAboundsArg)[0]==TRUE; if (!isLogical(checkArg) || LOGICAL(checkArg)[0]==NA_LOGICAL) - error("check must be TRUE or FALSE"); + error(_("check must be TRUE or FALSE")); const bool check = LOGICAL(checkArg)[0]; const bool verbose = GetVerbose(); @@ -61,7 +61,7 @@ SEXP between(SEXP x, SEXP lower, SEXP upper, SEXP incbounds, SEXP NAboundsArg, S if (check) for (int i=0; iu) - error("Item %d of lower (%d) is greater than item %d of upper (%d)", (i&lowMask)+1, l, (i&uppMask)+1, u); + error(_("Item %d of lower (%d) is greater than item %d of upper (%d)"), (i&lowMask)+1, l, (i&uppMask)+1, u); } if (NAbounds) { // default NAbounds==TRUE => NA bound means TRUE; i.e. asif lower=-Inf or upper==Inf) #pragma omp parallel for num_threads(getDTthreads()) @@ -85,14 +85,14 @@ SEXP between(SEXP x, SEXP lower, SEXP upper, SEXP incbounds, SEXP NAboundsArg, S case REALSXP: if (Rinherits(x, char_integer64)) { if (!Rinherits(lower, char_integer64) || !Rinherits(upper, char_integer64)) - error("x is integer64 but lower and/or upper are not."); // e.g. between(int64, character, character) + error(_("x is integer64 but lower and/or upper are not.")); // e.g. between(int64, character, character) const int64_t *lp = (int64_t *)REAL(lower); const int64_t *up = (int64_t *)REAL(upper); const int64_t *xp = (int64_t *)REAL(x); if (check) for (int i=0; iu) - error("Item %d of lower (%lld) is greater than item %d of upper (%lld)", (i&lowMask)+1, l, (i&uppMask)+1, u); + error(_("Item %d of lower (%lld) is greater than item %d of upper (%lld)"), (i&lowMask)+1, l, (i&uppMask)+1, u); } if (NAbounds) { #pragma omp parallel for num_threads(getDTthreads()) @@ -112,14 +112,14 @@ SEXP between(SEXP x, SEXP lower, SEXP upper, SEXP incbounds, SEXP NAboundsArg, S if (verbose) Rprintf("between parallel processing of integer64 took %8.3fs\n", omp_get_wtime()-tic); } else { if (Rinherits(lower, char_integer64) || Rinherits(upper, char_integer64)) - error("x is not integer64 but lower and/or upper is integer64. Please align classes."); + error(_("x is not integer64 but lower and/or upper is integer64. Please align classes.")); const double *lp = REAL(lower); const double *up = REAL(upper); const double *xp = REAL(x); if (check) for (int i=0; iu) - error("Item %d of lower (%f) is greater than item %d of upper (%f)", (i&lowMask)+1, l, (i&uppMask)+1, u); + error(_("Item %d of lower (%f) is greater than item %d of upper (%f)"), (i&lowMask)+1, l, (i&uppMask)+1, u); } if (open) { if (NAbounds) { @@ -169,7 +169,7 @@ SEXP between(SEXP x, SEXP lower, SEXP upper, SEXP incbounds, SEXP NAboundsArg, S if (check) for (int i=0; i0) - error("Item %d of lower ('%s') is greater than item %d of upper ('%s')", (i&lowMask)+1, CHAR(l), (i&uppMask)+1, CHAR(u)); + error(_("Item %d of lower ('%s') is greater than item %d of upper ('%s')"), (i&lowMask)+1, CHAR(l), (i&uppMask)+1, CHAR(u)); } if (NAbounds) { for (int i=0; i LENGTH(xcolsArg)) error("Internal error: length(icols) [%d] > length(xcols) [%d]", LENGTH(icolsArg), LENGTH(xcolsArg)); // # nocov + if (!isInteger(icolsArg)) error(_("Internal error: icols is not integer vector")); // # nocov + if (!isInteger(xcolsArg)) error(_("Internal error: xcols is not integer vector")); // # nocov + if (LENGTH(icolsArg) > LENGTH(xcolsArg)) error(_("Internal error: length(icols) [%d] > length(xcols) [%d]"), LENGTH(icolsArg), LENGTH(xcolsArg)); // # nocov icols = INTEGER(icolsArg); xcols = INTEGER(xcolsArg); xN = LENGTH(VECTOR_ELT(x,0)); iN = ilen = anslen = LENGTH(VECTOR_ELT(i,0)); ncol = LENGTH(icolsArg); // there may be more sorted columns in x than involved in the join for(int col=0; colLENGTH(i) || icols[col]<1) error("icols[%d]=%d outside range [1,length(i)=%d]", col, icols[col], LENGTH(i)); - if (xcols[col]>LENGTH(x) || xcols[col]<1) error("xcols[%d]=%d outside range [1,length(x)=%d]", col, xcols[col], LENGTH(x)); + if (icols[col]==NA_INTEGER) error(_("Internal error. icols[%d] is NA"), col); // # nocov + if (xcols[col]==NA_INTEGER) error(_("Internal error. xcols[%d] is NA"), col); // # nocov + if (icols[col]>LENGTH(i) || icols[col]<1) error(_("icols[%d]=%d outside range [1,length(i)=%d]"), col, icols[col], LENGTH(i)); + if (xcols[col]>LENGTH(x) || xcols[col]<1) error(_("xcols[%d]=%d outside range [1,length(x)=%d]"), col, xcols[col], LENGTH(x)); int it = TYPEOF(VECTOR_ELT(i, icols[col]-1)); int xt = TYPEOF(VECTOR_ELT(x, xcols[col]-1)); - if (iN && it!=xt) error("typeof x.%s (%s) != typeof i.%s (%s)", CHAR(STRING_ELT(getAttrib(x,R_NamesSymbol),xcols[col]-1)), type2char(xt), CHAR(STRING_ELT(getAttrib(i,R_NamesSymbol),icols[col]-1)), type2char(it)); + if (iN && it!=xt) error(_("typeof x.%s (%s) != typeof i.%s (%s)"), CHAR(STRING_ELT(getAttrib(x,R_NamesSymbol),xcols[col]-1)), type2char(xt), CHAR(STRING_ELT(getAttrib(i,R_NamesSymbol),icols[col]-1)), type2char(it)); } // raise(SIGINT); // rollArg, rollendsArg roll = 0.0; rollToNearest = FALSE; if (isString(rollarg)) { - if (strcmp(CHAR(STRING_ELT(rollarg,0)),"nearest") != 0) error("roll is character but not 'nearest'"); - if (TYPEOF(VECTOR_ELT(i, icols[ncol-1]-1))==STRSXP) error("roll='nearest' can't be applied to a character column, yet."); + if (strcmp(CHAR(STRING_ELT(rollarg,0)),"nearest") != 0) error(_("roll is character but not 'nearest'")); + if (TYPEOF(VECTOR_ELT(i, icols[ncol-1]-1))==STRSXP) error(_("roll='nearest' can't be applied to a character column, yet.")); roll=1.0; rollToNearest=TRUE; // the 1.0 here is just any non-0.0, so roll!=0.0 can be used later } else { - if (!isReal(rollarg)) error("Internal error: roll is not character or double"); // # nocov + if (!isReal(rollarg)) error(_("Internal error: roll is not character or double")); // # nocov roll = REAL(rollarg)[0]; // more common case (rolling forwards or backwards) or no roll when 0.0 } rollabs = fabs(roll); if (!isLogical(rollendsArg) || LENGTH(rollendsArg) != 2) - error("rollends must be a length 2 logical vector"); + error(_("rollends must be a length 2 logical vector")); rollends = LOGICAL(rollendsArg); // nomatch arg @@ -86,20 +86,20 @@ SEXP bmerge(SEXP iArg, SEXP xArg, SEXP icolsArg, SEXP xcolsArg, SEXP isorted, SE if (!strcmp(CHAR(STRING_ELT(multArg, 0)), "all")) mult = ALL; else if (!strcmp(CHAR(STRING_ELT(multArg, 0)), "first")) mult = FIRST; else if (!strcmp(CHAR(STRING_ELT(multArg, 0)), "last")) mult = LAST; - else error("Internal error: invalid value for 'mult'. please report to data.table issue tracker"); // # nocov + else error(_("Internal error: invalid value for 'mult'. please report to data.table issue tracker")); // # nocov // opArg if (!isInteger(opArg) || length(opArg) != ncol) - error("Internal error: opArg is not an integer vector of length equal to length(on)"); // # nocov + error(_("Internal error: opArg is not an integer vector of length equal to length(on)")); // # nocov op = INTEGER(opArg); if (!isInteger(nqgrpArg)) - error("Internal error: nqgrpArg must be an integer vector"); // # nocov + error(_("Internal error: nqgrpArg must be an integer vector")); // # nocov nqgrp = nqgrpArg; // set global for bmerge_r scols = (!length(nqgrpArg)) ? 0 : -1; // starting col index, -1 is external group column for non-equi join case // nqmaxgrpArg if (!isInteger(nqmaxgrpArg) || length(nqmaxgrpArg) != 1 || INTEGER(nqmaxgrpArg)[0] <= 0) - error("Intrnal error: nqmaxgrpArg is not a positive length-1 integer vector"); // # nocov + error(_("Intrnal error: nqmaxgrpArg is not a positive length-1 integer vector")); // # nocov nqmaxgrp = INTEGER(nqmaxgrpArg)[0]; if (nqmaxgrp>1 && mult == ALL) { // non-equi case with mult=ALL, may need reallocation @@ -108,7 +108,7 @@ SEXP bmerge(SEXP iArg, SEXP xArg, SEXP icolsArg, SEXP xcolsArg, SEXP isorted, SE retLength = Calloc(anslen, int); retIndex = Calloc(anslen, int); if (retFirst==NULL || retLength==NULL || retIndex==NULL) - error("Internal error in allocating memory for non-equi join"); // # nocov + error(_("Internal error in allocating memory for non-equi join")); // # nocov // initialise retIndex here directly, as next loop is meant for both equi and non-equi joins for (int j=0; jxuppIn) error("Internal error: xlow!=xupp-1 || xlowxuppIn"); // # nocov + if (xlow != xupp-1 || xlowxuppIn) error(_("Internal error: xlow!=xupp-1 || xlowxuppIn")); // # nocov if (rollToNearest) { // value of roll ignored currently when nearest if ( (!lowmax || xlow>xlowIn) && (!uppmax || xupp, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-10-13 16:58+0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: assign.c:9 +msgid "Internal error: finalizer hasn't received an ExternalPtr" +msgstr "" + +#: assign.c:11 +msgid "Internal error: finalizer's ExternalPtr doesn't see names in tag" +msgstr "" + +#: assign.c:14 +#, c-format +msgid "Internal error: finalizer sees l=%d, tl=%d" +msgstr "" + +#: assign.c:126 +msgid "Internal error: .internal.selfref ptr is not NULL or R_NilValue" +msgstr "" + +#: assign.c:128 +msgid "Internal error: .internal.selfref tag isn't NULL or a character vector" +msgstr "" + +#: assign.c:170 +msgid "Internal error: length(names)>0 but =0 and not NA." +msgstr "" + +#: assign.c:241 fsort.c:109 nafill.c:73 +msgid "verbose must be TRUE or FALSE" +msgstr "" + +#: assign.c:289 +msgid "assign has been passed a NULL dt" +msgstr "" + +#: assign.c:290 +msgid "dt passed to assign isn't type VECSXP" +msgstr "" + +#: assign.c:292 +msgid "" +".SD is locked. Updating .SD by reference using := or set are reserved for " +"future use. Use := in j directly. Or use copy(.SD) as a (slow) last resort, " +"until shallow() is exported." +msgstr "" + +#: assign.c:300 +msgid "Internal error: dt passed to Cassign is not a data.table or data.frame" +msgstr "" + +#: assign.c:304 +msgid "dt passed to assign has no names" +msgstr "" + +#: assign.c:306 +#, c-format +msgid "Internal error in assign: length of names (%d) is not length of dt (%d)" +msgstr "" + +#: assign.c:308 +msgid "" +"data.table is NULL; malformed. A null data.table should be an empty list. " +"typeof() should always return 'list' for data.table." +msgstr "" + +#: assign.c:325 +#, c-format +msgid "" +"i is type '%s'. Must be integer, or numeric is coerced with warning. If i is " +"a logical subset, simply wrap with which(), and take the which() outside the " +"loop if possible for efficiency." +msgstr "" + +#: assign.c:331 +#, c-format +msgid "i[%d] is %d which is out of range [1,nrow=%d]." +msgstr "" + +#: assign.c:361 +msgid "" +"set() on a data.frame is for changing existing columns, not adding new ones. " +"Please use a data.table for that. data.table's are over-allocated and don't " +"shallow copy." +msgstr "" + +#: assign.c:375 +#, c-format +msgid "" +"j is type '%s'. Must be integer, character, or numeric is coerced with " +"warning." +msgstr "" + +#: assign.c:377 +msgid "" +"Can't assign to the same column twice in the same query (duplicates " +"detected)." +msgstr "" + +#: assign.c:378 +msgid "newcolnames is supplied but isn't a character vector" +msgstr "" + +#: assign.c:390 +#, c-format +msgid "" +"Supplied %d columns to be assigned an empty list (which may be an empty data." +"table or data.frame since they are lists too). " +msgstr "" + +#: assign.c:398 +#, c-format +msgid "" +"Supplied %d columns to be assigned %d items. Please see NEWS for v1.12.2." +msgstr "" + +#: assign.c:406 +#, c-format +msgid "" +"Item %d of column numbers in j is %d which is outside range [1,ncol=%d]. " +"set() on a data.frame is for changing existing columns, not adding new ones. " +"Please use a data.table for that." +msgstr "" + +#: assign.c:407 +#, c-format +msgid "" +"Item %d of column numbers in j is %d which is outside range [1,ncol=%d]. Use " +"column names instead in j to add new columns." +msgstr "" + +#: assign.c:412 +msgid "When deleting columns, i should not be provided" +msgstr "" + +#: assign.c:418 +#, c-format +msgid "" +"RHS of assignment to existing column '%s' is zero length but not NULL. If " +"you intend to delete the column use NULL. Otherwise, the RHS must have " +"length > 0; e.g., NA_integer_. If you are trying to change the column type " +"to be an empty list column then, as with all column type changes, provide a " +"full length RHS vector such as vector('list',nrow(DT)); i.e., 'plonk' in the " +"new column." +msgstr "" + +#: assign.c:423 +#, c-format +msgid "" +"Internal error in assign.c: length(newcolnames)=%d, length(names)=%d, coln=%d" +msgstr "" + +#: assign.c:435 +#, c-format +msgid "" +"Can't assign to column '%s' (type 'factor') a value of type '%s' (not " +"character, factor, integer or numeric)" +msgstr "" + +#: assign.c:440 +#, c-format +msgid "" +"Supplied %d items to be assigned to %d items of column '%s'. If you wish to " +"'recycle' the RHS please " +msgstr "" + +#: assign.c:451 +msgid "" +"This data.table has either been loaded from disk (e.g. using readRDS()/" +"load()) or constructed manually (e.g. using structure()). Please run setDT() " +"or setalloccol() on it first (to pre-allocate space for new columns) before " +"assigning by reference to it." +msgstr "" + +#: assign.c:452 +#, c-format +msgid "" +"Internal error: oldtncol(%d) < oldncol(%d). Please report to data.table " +"issue tracker, including result of sessionInfo()." +msgstr "" + +#: assign.c:456 +#, c-format +msgid "" +"Internal error: DT passed to assign has not been allocated enough column " +"slots. l=%d, tl=%d, adding %d" +msgstr "" + +#: assign.c:458 +msgid "" +"It appears that at some earlier point, names of this data.table have been " +"reassigned. Please ensure to use setnames() rather than names<- or " +"colnames<-. Otherwise, please report to data.table issue tracker." +msgstr "" + +#: assign.c:462 +#, c-format +msgid "Internal error: selfrefnames is ok but tl names [%d] != tl [%d]" +msgstr "" + +#: assign.c:473 +msgid "" +"Internal error: earlier error 'When deleting columns, i should not be " +"provided' did not happen." +msgstr "" + +#: assign.c:566 +msgid "Internal error: index name ends with trailing __" +msgstr "" + +#: assign.c:571 +msgid "Internal error: Couldn't allocate memory for s4." +msgstr "" + +#: assign.c:582 +msgid "Internal error: Couldn't allocate memory for s5." +msgstr "" + +#: assign.c:689 +#, c-format +msgid "Internal error: recycle length error not caught earlier. slen=%d len=%d" +msgstr "" + +#: assign.c:693 +msgid "Internal error: memrecycle has received NULL colname" +msgstr "" + +#: assign.c:719 +#, c-format +msgid "" +"Cannot assign 'factor' to '%s'. Factors can only be assigned to factor, " +"character or list columns." +msgstr "" + +#: assign.c:733 +#, c-format +msgid "" +"Assigning factor numbers to column %d named '%s'. But %d is outside the " +"level range [1,%d]" +msgstr "" + +#: assign.c:741 +#, 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:747 +#, 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:768 +msgid "" +"Internal error: levels of target are either not unique or have truelength<0" +msgstr "" + +#: assign.c:807 +#, c-format +msgid "Unable to allocate working memory of %d bytes to combine factor levels" +msgstr "" + +#: assign.c:814 +msgid "Internal error: extra level check sum failed" +msgstr "" + +#: assign.c:839 +#, c-format +msgid "" +"Cannot coerce 'list' RHS to 'integer64' to match the type of the target " +"column (column %d named '%s')." +msgstr "" + +#: assign.c:945 +#, c-format +msgid "type '%s' cannot be coerced to '%s'" +msgstr "" + +#: assign.c:1065 +msgid "" +"To assign integer64 to a character column, please use as.character() for " +"clarity." +msgstr "" + +#: assign.c:1076 +#, c-format +msgid "Unsupported column type in assign.c:memrecycle '%s'" +msgstr "" + +#: assign.c:1123 +#, c-format +msgid "Internal error: writeNA passed a vector of type '%s'" +msgstr "" + +#: 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:1162 +#, c-format +msgid "Failed to allocate initial %d items in savetl_init" +msgstr "" + +#: assign.c:1171 +#, c-format +msgid "" +"Internal error: reached maximum %d items for savetl. Please report to data." +"table issue tracker." +msgstr "" + +#: assign.c:1178 +#, c-format +msgid "Failed to realloc saveds to %d items in savetl" +msgstr "" + +#: assign.c:1184 +#, c-format +msgid "Failed to realloc savedtl to %d items in savetl" +msgstr "" + +#: 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 +#, c-format +msgid "'new' is length %d. Should be the same as length of 'which' (%d)" +msgstr "" + +#: 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:1223 +msgid "dt passed to setcolorder has no names" +msgstr "" + +#: assign.c:1225 +#, c-format +msgid "Internal error: dt passed to setcolorder has %d columns but %d names" +msgstr "" + +#: assign.c:1232 +msgid "" +"Internal error: o passed to Csetcolorder contains an NA or out-of-bounds" +msgstr "" + +#: assign.c:1234 +msgid "Internal error: o passed to Csetcolorder contains a duplicate" +msgstr "" + +#: between.c:12 +#, c-format +msgid "" +"Incompatible vector lengths: length(x)==%d length(lower)==%d length(upper)==" +"%d. Each should be either length 1 or the length of the longest." +msgstr "" + +#: between.c:16 +msgid "incbounds must be TRUE or FALSE" +msgstr "" + +#: between.c:19 +msgid "NAbounds must be TRUE or NA" +msgstr "" + +#: between.c:22 +msgid "check must be TRUE or FALSE" +msgstr "" + +#: between.c:64 +#, c-format +msgid "Item %d of lower (%d) is greater than item %d of upper (%d)" +msgstr "" + +#: between.c:88 +msgid "x is integer64 but lower and/or upper are not." +msgstr "" + +#: between.c:95 +#, c-format +msgid "Item %d of lower (%lld) is greater than item %d of upper (%lld)" +msgstr "" + +#: between.c:115 +msgid "" +"x is not integer64 but lower and/or upper is integer64. Please align classes." +msgstr "" + +#: between.c:122 +#, c-format +msgid "Item %d of lower (%f) is greater than item %d of upper (%f)" +msgstr "" + +#: between.c:172 +#, c-format +msgid "Item %d of lower ('%s') is greater than item %d of upper ('%s')" +msgstr "" + +#: between.c:190 +#, c-format +msgid "" +"Internal error: between.c unsupported type '%s' should have been caught at R " +"level" +msgstr "" + +#: bmerge.c:48 +msgid "Internal error: icols is not integer vector" +msgstr "" + +#: bmerge.c:49 +msgid "Internal error: xcols is not integer vector" +msgstr "" + +#: bmerge.c:50 +#, c-format +msgid "Internal error: length(icols) [%d] > length(xcols) [%d]" +msgstr "" + +#: bmerge.c:57 +#, c-format +msgid "Internal error. icols[%d] is NA" +msgstr "" + +#: bmerge.c:58 +#, c-format +msgid "Internal error. xcols[%d] is NA" +msgstr "" + +#: bmerge.c:59 +#, c-format +msgid "icols[%d]=%d outside range [1,length(i)=%d]" +msgstr "" + +#: bmerge.c:60 +#, c-format +msgid "xcols[%d]=%d outside range [1,length(x)=%d]" +msgstr "" + +#: bmerge.c:63 +#, c-format +msgid "typeof x.%s (%s) != typeof i.%s (%s)" +msgstr "" + +#: bmerge.c:70 +msgid "roll is character but not 'nearest'" +msgstr "" + +#: bmerge.c:71 +msgid "roll='nearest' can't be applied to a character column, yet." +msgstr "" + +#: bmerge.c:74 +msgid "Internal error: roll is not character or double" +msgstr "" + +#: bmerge.c:79 +msgid "rollends must be a length 2 logical vector" +msgstr "" + +#: bmerge.c:89 uniqlist.c:270 +msgid "" +"Internal error: invalid value for 'mult'. please report to data.table issue " +"tracker" +msgstr "" + +#: bmerge.c:93 +msgid "" +"Internal error: opArg is not an integer vector of length equal to length(on)" +msgstr "" + +#: bmerge.c:96 +msgid "Internal error: nqgrpArg must be an integer vector" +msgstr "" + +#: bmerge.c:102 +msgid "Intrnal error: nqmaxgrpArg is not a positive length-1 integer vector" +msgstr "" + +#: bmerge.c:111 +msgid "Internal error in allocating memory for non-equi join" +msgstr "" + +#: bmerge.c:156 +msgid "Internal error: xoArg is not an integer vector" +msgstr "" + +#: bmerge.c:271 bmerge.c:379 +#, c-format +msgid "" +"Internal error in bmerge_r for '%s' column. Unrecognized value op[col]=%d" +msgstr "" + +#: bmerge.c:303 +#, c-format +msgid "Only '==' operator is supported for columns of type %s." +msgstr "" + +#: bmerge.c:410 +#, c-format +msgid "Type '%s' not supported for joining/merging" +msgstr "" + +#: bmerge.c:468 +msgid "Internal error: xlow!=xupp-1 || xlowxuppIn" +msgstr "" + +#: chmatch.c:4 +#, c-format +msgid "x is type '%s' (must be 'character' or NULL)" +msgstr "" + +#: chmatch.c:5 +#, c-format +msgid "table is type '%s' (must be 'character' or NULL)" +msgstr "" + +#: chmatch.c:6 +msgid "Internal error: either chin or chmatchdup should be true not both" +msgstr "" + +#: chmatch.c:30 +#, c-format +msgid "" +"Internal error: CHARSXP '%s' has a negative truelength (%d). Please file an " +"issue on the data.table tracker." +msgstr "" + +#: chmatch.c:60 +#, c-format +msgid "" +"Failed to allocate %lld bytes working memory in chmatchdup: length(table)=%d " +"length(unique(table))=%d" +msgstr "" + +#: cj.c:89 +#, c-format +msgid "Type '%s' not supported by CJ." +msgstr "" + +#: coalesce.c:5 +msgid "Internal error in coalesce.c: input is list(...) at R level" +msgstr "" + +#: coalesce.c:7 +msgid "" +"Internal error in coalesce.c: argument 'inplaceArg' must be TRUE or FALSE" +msgstr "" + +#: coalesce.c:16 +msgid "" +"The first argument is a list, data.table or data.frame. In this case there " +"should be no other arguments provided." +msgstr "" + +#: coalesce.c:32 +#, c-format +msgid "" +"Item 1 is a factor but item %d is not a factor. When factors are involved, " +"all items must be factor." +msgstr "" + +#: coalesce.c:34 +#, c-format +msgid "" +"Item %d is a factor but its levels are not identical to the first item's " +"levels." +msgstr "" + +#: coalesce.c:38 +#, c-format +msgid "" +"Item %d is a factor but item 1 is not a factor. When factors are involved, " +"all items must be factor." +msgstr "" + +#: coalesce.c:41 +#, c-format +msgid "" +"Item %d is type %s but the first item is type %s. Please coerce before " +"coalescing." +msgstr "" + +#: coalesce.c:43 +#, c-format +msgid "Item %d has a different class than item 1." +msgstr "" + +#: coalesce.c:46 +#, c-format +msgid "" +"Item %d is length %d but the first item is length %d. Only singletons are " +"recycled." +msgstr "" + +#: coalesce.c:166 +#, c-format +msgid "Unsupported type: %s" +msgstr "" + +#: dogroups.c:14 +msgid "Internal error: order not integer vector" +msgstr "" + +#: dogroups.c:15 +msgid "Internal error: starts not integer" +msgstr "" + +#: dogroups.c:16 +msgid "Internal error: lens not integer" +msgstr "" + +#: dogroups.c:18 +msgid "Internal error: jiscols not NULL but o__ has length" +msgstr "" + +#: dogroups.c:19 +msgid "Internal error: xjiscols not NULL but o__ has length" +msgstr "" + +#: dogroups.c:20 +msgid "'env' should be an environment" +msgstr "" + +#: dogroups.c:39 +#, c-format +msgid "" +"Internal error: unsupported size-0 type '%s' in column %d of 'by' should " +"have been caught earlier" +msgstr "" + +#: dogroups.c:43 +#, c-format +msgid "!length(bynames)[%d]==length(groups)[%d]==length(grpcols)[%d]" +msgstr "" + +#: dogroups.c:62 +msgid "row.names attribute of .SD not found" +msgstr "" + +#: dogroups.c:64 +#, 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 +msgid "length(names)!=length(SD)" +msgstr "" + +#: dogroups.c:73 +#, c-format +msgid "" +"Internal error: size-0 type %d in .SD column %d should have been caught " +"earlier" +msgstr "" + +#: dogroups.c:83 +msgid "length(xknames)!=length(xSD)" +msgstr "" + +#: dogroups.c:87 +#, c-format +msgid "" +"Internal error: type %d in .xSD column %d should have been caught by now" +msgstr "" + +#: dogroups.c:91 +#, c-format +msgid "length(iSD)[%d] != length(jiscols)[%d]" +msgstr "" + +#: dogroups.c:92 +#, 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 +#, c-format +msgid "j evaluates to type '%s'. Must evaluate to atomic vector or list." +msgstr "" + +#: dogroups.c:281 +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:291 +msgid "" +"RHS is NULL when grouping :=. Makes no sense to delete a column by group. " +"Perhaps use an empty vector instead." +msgstr "" + +#: dogroups.c:295 +#, c-format +msgid "" +"Supplied %d items to be assigned to group %d of size %d in column '%s'. The " +"RHS length must either be 1 (single values are ok) or match the LHS length " +"exactly. If you wish to 'recycle' the RHS please use rep() explicitly to " +"make this intent clear to readers of your code." +msgstr "" + +#: dogroups.c:304 +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:326 +msgid "j doesn't evaluate to the same number of columns for each group" +msgstr "" + +#: dogroups.c:360 +#, c-format +msgid "" +"Column %d of j's result for the first group is NULL. We rely on the column " +"types of the first result to decide the type expected for the remaining " +"groups (and require consistency). NULL columns are acceptable for later " +"groups (and those are replaced with NA of appropriate type and recycled) but " +"not for the first. Please use a typed empty vector instead, such as " +"integer() or numeric()." +msgstr "" + +#: dogroups.c:386 +#, c-format +msgid "dogroups: length(ans)[%d]!=ngrpcols[%d]+njval[%d]" +msgstr "" + +#: dogroups.c:426 +#, 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:428 +#, c-format +msgid "" +"Supplied %d items for column %d of group %d which has %d rows. The RHS " +"length must either be 1 (single values are ok) or match the LHS length " +"exactly. If you wish to 'recycle' the RHS please use rep() explicitly to " +"make this intent clear to readers of your code." +msgstr "" + +#: dogroups.c:453 +#, c-format +msgid "Internal error: block 0 [%d] and block 1 [%d] have both run" +msgstr "" + +#: dogroups.c:481 +msgid "growVector passed NULL" +msgstr "" + +#: fastmean.c:39 +msgid "narm should be TRUE or FALSE" +msgstr "" + +#: fastmean.c:45 +#, c-format +msgid "fastmean was passed type %s, not numeric or logical" +msgstr "" + +#: fastmean.c:83 fastmean.c:111 +#, c-format +msgid "Internal error: type '%s' not caught earlier in fastmean" +msgstr "" + +#: fcast.c:80 +#, c-format +msgid "Unsupported column type in fcast val: '%s'" +msgstr "" + +#: fifelse.c:5 +msgid "Argument 'test' must be logical." +msgstr "" + +#: fifelse.c:23 +#, 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 +msgid "" +"'yes' has different class than 'no'. Please make sure that both arguments " +"have the same class." +msgstr "" + +#: fifelse.c:33 +msgid "'yes' and 'no' are both type factor but their levels are different." +msgstr "" + +#: fifelse.c:38 +#, c-format +msgid "Length of 'yes' is %lld but must be 1 or length of 'test' (%lld)." +msgstr "" + +#: fifelse.c:40 +#, c-format +msgid "Length of 'no' is %lld but must be 1 or length of 'test' (%lld)." +msgstr "" + +#: fifelse.c:51 +#, c-format +msgid "Length of 'na' is %lld but must be 1" +msgstr "" + +#: fifelse.c:57 +#, 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 +msgid "" +"'yes' has different class than 'na'. Please make sure that both arguments " +"have the same class." +msgstr "" + +#: fifelse.c:63 +msgid "'yes' and 'na' are both type factor but their levels are different." +msgstr "" + +#: fifelse.c:133 +#, c-format +msgid "Type %s is not supported." +msgstr "" + +#: fmelt.c:18 +msgid "'x' must be an integer" +msgstr "" + +#: fmelt.c:19 +msgid "'n' must be a positive integer" +msgstr "" + +#: fmelt.c:41 +msgid "Argument to 'which' must be logical" +msgstr "" + +#: fmelt.c:70 +msgid "concat: 'vec must be a character vector" +msgstr "" + +#: fmelt.c:71 +msgid "concat: 'idx' must be an integer vector of length >= 0" +msgstr "" + +#: fmelt.c:75 +msgid "" +"concat: 'idx' must take values between 0 and length(vec); 0 <= idx <= " +"length(vec)" +msgstr "" + +#: fmelt.c:102 +#, c-format +msgid "Unknown 'measure.vars' type %s at index %d of list" +msgstr "" + +#: fmelt.c:154 fmelt.c:219 +#, c-format +msgid "Unknown 'id.vars' type %s, must be character or integer vector" +msgstr "" + +#: fmelt.c:159 fmelt.c:223 +msgid "One or more values in 'id.vars' is invalid." +msgstr "" + +#: fmelt.c:184 +#, c-format +msgid "" +"Unknown 'measure.vars' type %s, must be character or integer vector/list" +msgstr "" + +#: fmelt.c:193 fmelt.c:239 +msgid "One or more values in 'measure.vars' is invalid." +msgstr "" + +#: fmelt.c:231 +#, c-format +msgid "Unknown 'measure.vars' type %s, must be character or integer vector" +msgstr "" + +#: fmelt.c:276 +msgid "" +"When 'measure.vars' is a list, 'value.name' must be a character vector of " +"length =1 or =length(measure.vars)." +msgstr "" + +#: fmelt.c:277 +msgid "" +"When 'measure.vars' is either not specified or a character/integer vector, " +"'value.name' must be a character vector of length =1." +msgstr "" + +#: fmelt.c:280 +msgid "'variable.name' must be a character/integer vector of length=1." +msgstr "" + +#: fmelt.c:329 +msgid "" +"Internal error: combineFactorLevels in fmelt.c expects all-character input" +msgstr "" + +#: fmelt.c:332 +msgid "" +"Internal error: combineFactorLevels in fmelt.c expects a character target to " +"factorize" +msgstr "" + +#: fmelt.c:490 +#, c-format +msgid "Unknown column type '%s' for column '%s'." +msgstr "" + +#: fmelt.c:514 +#, c-format +msgid "Internal error: fmelt.c:getvarcols %d %d" +msgstr "" + +#: fmelt.c:662 +#, c-format +msgid "Unknown column type '%s' for column '%s' in 'data'" +msgstr "" + +#: fmelt.c:673 +msgid "Input is not of type VECSXP, expected a data.table, data.frame or list" +msgstr "" + +#: fmelt.c:674 +msgid "Argument 'value.factor' should be logical TRUE/FALSE" +msgstr "" + +#: fmelt.c:675 +msgid "Argument 'variable.factor' should be logical TRUE/FALSE" +msgstr "" + +#: fmelt.c:676 +msgid "Argument 'na.rm' should be logical TRUE/FALSE." +msgstr "" + +#: fmelt.c:677 +msgid "Argument 'variable.name' must be a character vector" +msgstr "" + +#: fmelt.c:678 +msgid "Argument 'value.name' must be a character vector" +msgstr "" + +#: fmelt.c:679 +msgid "Argument 'verbose' should be logical TRUE/FALSE" +msgstr "" + +#: fmelt.c:687 +msgid "names(data) is NULL. Please report to data.table-help" +msgstr "" + +#: forder.c:374 +msgid "Must an integer or numeric vector length 1" +msgstr "" + +#: forder.c:375 +msgid "Must be 2, 1 or 0" +msgstr "" + +#: forder.c:431 +msgid "" +"Internal error: input is not either a list of columns, or an atomic vector." +msgstr "" + +#: forder.c:433 +msgid "" +"Internal error: input is an atomic vector (not a list of columns) but by= is " +"not NULL" +msgstr "" + +#: forder.c:435 +msgid "" +"Input is an atomic vector (not a list of columns) but order= is not a length " +"1 integer" +msgstr "" + +#: forder.c:448 +msgid "Internal error: DT is an empty list() of 0 columns" +msgstr "" + +#: forder.c:450 +#, c-format +msgid "" +"Internal error: DT has %d columns but 'by' is either not integer or is " +"length 0" +msgstr "" + +#: forder.c:452 +#, c-format +msgid "" +"Either order= is not integer or its length (%d) is different to by='s length " +"(%d)" +msgstr "" + +#: forder.c:458 +#, c-format +msgid "internal error: 'by' value %d out of range [1,%d]" +msgstr "" + +#: forder.c:460 +#, c-format +msgid "Column %d is length %d which differs from length of column 1 (%d)\n" +msgstr "" + +#: forder.c:464 +msgid "retGrp= must be TRUE or FALSE" +msgstr "" + +#: forder.c:467 +msgid "sort= must be TRUE or FALSE" +msgstr "" + +#: forder.c:470 +msgid "At least one of retGrp= or sort= must be TRUE" +msgstr "" + +#: forder.c:472 +msgid "na.last must be logical TRUE, FALSE or NA of length 1" +msgstr "" + +#: forder.c:1301 +msgid "x must be either NULL or an integer vector" +msgstr "" + +#: forder.c:1303 +msgid "nrow must be integer vector length 1" +msgstr "" + +#: forder.c:1305 +#, c-format +msgid "nrow==%d but must be >=0" +msgstr "" + +#: forder.c:1322 +msgid "x must be type 'double'" +msgstr "" + +#: frank.c:11 +#, c-format +msgid "Internal error. Argument 'x' to Cdt_na is type '%s' not 'list'" +msgstr "" + +#: frank.c:12 +#, 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 +#, 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 +#, 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 +#, c-format +msgid "Unsupported column type '%s'" +msgstr "" + +#: frank.c:83 +msgid "" +"Internal error: invalid ties.method for frankv(), should have been caught " +"before. please report to data.table issue tracker" +msgstr "" + +#: frank.c:130 +#, c-format +msgid "Internal error: unknown ties value in frank: %d" +msgstr "" + +#: frank.c:141 +#, c-format +msgid "Internal error. Argument 'x' to CanyNA is type '%s' not 'list'" +msgstr "" + +#: frank.c:142 +#, c-format +msgid "Internal error. Argument 'cols' to CanyNA is type '%s' not 'integer'" +msgstr "" + +#: freadR.c:84 +msgid "" +"Internal error: freadR input not a single character string: a filename or " +"the data itself. Should have been caught at R level." +msgstr "" + +#: freadR.c:101 +msgid "" +"Internal error: freadR sep not a single character. R level catches this." +msgstr "" + +#: freadR.c:105 +msgid "" +"Internal error: freadR dec not a single character. R level catches this." +msgstr "" + +#: freadR.c:112 +msgid "quote= must be a single character, blank \")\", or FALSE" +msgstr "" + +#: freadR.c:137 +msgid "Internal error: skip not integer or string in freadR.c" +msgstr "" + +#: freadR.c:140 +#, c-format +msgid "Internal error: NAstringsArg is type '%s'. R level catches this" +msgstr "" + +#: freadR.c:153 +#, c-format +msgid "nThread(%d)<1" +msgstr "" + +#: freadR.c:160 +msgid "'integer64' must be a single character string" +msgstr "" + +#: freadR.c:660 +#, c-format +msgid "%s" +msgstr "" + +#: froll.c:428 +#, c-format +msgid "%s: results from provided FUN are not length 1" +msgstr "" + +#: froll.c:438 +#, c-format +msgid "%s: results from provided FUN are not of type double" +msgstr "" + +#: frollR.c:15 +msgid "x must be of type numeric or logical" +msgstr "" + +#: frollR.c:26 +msgid "x must be list, data.frame or data.table of numeric or logical types" +msgstr "" + +#: frollR.c:47 frollR.c:264 +msgid "n must be non 0 length" +msgstr "" + +#: frollR.c:50 +msgid "adaptive must be TRUE or FALSE" +msgstr "" + +#: frollR.c:58 +msgid "n must be integer, list is accepted for adaptive TRUE" +msgstr "" + +#: frollR.c:65 frollR.c:256 frollR.c:259 +msgid "n must be integer" +msgstr "" + +#: frollR.c:72 +msgid "n must be positive integer values (> 0)" +msgstr "" + +#: frollR.c:81 frollR.c:93 +msgid "n must be integer vector or list of integer vectors" +msgstr "" + +#: frollR.c:104 gsumm.c:342 gsumm.c:577 gsumm.c:686 gsumm.c:805 gsumm.c:950 +#: gsumm.c:1262 gsumm.c:1403 uniqlist.c:350 +msgid "na.rm must be TRUE or FALSE" +msgstr "" + +#: frollR.c:107 +msgid "hasNA must be TRUE, FALSE or NA" +msgstr "" + +#: frollR.c:109 +msgid "" +"using hasNA FALSE and na.rm TRUE does not make sense, if you know there are " +"NA values use hasNA TRUE, otherwise leave it as default NA" +msgstr "" + +#: frollR.c:119 frollR.c:275 +msgid "" +"Internal error: invalid align argument in rolling function, should have been " +"caught before. please report to data.table issue tracker." +msgstr "" + +#: frollR.c:122 +msgid "" +"using adaptive TRUE and align argument different than 'right' is not " +"implemented" +msgstr "" + +#: frollR.c:135 +msgid "" +"adaptive rolling function can only process 'x' having equal length of " +"elements, like data.table or data.frame; If you want to call rolling " +"function on list having variable length of elements call it for each field " +"separately" +msgstr "" + +#: frollR.c:137 +msgid "" +"length of integer vector(s) provided as list to 'n' argument must be equal " +"to number of observations provided in 'x'" +msgstr "" + +#: frollR.c:151 +msgid "" +"Internal error: invalid fun argument in rolling function, should have been " +"caught before. please report to data.table issue tracker." +msgstr "" + +#: frollR.c:155 frollR.c:279 nafill.c:136 shift.c:21 +msgid "fill must be a vector of length 1" +msgstr "" + +#: frollR.c:169 frollR.c:292 +msgid "fill must be numeric" +msgstr "" + +#: frollR.c:185 +msgid "" +"Internal error: invalid algo argument in rolling function, should have been " +"caught before. please report to data.table issue tracker." +msgstr "" + +#: frollR.c:190 +#, c-format +msgid "Internal error: badaptive=%d but ik is not integer" +msgstr "" + +#: frollR.c:219 +#, c-format +msgid "Internal error: Unknown sfun value in froll: %d" +msgstr "" + +#: frollR.c:238 +msgid "internal error: 'fun' must be a function" +msgstr "" + +#: frollR.c:240 +msgid "internal error: 'rho' should be an environment" +msgstr "" + +#: fsort.c:111 +msgid "x must be a vector of type 'double' currently" +msgstr "" + +#: fsort.c:157 +msgid "Cannot yet handle negatives." +msgstr "" + +#: fsort.c:173 +msgid "Unable to allocate working memory" +msgstr "" + +#: fsort.c:230 +msgid "Internal error: counts[nBatch-1][MSBsize-1] != length(x)" +msgstr "" + +#: fwriteR.c:41 +msgid "Internal error: col passed to getMaxCategLen is missing levels" +msgstr "" + +#: fwriteR.c:75 +msgid "Internal error: getMaxListItemLen should have caught this up front." +msgstr "" + +#: fwriteR.c:98 +#, c-format +msgid "" +"Row %d of list column is type '%s' - not yet implemented. fwrite() can write " +"list columns containing items which are atomic vectors of" +msgstr "" + +#: fwriteR.c:170 +msgid "" +"fwrite must be passed an object of type list; e.g. data.frame, data.table" +msgstr "" + +#: fwriteR.c:234 +#, c-format +msgid "Column %d's length (%d) is not the same as column 1's length (%d)" +msgstr "" + +#: fwriteR.c:237 +#, c-format +msgid "Column %d's type is '%s' - not yet implemented in fwrite." +msgstr "" + +#: fwriteR.c:270 +#, c-format +msgid "" +"sep ('%c'), sep2 ('%c') and dec ('%c') must all be different. Column %d is a " +"list column." +msgstr "" + +#: gsumm.c:43 +msgid "env is not an environment" +msgstr "" + +#: gsumm.c:45 +msgid "o is not an integer vector" +msgstr "" + +#: gsumm.c:46 +msgid "f is not an integer vector" +msgstr "" + +#: gsumm.c:47 +msgid "l is not an integer vector" +msgstr "" + +#: gsumm.c:56 +msgid "irowsArg is neither an integer vector nor NULL" +msgstr "" + +#: gsumm.c:58 +#, c-format +msgid "length(f)=%d != length(l)=%d" +msgstr "" + +#: gsumm.c:66 +#, c-format +msgid "o has length %d but sum(l)=%d" +msgstr "" + +#: gsumm.c:69 +msgid "Internal error: o's maxgrpn attribute mismatches recalculated maxgrpn" +msgstr "" + +#: gsumm.c:89 +#, c-format +msgid "" +"Internal error: nrow=%d ngrp=%d nbit=%d shift=%d highSize=%d nBatch=%d " +"batchSize=%d lastBatchSize=%d\n" +msgstr "" + +#: gsumm.c:116 +msgid "" +"Internal error: Failed to allocate counts or TMP when assigning g in gforce" +msgstr "" + +#: gsumm.c:334 +#, c-format +msgid "gather implemented for INTSXP, REALSXP, and CPLXSXP but not '%s'" +msgstr "" + +#: gsumm.c:345 +msgid "sum is not meaningful for factors." +msgstr "" + +#: gsumm.c:350 gsumm.c:606 +#, c-format +msgid "nrow [%d] != length(x) [%d] in gsum" +msgstr "" + +#: gsumm.c:565 +#, c-format +msgid "" +"Type '%s' not supported by GForce sum (gsum). Either add the prefix base::" +"sum(.) or turn off GForce optimization using options(datatable.optimize=1)" +msgstr "" + +#: gsumm.c:578 +msgid "" +"GForce mean can only be applied to columns, not .SD or similar. Likely " +"you're looking for 'DT[,lapply(.SD,mean),by=,.SDcols=]'. See ?data.table." +msgstr "" + +#: gsumm.c:579 +msgid "mean is not meaningful for factors." +msgstr "" + +#: gsumm.c:599 +#, c-format +msgid "Internal error: gsum returned type '%s'. typeof(x) is '%s'" +msgstr "" + +#: gsumm.c:609 +#, c-format +msgid "Unable to allocate %d * %d bytes for sum in gmean na.rm=TRUE" +msgstr "" + +#: gsumm.c:612 +#, c-format +msgid "Unable to allocate %d * %d bytes for counts in gmean na.rm=TRUE" +msgstr "" + +#: gsumm.c:638 +#, c-format +msgid "Unable to allocate %d * %d bytes for si in gmean na.rm=TRUE" +msgstr "" + +#: gsumm.c:650 +#, c-format +msgid "" +"Type '%s' not supported by GForce mean (gmean) na.rm=TRUE. Either add the " +"prefix base::mean(.) or turn off GForce optimization using options(datatable." +"optimize=1)" +msgstr "" + +#: gsumm.c:674 +msgid "Internal error: unsupported type at the end of gmean" +msgstr "" + +#: gsumm.c:687 +msgid "" +"GForce min can only be applied to columns, not .SD or similar. To find min " +"of all items in a list such as .SD, either add the prefix base::min(.SD) or " +"turn off GForce optimization using options(datatable.optimize=1). More " +"likely, you may be looking for 'DT[,lapply(.SD,min),by=,.SDcols=]'" +msgstr "" + +#: gsumm.c:688 +msgid "min is not meaningful for factors." +msgstr "" + +#: gsumm.c:693 +#, c-format +msgid "nrow [%d] != length(x) [%d] in gmin" +msgstr "" + +#: gsumm.c:791 +msgid "Type 'complex' has no well-defined min" +msgstr "" + +#: gsumm.c:794 +#, c-format +msgid "" +"Type '%s' not supported by GForce min (gmin). Either add the prefix base::" +"min(.) or turn off GForce optimization using options(datatable.optimize=1)" +msgstr "" + +#: gsumm.c:806 +msgid "" +"GForce max can only be applied to columns, not .SD or similar. To find max " +"of all items in a list such as .SD, either add the prefix base::max(.SD) or " +"turn off GForce optimization using options(datatable.optimize=1). More " +"likely, you may be looking for 'DT[,lapply(.SD,max),by=,.SDcols=]'" +msgstr "" + +#: gsumm.c:807 +msgid "max is not meaningful for factors." +msgstr "" + +#: gsumm.c:812 +#, c-format +msgid "nrow [%d] != length(x) [%d] in gmax" +msgstr "" + +#: gsumm.c:937 +msgid "Type 'complex' has no well-defined max" +msgstr "" + +#: gsumm.c:940 +#, c-format +msgid "" +"Type '%s' not supported by GForce max (gmax). Either add the prefix base::" +"max(.) or turn off GForce optimization using options(datatable.optimize=1)" +msgstr "" + +#: gsumm.c:951 +msgid "" +"GForce median can only be applied to columns, not .SD or similar. To find " +"median of all items in a list such as .SD, either add the prefix stats::" +"median(.SD) or turn off GForce optimization using options(datatable." +"optimize=1). More likely, you may be looking for 'DT[,lapply(.SD,median)," +"by=,.SDcols=]'" +msgstr "" + +#: gsumm.c:952 +msgid "median is not meaningful for factors." +msgstr "" + +#: gsumm.c:955 +#, c-format +msgid "nrow [%d] != length(x) [%d] in gmedian" +msgstr "" + +#: gsumm.c:992 +#, c-format +msgid "" +"Type '%s' not supported by GForce median (gmedian). Either add the prefix " +"stats::median(.) or turn " +msgstr "" + +#: gsumm.c:1006 +#, c-format +msgid "nrow [%d] != length(x) [%d] in gtail" +msgstr "" + +#: gsumm.c:1074 +#, c-format +msgid "" +"Type '%s' not supported by GForce tail (gtail). Either add the prefix utils::" +"tail(.) or turn off GForce optimization using options(datatable.optimize=1)" +msgstr "" + +#: gsumm.c:1086 gsumm.c:1177 +#, c-format +msgid "nrow [%d] != length(x) [%d] in ghead" +msgstr "" + +#: gsumm.c:1154 +#, c-format +msgid "" +"Type '%s' not supported by GForce head (ghead). Either add the prefix utils::" +"head(.) or turn off GForce optimization using options(datatable.optimize=1)" +msgstr "" + +#: gsumm.c:1162 +msgid "" +"Internal error, gtail is only implemented for n=1. This should have been " +"caught before. please report to data.table issue tracker." +msgstr "" + +#: gsumm.c:1167 +msgid "" +"Internal error, ghead is only implemented for n=1. This should have been " +"caught before. please report to data.table issue tracker." +msgstr "" + +#: gsumm.c:1173 +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 "" + +#: gsumm.c:1251 +#, c-format +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 "" + +#: gsumm.c:1263 +msgid "" +"GForce var/sd can only be applied to columns, not .SD or similar. For the " +"full covariance matrix of all items in a list such as .SD, either add the " +"prefix stats::var(.SD) (or stats::sd(.SD)) or turn off GForce optimization " +"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 "" + +#: gsumm.c:1264 +msgid "var/sd is not meaningful for factors." +msgstr "" + +#: gsumm.c:1267 +#, c-format +msgid "nrow [%d] != length(x) [%d] in gvar" +msgstr "" + +#: gsumm.c:1383 +#, c-format +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 "" + +#: gsumm.c:1385 +#, c-format +msgid "" +"Type '%s' not supported by GForce sd (gsd). Either add the prefix stats::" +"sd(.) or turn off GForce optimization using options(datatable.optimize=1)" +msgstr "" + +#: gsumm.c:1404 +msgid "" +"GForce prod can only be applied to columns, not .SD or similar. To multiply " +"all items in a list such as .SD, either add the prefix base::prod(.SD) or " +"turn off GForce optimization using options(datatable.optimize=1). More " +"likely, you may be looking for 'DT[,lapply(.SD,prod),by=,.SDcols=]'" +msgstr "" + +#: gsumm.c:1405 +msgid "prod is not meaningful for factors." +msgstr "" + +#: gsumm.c:1410 +#, c-format +msgid "nrow [%d] != length(x) [%d] in gprod" +msgstr "" + +#: gsumm.c:1412 +#, c-format +msgid "Unable to allocate %d * %d bytes for gprod" +msgstr "" + +#: gsumm.c:1447 +#, c-format +msgid "" +"Type '%s' not supported by GForce prod (gprod). Either add the prefix base::" +"prod(.) or turn off GForce optimization using options(datatable.optimize=1)" +msgstr "" + +#: ijoin.c:22 ijoin.c:243 +msgid "" +"Internal error: invalid value for 'mult'; this should have been caught " +"before. please report to data.table issue tracker" +msgstr "" + +#: ijoin.c:29 ijoin.c:250 +msgid "" +"Internal error: invalid value for 'type'; this should have been caught " +"before. please report to data.table issue tracker" +msgstr "" + +#: ijoin.c:56 ijoin.c:121 +#, c-format +msgid "Internal error: unknown type in mult=%d in lookup: %d" +msgstr "" + +#: ijoin.c:124 ijoin.c:215 +#, c-format +msgid "Internal error: unknown mult in lookup: %d" +msgstr "" + +#: ijoin.c:160 +#, c-format +msgid "Internal error: unknown type lookup should have been caught earlier: %d" +msgstr "" + +#: ijoin.c:212 +#, c-format +msgid "" +"Internal error: unknown type in mult=%d in lookup should have been caught " +"earlier: %d" +msgstr "" + +#: ijoin.c:323 +#, c-format +msgid "Internal error: unknown type in mult=ALL in overlaps: %d" +msgstr "" + +#: ijoin.c:464 ijoin.c:571 ijoin.c:720 +#, c-format +msgid "Internal error: unknown type in mult=%d in overlaps: %d" +msgstr "" + +#: ijoin.c:723 +#, c-format +msgid "Internal error: unknown mult in overlaps: %d" +msgstr "" + +#: init.c:198 +#, c-format +msgid "" +"Pointers are %d bytes, greater than 8. We have not tested on any " +"architecture greater than 64bit yet." +msgstr "" + +#: init.c:209 +#, c-format +msgid "Checking NA_INTEGER [%d] == INT_MIN [%d] %s" +msgstr "" + +#: init.c:210 +#, c-format +msgid "Checking NA_INTEGER [%d] == NA_LOGICAL [%d] %s" +msgstr "" + +#: init.c:211 +#, c-format +msgid "Checking sizeof(int) [%d] is 4 %s" +msgstr "" + +#: init.c:212 +#, c-format +msgid "Checking sizeof(double) [%d] is 8 %s" +msgstr "" + +#: init.c:214 +#, c-format +msgid "Checking sizeof(long long) [%d] is 8 %s" +msgstr "" + +#: init.c:215 +#, c-format +msgid "Checking sizeof(pointer) [%d] is 4 or 8 %s" +msgstr "" + +#: init.c:216 +#, c-format +msgid "Checking sizeof(SEXP) [%d] == sizeof(pointer) [%d] %s" +msgstr "" + +#: init.c:217 +#, c-format +msgid "Checking sizeof(uint64_t) [%d] is 8 %s" +msgstr "" + +#: init.c:218 +#, c-format +msgid "Checking sizeof(int64_t) [%d] is 8 %s" +msgstr "" + +#: init.c:219 +#, c-format +msgid "Checking sizeof(signed char) [%d] is 1 %s" +msgstr "" + +#: init.c:220 +#, c-format +msgid "Checking sizeof(int8_t) [%d] is 1 %s" +msgstr "" + +#: init.c:221 +#, c-format +msgid "Checking sizeof(uint8_t) [%d] is 1 %s" +msgstr "" + +#: init.c:222 +#, c-format +msgid "Checking sizeof(int16_t) [%d] is 2 %s" +msgstr "" + +#: init.c:223 +#, c-format +msgid "Checking sizeof(uint16_t) [%d] is 2 %s" +msgstr "" + +#: init.c:226 +#, c-format +msgid "Checking LENGTH(allocVector(INTSXP,2)) [%d] is 2 %s" +msgstr "" + +#: init.c:227 +#, c-format +msgid "Checking TRUELENGTH(allocVector(INTSXP,2)) [%d] is 0 %s" +msgstr "" + +#: init.c:234 +#, c-format +msgid "Checking memset(&i,0,sizeof(int)); i == (int)0 %s" +msgstr "" + +#: init.c:237 +#, c-format +msgid "Checking memset(&ui, 0, sizeof(unsigned int)); ui == (unsigned int)0 %s" +msgstr "" + +#: init.c:240 +#, c-format +msgid "Checking memset(&d, 0, sizeof(double)); d == (double)0.0 %s" +msgstr "" + +#: init.c:243 +#, c-format +msgid "Checking memset(&ld, 0, sizeof(long double)); ld == (long double)0.0 %s" +msgstr "" + +#: init.c:246 +msgid "The ascii character '/' is not just before '0'" +msgstr "" + +#: init.c:247 +msgid "The C expression (uint_fast8_t)('/'-'0')<10 is true. Should be false." +msgstr "" + +#: init.c:248 +msgid "The ascii character ':' is not just after '9'" +msgstr "" + +#: init.c:249 +msgid "The C expression (uint_fast8_t)('9'-':')<10 is true. Should be false." +msgstr "" + +#: init.c:254 +#, c-format +msgid "Conversion of NA_INT64 via double failed %lld!=%lld" +msgstr "" + +#: init.c:258 +msgid "NA_INT64_D (negative -0.0) is not == 0.0." +msgstr "" + +#: init.c:259 +msgid "NA_INT64_D (negative -0.0) is not ==-0.0." +msgstr "" + +#: init.c:260 +msgid "ISNAN(NA_INT64_D) is TRUE but should not be" +msgstr "" + +#: init.c:261 +msgid "isnan(NA_INT64_D) is TRUE but should not be" +msgstr "" + +#: init.c:290 +#, c-format +msgid "PRINTNAME(install(\")integer64\")) has returned %s not %s" +msgstr "" + +#: init.c:359 +msgid ".Last.value in namespace is not a length 1 integer" +msgstr "" + +#: nafill.c:83 +msgid "" +"'x' argument is atomic vector, in-place update is supported only for list/" +"data.table" +msgstr "" + +#: nafill.c:85 nafill.c:95 +msgid "'x' argument must be numeric type, or list/data.table of numeric types" +msgstr "" + +#: nafill.c:133 nafill.c:161 +msgid "" +"Internal error: invalid type argument in nafillR function, should have been " +"caught before. Please report to data.table issue tracker." +msgstr "" + +#: openmp-utils.c:67 +msgid "'verbose' must be TRUE or FALSE" +msgstr "" + +#: openmp-utils.c:91 +msgid "" +"restore_after_fork= must be TRUE, FALSE, or NULL (default). " +"getDTthreads(verbose=TRUE) reports the current setting.\n" +msgstr "" + +#: openmp-utils.c:105 +#, c-format +msgid "" +"threads= must be either NULL (default) or a single number. It has length %d" +msgstr "" + +#: openmp-utils.c:107 +msgid "threads= must be either NULL (default) or type integer/numeric" +msgstr "" + +#: openmp-utils.c:109 +msgid "" +"threads= must be either NULL or a single integer >= 0. See ?setDTthreads." +msgstr "" + +#: openmp-utils.c:114 +msgid "Internal error: percent= must be TRUE or FALSE at C level" +msgstr "" + +#: openmp-utils.c:117 +#, c-format +msgid "" +"Internal error: threads==%d should be between 2 and 100 (percent=TRUE at C " +"level)." +msgstr "" + +#: rbindlist.c:8 +msgid "fill= should be TRUE or FALSE" +msgstr "" + +#: rbindlist.c:10 +msgid "use.names= should be TRUE, FALSE, or not used (\")check\" by default)" +msgstr "" + +#: rbindlist.c:12 +msgid "" +"Input to rbindlist must be a list. This list can contain data.tables, data." +"frames or plain lists." +msgstr "" + +#: rbindlist.c:20 +msgid "Internal error: rbindlist.c idcol is not a single string" +msgstr "" + +#: rbindlist.c:31 +#, c-format +msgid "Item %d of input is not a data.frame, data.table or list" +msgstr "" + +#: rbindlist.c:39 +#, c-format +msgid "" +"Item %d has %d columns, inconsistent with item %d which has %d columns. To " +"fill missing columns use fill=TRUE." +msgstr "" + +#: rbindlist.c:42 +#, c-format +msgid "Item %d has %d columns but %d column names. Invalid object." +msgstr "" + +#: rbindlist.c:49 +#, c-format +msgid "" +"Column %d of item %d is length %d inconsistent with column %d which is " +"length %d. Only length-1 columns are recycled." +msgstr "" + +#: rbindlist.c:62 +#, c-format +msgid "" +"Total rows in the list is %lld which is larger than the maximum number of " +"rows, currently %d" +msgstr "" + +#: rbindlist.c:63 +msgid "use.names=TRUE but no item of input list has any names" +msgstr "" + +#: rbindlist.c:71 +#, c-format +msgid "" +"Failed to allocate upper bound of %lld unique column names [sum(lapply(l," +"ncol))]" +msgstr "" + +#: rbindlist.c:102 +#, c-format +msgid "Failed to allocate nuniq=%d items working memory in rbindlist.c" +msgstr "" + +#: rbindlist.c:136 +#, c-format +msgid "Failed to allocate ncol=%d items working memory in rbindlist.c" +msgstr "" + +#: rbindlist.c:191 +msgid "" +"Internal error: usenames==NA but fill=TRUE. usenames should have been set to " +"TRUE earlier with warning." +msgstr "" + +#: rbindlist.c:206 +msgid "" +"Internal error: could not find the first column name not present in earlier " +"item" +msgstr "" + +#: rbindlist.c:218 +#, c-format +msgid "" +"Internal error: usenames==NA but an out-of-order name has been found in an " +"item with no names or the first item. [%d]" +msgstr "" + +#: rbindlist.c:297 +#, c-format +msgid "" +"Column %d of item %d has type 'factor' but has no levels; i.e. malformed." +msgstr "" + +#: rbindlist.c:315 +#, c-format +msgid "" +"Class attribute on column %d of item %d does not match with column %d of " +"item %d." +msgstr "" + +#: rbindlist.c:325 +#, c-format +msgid "" +"Internal error: column %d of result is determined to be integer64 but " +"maxType=='%s' != REALSXP" +msgstr "" + +#: rbindlist.c:361 +#, c-format +msgid "" +"Failed to allocate working memory for %d ordered factor levels of result " +"column %d" +msgstr "" + +#: rbindlist.c:432 +#, c-format +msgid "" +"Failed to allocate working memory for %d factor levels of result column %d " +"when reading item %d of item %d" +msgstr "" + +#: reorder.c:17 +#, c-format +msgid "Item %d of list is type '%s' which isn't yet supported (SIZEOF=%d)" +msgstr "" + +#: reorder.c:19 +#, c-format +msgid "" +"Column %d is length %d which differs from length of column 1 (%d). Invalid " +"data.table." +msgstr "" + +#: reorder.c:27 +#, c-format +msgid "" +"reorder accepts vectors but this non-VECSXP is type '%s' which isn't yet " +"supported (SIZEOF=%d)" +msgstr "" + +#: reorder.c:28 +msgid "" +"Internal error in reorder.c: cannot reorder an ALTREP vector. Please see " +"NEWS item 2 in v1.11.4 and report this as a bug." +msgstr "" + +#: reorder.c:33 +msgid "order must be an integer vector" +msgstr "" + +#: reorder.c:34 +#, c-format +msgid "nrow(x)[%d]!=length(order)[%d]" +msgstr "" + +#: reorder.c:48 +#, c-format +msgid "order is not a permutation of 1:nrow[%d]" +msgstr "" + +#: reorder.c:57 +#, c-format +msgid "" +"Unable to allocate %d * %d bytes of working memory for reordering data.table" +msgstr "" + +#: shift.c:17 +#, c-format +msgid "" +"type '%s' passed to shift(). Must be a vector, list, data.frame or data.table" +msgstr "" + +#: shift.c:24 shift.c:28 +msgid "" +"Internal error: invalid type for shift(), should have been caught before. " +"please report to data.table issue tracker" +msgstr "" + +#: shift.c:31 +msgid "Internal error: k must be integer" +msgstr "" + +#: shift.c:33 +#, c-format +msgid "Item %d of n is NA" +msgstr "" + +#: shift.c:158 +#, c-format +msgid "Unsupported type '%s'" +msgstr "" + +#: subset.c:7 +#, c-format +msgid "Internal error: subsetVectorRaw length(ans)==%d n=%d" +msgstr "" + +#: subset.c:88 +#, 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 +#, c-format +msgid "Internal error. 'idx' is type '%s' not 'integer'" +msgstr "" + +#: subset.c:122 +#, c-format +msgid "" +"Internal error. 'maxArg' is type '%s' and length %d, should be an integer " +"singleton" +msgstr "" + +#: subset.c:123 +msgid "Internal error: allowOverMax must be TRUE/FALSE" +msgstr "" + +#: subset.c:125 +#, c-format +msgid "Internal error. max is %d, must be >= 0." +msgstr "" + +#: subset.c:149 +#, c-format +msgid "i[%d] is %d which is out of range [1,nrow=%d]" +msgstr "" + +#: subset.c:161 +#, c-format +msgid "" +"Item %d of i is %d and item %d is %d. Cannot mix positives and negatives." +msgstr "" + +#: subset.c:171 +#, c-format +msgid "Item %d of i is %d and item %d is NA. Cannot mix negatives and NA." +msgstr "" + +#: subset.c:223 +#, c-format +msgid "Column %d is NULL; malformed data.table." +msgstr "" + +#: subset.c:226 +#, c-format +msgid "Column %d ['%s'] is a data.frame or data.table; malformed data.table." +msgstr "" + +#: subset.c:231 +#, c-format +msgid "" +"Column %d ['%s'] is length %d but column 1 is length %d; malformed data." +"table." +msgstr "" + +#: subset.c:247 +#, c-format +msgid "Internal error. Argument 'x' to CsubsetDT is type '%s' not 'list'" +msgstr "" + +#: subset.c:260 +#, c-format +msgid "Internal error. Argument 'cols' to Csubset is type '%s' not 'integer'" +msgstr "" + +#: subset.c:337 +msgid "" +"Internal error: NULL can not be subset. It is invalid for a data.table to " +"contain a NULL column." +msgstr "" + +#: subset.c:339 +msgid "" +"Internal error: CsubsetVector is internal-use-only but has received " +"negatives, zeros or out-of-range" +msgstr "" + +#: transpose.c:9 +msgid "l must be a list." +msgstr "" + +#: transpose.c:13 +msgid "ignore.empty should be logical TRUE/FALSE." +msgstr "" + +#: transpose.c:16 +msgid "" +"keep.names should be either NULL, or the name of the first column of the " +"result in which to place the names of the input" +msgstr "" + +#: transpose.c:19 +msgid "fill must be a length 1 vector, such as the default NA" +msgstr "" + +#: transpose.c:28 +#, c-format +msgid "Item %d of list input is not an atomic vector" +msgstr "" + +#: types.c:23 +#, c-format +msgid "" +"%s: %d:\n" +"%s:" +msgstr "" + +#: types.c:55 +msgid "internal error: status, nx, nk must be integer" +msgstr "" + +#: uniqlist.c:14 +msgid "Internal error: uniqlist has not been passed a list of columns" +msgstr "" + +#: uniqlist.c:17 +msgid "Internal error: uniqlist has been passed a non-integer order" +msgstr "" + +#: uniqlist.c:18 +msgid "Internal error: uniqlist has been passed a length-0 order" +msgstr "" + +#: uniqlist.c:19 +#, c-format +msgid "Internal error: uniqlist has been passed length(order)==%d but nrow==%d" +msgstr "" + +#: uniqlist.c:96 uniqlist.c:127 uniqlist.c:208 uniqlist.c:245 uniqlist.c:318 +#, c-format +msgid "Type '%s' not supported" +msgstr "" + +#: uniqlist.c:148 +msgid "Input argument 'x' to 'uniqlengths' must be an integer vector" +msgstr "" + +#: uniqlist.c:149 +msgid "" +"Input argument 'n' to 'uniqlengths' must be an integer vector of length 1" +msgstr "" + +#: uniqlist.c:167 +msgid "cols must be an integer vector with length >= 1" +msgstr "" + +#: uniqlist.c:171 +#, c-format +msgid "Item %d of cols is %d which is outside range of l [1,length(l)=%d]" +msgstr "" + +#: uniqlist.c:174 +#, c-format +msgid "" +"All elements to input list must be of same length. Element [%d] has length " +"%llu != length of first element = %llu." +msgstr "" + +#: uniqlist.c:255 +msgid "Internal error: nestedid was not passed a list length 1 or more" +msgstr "" + +#: uniqlist.c:262 +#, c-format +msgid "Internal error: nrows[%d]>0 but ngrps==0" +msgstr "" + +#: uniqlist.c:264 +msgid "cols must be an integer vector of positive length" +msgstr "" + +#: uniqlist.c:349 +msgid "x is not a logical vector" +msgstr "" + +#: utils.c:73 +#, c-format +msgid "Unsupported type '%s' passed to allNA()" +msgstr "" + +#: utils.c:92 +msgid "'x' argument must be data.table compatible" +msgstr "" + +#: utils.c:94 +msgid "'check_dups' argument must be TRUE or FALSE" +msgstr "" + +#: utils.c:110 +msgid "" +"argument specifying columns is type 'double' and one or more items in it are " +"not whole integers" +msgstr "" + +#: utils.c:116 +#, c-format +msgid "argument specifying columns specify non existing column(s): cols[%d]=%d" +msgstr "" + +#: utils.c:121 +msgid "'x' argument data.table has no names" +msgstr "" + +#: utils.c:126 +#, c-format +msgid "" +"argument specifying columns specify non existing column(s): cols[%d]='%s'" +msgstr "" + +#: utils.c:129 +msgid "argument specifying columns must be character or numeric" +msgstr "" + +#: utils.c:132 +msgid "argument specifying columns specify duplicated column(s)" +msgstr "" + +#: utils.c:138 +#, c-format +msgid "%s: fill argument must be length 1" +msgstr "" + +#: utils.c:171 +#, c-format +msgid "%s: fill argument must be numeric" +msgstr "" + +#: utils.c:274 +#, c-format +msgid "Internal error: unsupported type '%s' passed to copyAsPlain()" +msgstr "" + +#: utils.c:278 +#, c-format +msgid "" +"Internal error: type '%s' passed to copyAsPlain() but it seems " +"copyMostAttrib() retains ALTREP attributes" +msgstr "" + +#: vecseq.c:13 +msgid "x must be an integer vector" +msgstr "" + +#: vecseq.c:14 +msgid "len must be an integer vector" +msgstr "" + +#: vecseq.c:15 +msgid "x and len must be the same length" +msgstr "" + +#: vecseq.c:21 +msgid "" +"Join results in more than 2^31 rows (internal vecseq reached physical " +"limit). Very likely misspecified join. Check for duplicate key values in i " +"each of which join to the same group in x over and over again. If that's ok, " +"try by=.EACHI to run j for each group to avoid the large allocation. " +"Otherwise, please search for this error message in the FAQ, Wiki, Stack " +"Overflow and data.table issue tracker for advice." +msgstr "" + +#: vecseq.c:25 +msgid "clamp must be a double vector length 1" +msgstr "" + +#: vecseq.c:27 +msgid "clamp must be positive" +msgstr "" + +#: vecseq.c:28 +#, c-format +msgid "" +"Join results in %d rows; more than %d = nrow(x)+nrow(i). Check for duplicate " +"key values in i each of which join to the same group in x over and over " +"again. If that's ok, try by=.EACHI to run j for each group to avoid the " +"large allocation. If you are sure you wish to proceed, rerun with allow." +"cartesian=TRUE. Otherwise, please search for this error message in the FAQ, " +"Wiki, Stack Overflow and data.table issue tracker for advice." +msgstr "" + +#: wrappers.c:11 +msgid "Attribute name must be a character vector of length 1" +msgstr "" + +#: wrappers.c:16 +msgid "" +"Internal structure doesn't seem to be a list. Can't set class to be 'data." +"table' or 'data.frame'. Use 'as.data.table()' or 'as.data.frame()' methods " +"instead." +msgstr "" + +#: wrappers.c:59 +msgid "First argument to setlistelt must be a list()" +msgstr "" + +#: wrappers.c:60 +msgid "Second argument to setlistelt must a length 1 integer vector" +msgstr "" + +#: wrappers.c:62 +#, c-format +msgid "i (%d) is outside the range of items [1,%d]" +msgstr "" + +#: wrappers.c:84 +msgid "x isn't a VECSXP" +msgstr "" + +#: wrappers.c:99 +#, c-format +msgid "" +"dim.data.table expects a data.table as input (which is a list), but seems to " +"be of type %s" +msgstr "" diff --git a/src/dogroups.c b/src/dogroups.c index a68ab5f9f7..568b0286b1 100644 --- a/src/dogroups.c +++ b/src/dogroups.c @@ -11,13 +11,13 @@ SEXP dogroups(SEXP dt, SEXP dtcols, SEXP groups, SEXP grpcols, SEXP jiscols, SEX Rboolean wasvector, firstalloc=FALSE, NullWarnDone=FALSE; clock_t tstart=0, tblock[10]={0}; int nblock[10]={0}; - if (!isInteger(order)) error("Internal error: order not integer vector"); // # nocov - if (TYPEOF(starts) != INTSXP) error("Internal error: starts not integer"); // # nocov - if (TYPEOF(lens) != INTSXP) error("Internal error: lens not integer"); // # nocov - // starts can now be NA (<0): if (INTEGER(starts)[0]<0 || INTEGER(lens)[0]<0) error("starts[1]<0 or lens[1]<0"); - if (!isNull(jiscols) && LENGTH(order) && !LOGICAL(on)[0]) error("Internal error: jiscols not NULL but o__ has length"); // # nocov - if (!isNull(xjiscols) && LENGTH(order) && !LOGICAL(on)[0]) error("Internal error: xjiscols not NULL but o__ has length"); // # nocov - if(!isEnvironment(env)) error("’env’ should be an environment"); + if (!isInteger(order)) error(_("Internal error: order not integer vector")); // # nocov + if (TYPEOF(starts) != INTSXP) error(_("Internal error: starts not integer")); // # nocov + if (TYPEOF(lens) != INTSXP) error(_("Internal error: lens not integer")); // # nocov + // starts can now be NA (<0): if (INTEGER(starts)[0]<0 || INTEGER(lens)[0]<0) error(_("starts[1]<0 or lens[1]<0")); + if (!isNull(jiscols) && LENGTH(order) && !LOGICAL(on)[0]) error(_("Internal error: jiscols not NULL but o__ has length")); // # nocov + if (!isNull(xjiscols) && LENGTH(order) && !LOGICAL(on)[0]) error(_("Internal error: xjiscols not NULL but o__ has length")); // # nocov + if(!isEnvironment(env)) error(_("'env' should be an environment")); ngrp = length(starts); // the number of groups (nrow(groups) will be larger when by) ngrpcols = length(grpcols); nrowgroups = length(VECTOR_ELT(groups,0)); @@ -36,11 +36,11 @@ SEXP dogroups(SEXP dt, SEXP dtcols, SEXP groups, SEXP grpcols, SEXP jiscols, SEX SET_STRING_ELT(bynames, i, STRING_ELT(getAttrib(groups,R_NamesSymbol), j)); defineVar(install(CHAR(STRING_ELT(bynames,i))), VECTOR_ELT(BY,i), env); // by vars can be used by name in j as well as via .BY if (SIZEOF(VECTOR_ELT(BY,i))==0) - error("Internal error: unsupported size-0 type '%s' in column %d of 'by' should have been caught earlier", type2char(TYPEOF(VECTOR_ELT(BY, i))), i+1); // #nocov + error(_("Internal error: unsupported size-0 type '%s' in column %d of 'by' should have been caught earlier"), type2char(TYPEOF(VECTOR_ELT(BY, i))), i+1); // #nocov } setAttrib(BY, R_NamesSymbol, bynames); // Fix for #5415 - BY doesn't retain names anymore R_LockBinding(sym_BY, env); - if (isNull(jiscols) && (length(bynames)!=length(groups) || length(bynames)!=length(grpcols))) error("!length(bynames)[%d]==length(groups)[%d]==length(grpcols)[%d]",length(bynames),length(groups),length(grpcols)); + if (isNull(jiscols) && (length(bynames)!=length(groups) || length(bynames)!=length(grpcols))) error(_("!length(bynames)[%d]==length(groups)[%d]==length(grpcols)[%d]"),length(bynames),length(groups),length(grpcols)); // TO DO: check this check above. N = PROTECT(findVar(install(".N"), env)); nprotect++; // PROTECT for rchk @@ -59,18 +59,18 @@ SEXP dogroups(SEXP dt, SEXP dtcols, SEXP groups, SEXP grpcols, SEXP jiscols, SEX // fetch rownames of .SD. rownames[1] is set to -thislen for each group, in case .SD is passed to // non data.table aware package that uses rownames for (s = ATTRIB(SD); s != R_NilValue && TAG(s)!=R_RowNamesSymbol; s = CDR(s)); // getAttrib0 basically but that's hidden in attrib.c - if (s==R_NilValue) error("row.names attribute of .SD not found"); + if (s==R_NilValue) error(_("row.names attribute of .SD not found")); rownames = CAR(s); - if (!isInteger(rownames) || LENGTH(rownames)!=2 || INTEGER(rownames)[0]!=NA_INTEGER) error("row.names of .SD isn't integer length 2 with NA as first item; i.e., .set_row_names(). [%s %d %d]",type2char(TYPEOF(rownames)),LENGTH(rownames),INTEGER(rownames)[0]); + if (!isInteger(rownames) || LENGTH(rownames)!=2 || INTEGER(rownames)[0]!=NA_INTEGER) error(_("row.names of .SD isn't integer length 2 with NA as first item; i.e., .set_row_names(). [%s %d %d]"),type2char(TYPEOF(rownames)),LENGTH(rownames),INTEGER(rownames)[0]); // fetch names of .SD and prepare symbols. In case they are copied-on-write by user assigning to those variables // using <- in j (which is valid, useful and tested), they are repointed to the .SD cols for each group. SEXP names = PROTECT(getAttrib(SDall, R_NamesSymbol)); nprotect++; - if (length(names) != length(SDall)) error("length(names)!=length(SD)"); + if (length(names) != length(SDall)) error(_("length(names)!=length(SD)")); SEXP *nameSyms = (SEXP *)R_alloc(length(names), sizeof(SEXP)); for(int i=0; i1 && vlen!=grpn) { SEXP colname = isNull(target) ? STRING_ELT(newnames, INTEGER(lhs)[j]-origncol-1) : STRING_ELT(dtnames,INTEGER(lhs)[j]-1); - error("Supplied %d items to be assigned to group %d of size %d in column '%s'. The RHS length must either be 1 (single values are ok) or match the LHS length exactly. If you wish to 'recycle' the RHS please use rep() explicitly to make this intent clear to readers of your code.",vlen,i+1,grpn,CHAR(colname)); + error(_("Supplied %d items to be assigned to group %d of size %d in column '%s'. The RHS length must either be 1 (single values are ok) or match the LHS length exactly. If you wish to 'recycle' the RHS please use rep() explicitly to make this intent clear to readers of your code."),vlen,i+1,grpn,CHAR(colname)); // e.g. in #4990 `:=` did not issue recycling warning during grouping. Now it is error not warning. } } @@ -301,7 +301,7 @@ SEXP dogroups(SEXP dt, SEXP dtcols, SEXP groups, SEXP grpcols, SEXP jiscols, SEX RHS = VECTOR_ELT(jval,j%LENGTH(jval)); if (isNull(target)) { // first time adding to new column - if (TRUELENGTH(dt) < INTEGER(lhs)[j]) error("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"); // # nocov + if (TRUELENGTH(dt) < INTEGER(lhs)[j]) error(_("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")); // # nocov target = PROTECT(allocNAVectorLike(RHS, LENGTH(VECTOR_ELT(dt,0)))); // Even if we could know reliably to switch from allocNAVectorLike to allocVector for slight speedup, user code could still // contain a switched halt, and in that case we'd want the groups not yet done to have NA rather than 0 or uninitialized. @@ -323,7 +323,7 @@ SEXP dogroups(SEXP dt, SEXP dtcols, SEXP groups, SEXP grpcols, SEXP jiscols, SEX } maxn = 0; if (njval==0) njval = LENGTH(jval); // for first group, then the rest (when non 0) must conform to the first >0 group - if (njval!=LENGTH(jval)) error("j doesn't evaluate to the same number of columns for each group"); // this would be a problem even if we unlisted afterwards. This way the user finds out earlier though so he can fix and rerun sooner. + if (njval!=LENGTH(jval)) error(_("j doesn't evaluate to the same number of columns for each group")); // this would be a problem even if we unlisted afterwards. This way the user finds out earlier though so he can fix and rerun sooner. for (int j=0; jmaxn ? k : maxn; @@ -357,7 +357,7 @@ SEXP dogroups(SEXP dt, SEXP dtcols, SEXP groups, SEXP grpcols, SEXP jiscols, SEX for(int j=0; j0 if (TYPEOF(source) != TYPEOF(target)) - error("Column %d of result for group %d is type '%s' but expecting type '%s'. Column types must be consistent for each group.", j+1, i+1, type2char(TYPEOF(source)), type2char(TYPEOF(target))); + error(_("Column %d of result for group %d is type '%s' but expecting type '%s'. Column types must be consistent for each group."), j+1, i+1, type2char(TYPEOF(source)), type2char(TYPEOF(target))); if (thislen>1 && thislen!=maxn && grpn>0) { // grpn>0 for grouping empty tables; test 1986 - error("Supplied %d items for column %d of group %d which has %d rows. The RHS length must either be 1 (single values are ok) or match the LHS length exactly. If you wish to 'recycle' the RHS please use rep() explicitly to make this intent clear to readers of your code.", thislen, j+1, i+1, maxn); + error(_("Supplied %d items for column %d of group %d which has %d rows. The RHS length must either be 1 (single values are ok) or match the LHS length exactly. If you wish to 'recycle' the RHS please use rep() explicitly to make this intent clear to readers of your code."), thislen, j+1, i+1, maxn); } memrecycle(target, R_NilValue, thisansloc, maxn, source, 0, ""); } @@ -450,7 +450,7 @@ SEXP dogroups(SEXP dt, SEXP dtcols, SEXP groups, SEXP grpcols, SEXP jiscols, SEX for (int j=0; j0; Rprintf("\n %s took %.3fs for %d groups\n", w ? "collecting discontiguous groups" : "memcpy contiguous groups", 1.0*tblock[w]/CLOCKS_PER_SEC, nblock[w]); @@ -478,7 +478,7 @@ SEXP growVector(SEXP x, R_len_t newlen) // * much shorter and faster SEXP newx; R_len_t i, len = length(x); - if (isNull(x)) error("growVector passed NULL"); + if (isNull(x)) error(_("growVector passed NULL")); PROTECT(newx = allocVector(TYPEOF(x), newlen)); // TO DO: R_realloc(?) here? if (newlen < len) len=newlen; // i.e. shrink switch (TYPEOF(x)) { @@ -547,4 +547,3 @@ SEXP growVector(SEXP x, R_len_t newlen) // > system.time(dt[, list(list(y)), by=x]) // user system elapsed // 30.827 0.239 32.306 - diff --git a/src/fastmean.c b/src/fastmean.c index fedcfe2acd..75c6c033ce 100644 --- a/src/fastmean.c +++ b/src/fastmean.c @@ -36,13 +36,13 @@ SEXP fastmean(SEXP args) if (length(args)>2) { tmp = CADDR(args); if (!isLogical(tmp) || LENGTH(tmp)!=1 || LOGICAL(tmp)[0]==NA_LOGICAL) - error("narm should be TRUE or FALSE"); // # nocov ; [.data.table should construct the .External call correctly + error(_("narm should be TRUE or FALSE")); // # nocov ; [.data.table should construct the .External call correctly narm=LOGICAL(tmp)[0]; } PROTECT(ans = allocNAVector(REALSXP, 1)); copyMostAttrib(x, ans); if (!isInteger(x) && !isReal(x) && !isLogical(x)) { - error("fastmean was passed type %s, not numeric or logical", type2char(TYPEOF(x))); + error(_("fastmean was passed type %s, not numeric or logical"), type2char(TYPEOF(x))); } l = LENGTH(x); if (narm) { @@ -80,7 +80,7 @@ SEXP fastmean(SEXP args) REAL(ans)[0] = (double) s; break; default: - error("Internal error: type '%s' not caught earlier in fastmean", type2char(TYPEOF(x))); // # nocov + error(_("Internal error: type '%s' not caught earlier in fastmean"), type2char(TYPEOF(x))); // # nocov } } else { // narm==FALSE switch(TYPEOF(x)) { @@ -108,7 +108,7 @@ SEXP fastmean(SEXP args) REAL(ans)[0] = (double) s; break; default: - error("Internal error: type '%s' not caught earlier in fastmean", type2char(TYPEOF(x))); // # nocov + error(_("Internal error: type '%s' not caught earlier in fastmean"), type2char(TYPEOF(x))); // # nocov } } UNPROTECT(1); diff --git a/src/fcast.c b/src/fcast.c index 991689ee84..ff8c98fc7b 100644 --- a/src/fcast.c +++ b/src/fcast.c @@ -77,7 +77,7 @@ SEXP fcast(SEXP lhs, SEXP val, SEXP nrowArg, SEXP ncolArg, SEXP idxArg, SEXP fil } } break; - default: error("Unsupported column type in fcast val: '%s'", type2char(TYPEOF(thiscol))); // #nocov + default: error(_("Unsupported column type in fcast val: '%s'"), type2char(TYPEOF(thiscol))); // #nocov } UNPROTECT(nprotect); } @@ -94,7 +94,7 @@ SEXP fcast(SEXP lhs, SEXP val, SEXP nrowArg, SEXP ncolArg, SEXP idxArg, SEXP fil // SEXP zero_init(R_len_t n) { // R_len_t i; // SEXP ans; -// if (n < 0) error("Input argument 'n' to 'zero_init' must be >= 0"); +// if (n < 0) error(_("Input argument 'n' to 'zero_init' must be >= 0")); // ans = PROTECT(allocVector(INTSXP, n)); // for (i=0; i 0"); +// if (!isNewList(s) || isNull(s)) error(_("Argument 's' to 'cross_join' must be a list of length > 0")); // PROTECT(call = lang3(install("do.call"), install("CJ"), s)); // r = eval(call, env); // UNPROTECT(1); @@ -130,7 +130,7 @@ SEXP fcast(SEXP lhs, SEXP val, SEXP nrowArg, SEXP ncolArg, SEXP idxArg, SEXP fil // SEXP diff_int(SEXP x, R_len_t n) { // R_len_t i; // SEXP ans; -// if (TYPEOF(x) != INTSXP) error("Argument 'x' to 'diff_int' must be an integer vector"); +// if (TYPEOF(x) != INTSXP) error(_("Argument 'x' to 'diff_int' must be an integer vector")); // ans = PROTECT(allocVector(INTSXP, length(x))); // for (i=1; i= 1 // for (i=0; i1 ? INT64_MAX : 0; // for scalar 'a' bitwise AND will reset iterator to first element: pa[i & amask] -> pa[0] const int64_t bmask = len2>1 ? INT64_MAX : 0; @@ -48,19 +48,19 @@ SEXP fifelseR(SEXP l, SEXP a, SEXP b, SEXP na) { bool nonna = !isNull(na); if (nonna) { if (xlength(na) != 1) - error("Length of 'na' is %lld but must be 1", xlength(na)); + error(_("Length of 'na' is %lld but must be 1"), xlength(na)); SEXPTYPE tn = TYPEOF(na); if (tn == LGLSXP && LOGICAL(na)[0]==NA_LOGICAL) { nonna = false; } else { if (tn != ta) - error("'yes' is of type %s but 'na' is of type %s. Please make sure that both arguments have the same type.", type2char(ta), type2char(tn)); + error(_("'yes' is of type %s but 'na' is of type %s. Please make sure that both arguments have the same type."), type2char(ta), type2char(tn)); if (!R_compute_identical(PROTECT(getAttrib(a,R_ClassSymbol)), PROTECT(getAttrib(na,R_ClassSymbol)), 0)) - error("'yes' has different class than 'na'. Please make sure that both arguments have the same class."); + error(_("'yes' has different class than 'na'. Please make sure that both arguments have the same class.")); UNPROTECT(2); if (isFactor(a)) { if (!R_compute_identical(PROTECT(getAttrib(a,R_LevelsSymbol)), PROTECT(getAttrib(na,R_LevelsSymbol)), 0)) - error("'yes' and 'na' are both type factor but their levels are different."); + error(_("'yes' and 'na' are both type factor but their levels are different.")); UNPROTECT(2); } } @@ -130,7 +130,7 @@ SEXP fifelseR(SEXP l, SEXP a, SEXP b, SEXP na) { } } break; default: - error("Type %s is not supported.", type2char(ta)); + error(_("Type %s is not supported."), type2char(ta)); } SEXP l_names = PROTECT(getAttrib(l, R_NamesSymbol)); nprotect++; diff --git a/src/fmelt.c b/src/fmelt.c index d4a9112a84..bbd616f81d 100644 --- a/src/fmelt.c +++ b/src/fmelt.c @@ -15,8 +15,8 @@ SEXP seq_int(int n, int start) { // very specific "set_diff" for integers SEXP set_diff(SEXP x, int n) { - if (TYPEOF(x) != INTSXP) error("'x' must be an integer"); - if (n <= 0) error("'n' must be a positive integer"); + if (TYPEOF(x) != INTSXP) error(_("'x' must be an integer")); + if (n <= 0) error(_("'n' must be a positive integer")); SEXP table = PROTECT(seq_int(n, 1)); // TODO: using match to 1:n seems odd here, why use match at all SEXP xmatch = PROTECT(match(x, table, 0)); // Old comment:took a while to realise: matches vec against x - thanks to comment from Matt in assign.c! const int *ixmatch = INTEGER(xmatch); @@ -38,7 +38,7 @@ SEXP which(SEXP x, Rboolean val) { int j=0, n = length(x); SEXP ans; - if (!isLogical(x)) error("Argument to 'which' must be logical"); + if (!isLogical(x)) error(_("Argument to 'which' must be logical")); const int *ix = LOGICAL(x); int *buf = (int *) R_alloc(n, sizeof(int)); for (int i=0; i= 0"); + if (TYPEOF(vec) != STRSXP) error(_("concat: 'vec must be a character vector")); + if (!isInteger(idx) || length(idx) < 0) error(_("concat: 'idx' must be an integer vector of length >= 0")); const int *iidx = INTEGER(idx); for (int i=0; i length(vec)) - error("concat: 'idx' must take values between 0 and length(vec); 0 <= idx <= length(vec)"); + error(_("concat: 'idx' must take values between 0 and length(vec); 0 <= idx <= length(vec)")); } PROTECT(v = allocVector(STRSXP, nidx > 5 ? 5 : nidx)); for (int i=0; i ncol) - error("One or more values in 'id.vars' is invalid."); + error(_("One or more values in 'id.vars' is invalid.")); else if (!LOGICAL(booltmp)[i]) targetcols++; else continue; } @@ -181,7 +181,7 @@ SEXP checkVars(SEXP DT, SEXP id, SEXP measure, Rboolean verbose) { case REALSXP : tmp2 = PROTECT(coerceVector(measure, INTSXP)); protecti++; break; case INTSXP : tmp2 = measure; break; case VECSXP : tmp2 = PROTECT(measurelist(measure, dtnames)); protecti++; break; - default : error("Unknown 'measure.vars' type %s, must be character or integer vector/list", type2char(TYPEOF(measure))); + default : error(_("Unknown 'measure.vars' type %s, must be character or integer vector/list"), type2char(TYPEOF(measure))); } tmp = tmp2; if (isNewList(measure)) { @@ -190,7 +190,7 @@ SEXP checkVars(SEXP DT, SEXP id, SEXP measure, Rboolean verbose) { booltmp = PROTECT(duplicated(tmp, FALSE)); protecti++; for (i=0; i ncol) - error("One or more values in 'measure.vars' is invalid."); + error(_("One or more values in 'measure.vars' is invalid.")); else if (!LOGICAL(booltmp)[i]) targetcols++; else continue; } @@ -216,11 +216,11 @@ SEXP checkVars(SEXP DT, SEXP id, SEXP measure, Rboolean verbose) { case STRSXP : tmp = PROTECT(chmatch(id, dtnames, 0)); protecti++; break; case REALSXP : tmp = PROTECT(coerceVector(id, INTSXP)); protecti++; break; case INTSXP : tmp = id; break; - default : error("Unknown 'id.vars' type %s, must be character or integer vector", type2char(TYPEOF(id))); + default : error(_("Unknown 'id.vars' type %s, must be character or integer vector"), type2char(TYPEOF(id))); } for (i=0; i ncol) - error("One or more values in 'id.vars' is invalid."); + error(_("One or more values in 'id.vars' is invalid.")); } idcols = PROTECT(tmp); protecti++; switch(TYPEOF(measure)) { @@ -228,7 +228,7 @@ SEXP checkVars(SEXP DT, SEXP id, SEXP measure, Rboolean verbose) { case REALSXP : tmp2 = PROTECT(coerceVector(measure, INTSXP)); protecti++; break; case INTSXP : tmp2 = measure; break; case VECSXP : tmp2 = PROTECT(measurelist(measure, dtnames)); protecti++; break; - default : error("Unknown 'measure.vars' type %s, must be character or integer vector", type2char(TYPEOF(measure))); + default : error(_("Unknown 'measure.vars' type %s, must be character or integer vector"), type2char(TYPEOF(measure))); } tmp = tmp2; if (isNewList(measure)) { @@ -236,7 +236,7 @@ SEXP checkVars(SEXP DT, SEXP id, SEXP measure, Rboolean verbose) { } for (i=0; i ncol) - error("One or more values in 'measure.vars' is invalid."); + error(_("One or more values in 'measure.vars' is invalid.")); } if (isNewList(measure)) valuecols = tmp2; else { @@ -273,11 +273,11 @@ static void preprocess(SEXP DT, SEXP id, SEXP measure, SEXP varnames, SEXP valna data->lvalues = length(data->valuecols); data->narm = narm; if (length(valnames) != data->lvalues) { - if (isNewList(measure)) error("When 'measure.vars' is a list, 'value.name' must be a character vector of length =1 or =length(measure.vars)."); - else error("When 'measure.vars' is either not specified or a character/integer vector, 'value.name' must be a character vector of length =1."); + if (isNewList(measure)) error(_("When 'measure.vars' is a list, 'value.name' must be a character vector of length =1 or =length(measure.vars).")); + else error(_("When 'measure.vars' is either not specified or a character/integer vector, 'value.name' must be a character vector of length =1.")); } if (length(varnames) != 1) - error("'variable.name' must be a character/integer vector of length=1."); + error(_("'variable.name' must be a character/integer vector of length=1.")); data->leach = (int *)R_alloc(data->lvalues, sizeof(int)); data->isidentical = (int *)R_alloc(data->lvalues, sizeof(int)); data->isfactor = (int *)R_alloc(data->lvalues, sizeof(int)); @@ -326,10 +326,10 @@ static SEXP combineFactorLevels(SEXP factorLevels, SEXP target, int * factorType int maxlevels=0, nitem=length(factorLevels); for (int i=0; inarm) counter += thislen; UNPROTECT(thisprotecti); // inside inner loop (note that it's double loop) so as to limit use of protection stack @@ -511,7 +511,7 @@ SEXP getvarcols(SEXP DT, SEXP dtnames, Rboolean varfactor, Rboolean verbose, str SEXP ansvars=PROTECT(allocVector(VECSXP, 1)); protecti++; SEXP target; if (data->lvalues==1 && length(VECTOR_ELT(data->valuecols, 0)) != data->lmax) - error("Internal error: fmelt.c:getvarcols %d %d", length(VECTOR_ELT(data->valuecols, 0)), data->lmax); // # nocov + error(_("Internal error: fmelt.c:getvarcols %d %d"), length(VECTOR_ELT(data->valuecols, 0)), data->lmax); // # nocov if (!varfactor) { SET_VECTOR_ELT(ansvars, 0, target=allocVector(STRSXP, data->totlen)); if (data->lvalues == 1) { @@ -659,7 +659,7 @@ SEXP getidcols(SEXP DT, SEXP dtnames, Rboolean verbose, struct processData *data } } break; - default : error("Unknown column type '%s' for column '%s' in 'data'", type2char(TYPEOF(thiscol)), CHAR(STRING_ELT(dtnames, INTEGER(data->idcols)[i]-1))); + default : error(_("Unknown column type '%s' for column '%s' in 'data'"), type2char(TYPEOF(thiscol)), CHAR(STRING_ELT(dtnames, INTEGER(data->idcols)[i]-1))); } } UNPROTECT(1); @@ -670,13 +670,13 @@ SEXP fmelt(SEXP DT, SEXP id, SEXP measure, SEXP varfactor, SEXP valfactor, SEXP SEXP dtnames, ansvals, ansvars, ansids, ansnames, ans; Rboolean narm=FALSE, verbose=FALSE; - if (!isNewList(DT)) error("Input is not of type VECSXP, expected a data.table, data.frame or list"); - if (!isLogical(valfactor)) error("Argument 'value.factor' should be logical TRUE/FALSE"); - if (!isLogical(varfactor)) error("Argument 'variable.factor' should be logical TRUE/FALSE"); - if (!isLogical(narmArg)) error("Argument 'na.rm' should be logical TRUE/FALSE."); - if (!isString(varnames)) error("Argument 'variable.name' must be a character vector"); - if (!isString(valnames)) error("Argument 'value.name' must be a character vector"); - if (!isLogical(verboseArg)) error("Argument 'verbose' should be logical TRUE/FALSE"); + if (!isNewList(DT)) error(_("Input is not of type VECSXP, expected a data.table, data.frame or list")); + if (!isLogical(valfactor)) error(_("Argument 'value.factor' should be logical TRUE/FALSE")); + if (!isLogical(varfactor)) error(_("Argument 'variable.factor' should be logical TRUE/FALSE")); + if (!isLogical(narmArg)) error(_("Argument 'na.rm' should be logical TRUE/FALSE.")); + if (!isString(varnames)) error(_("Argument 'variable.name' must be a character vector")); + if (!isString(valnames)) error(_("Argument 'value.name' must be a character vector")); + if (!isLogical(verboseArg)) error(_("Argument 'verbose' should be logical TRUE/FALSE")); int ncol = LENGTH(DT); if (!ncol) { if (verbose) Rprintf("ncol(data) is 0. Nothing to melt. Returning original data.table."); @@ -684,7 +684,7 @@ SEXP fmelt(SEXP DT, SEXP id, SEXP measure, SEXP varfactor, SEXP valfactor, SEXP } int protecti=0; dtnames = PROTECT(getAttrib(DT, R_NamesSymbol)); protecti++; - if (isNull(dtnames)) error("names(data) is NULL. Please report to data.table-help"); + if (isNull(dtnames)) error(_("names(data) is NULL. Please report to data.table-help")); if (LOGICAL(narmArg)[0] == TRUE) narm = TRUE; if (LOGICAL(verboseArg)[0] == TRUE) verbose = TRUE; struct processData data; diff --git a/src/forder.c b/src/forder.c index 80caa82a76..544ba7768d 100644 --- a/src/forder.c +++ b/src/forder.c @@ -371,8 +371,8 @@ static uint64_t dmask=0; SEXP setNumericRounding(SEXP droundArg) // init.c has initial call with default of 2 { - if (!isInteger(droundArg) || LENGTH(droundArg)!=1) error("Must an integer or numeric vector length 1"); - if (INTEGER(droundArg)[0] < 0 || INTEGER(droundArg)[0] > 2) error("Must be 2, 1 or 0"); + if (!isInteger(droundArg) || LENGTH(droundArg)!=1) error(_("Must an integer or numeric vector length 1")); + if (INTEGER(droundArg)[0] < 0 || INTEGER(droundArg)[0] > 2) error(_("Must be 2, 1 or 0")); dround = INTEGER(droundArg)[0]; dmask = dround ? 1 << (8*dround-1) : 0; return R_NilValue; @@ -428,11 +428,11 @@ SEXP forder(SEXP DT, SEXP by, SEXP retGrpArg, SEXP sortGroupsArg, SEXP ascArg, S if (!isNewList(DT)) { if (!isVectorAtomic(DT)) - error("Internal error: input is not either a list of columns, or an atomic vector."); // # nocov; caught by colnamesInt at R level, test 1962.0472 + error(_("Internal error: input is not either a list of columns, or an atomic vector.")); // # nocov; caught by colnamesInt at R level, test 1962.0472 if (!isNull(by)) - error("Internal error: input is an atomic vector (not a list of columns) but by= is not NULL"); // # nocov; caught at R level, test 1962.043 + error(_("Internal error: input is an atomic vector (not a list of columns) but by= is not NULL")); // # nocov; caught at R level, test 1962.043 if (!isInteger(ascArg) || LENGTH(ascArg)!=1) - error("Input is an atomic vector (not a list of columns) but order= is not a length 1 integer"); + error(_("Input is an atomic vector (not a list of columns) but order= is not a length 1 integer")); if (verbose) Rprintf("forder.c received a vector type '%s' length %d\n", type2char(TYPEOF(DT)), length(DT)); SEXP tt = PROTECT(allocVector(VECSXP, 1)); n_protect++; @@ -445,31 +445,31 @@ SEXP forder(SEXP DT, SEXP by, SEXP retGrpArg, SEXP sortGroupsArg, SEXP ascArg, S Rprintf("forder.c received %d rows and %d columns\n", length(VECTOR_ELT(DT,0)), length(DT)); } if (!length(DT)) - error("Internal error: DT is an empty list() of 0 columns"); // # nocov should have been caught be colnamesInt, test 2099.1 + error(_("Internal error: DT is an empty list() of 0 columns")); // # nocov should have been caught be colnamesInt, test 2099.1 if (!isInteger(by) || !LENGTH(by)) - error("Internal error: DT has %d columns but 'by' is either not integer or is length 0", length(DT)); // # nocov colnamesInt catches, 2099.2 + error(_("Internal error: DT has %d columns but 'by' is either not integer or is length 0"), length(DT)); // # nocov colnamesInt catches, 2099.2 if (!isInteger(ascArg) || LENGTH(ascArg)!=LENGTH(by)) - error("Either order= is not integer or its length (%d) is different to by='s length (%d)", LENGTH(ascArg), LENGTH(by)); + error(_("Either order= is not integer or its length (%d) is different to by='s length (%d)"), LENGTH(ascArg), LENGTH(by)); nrow = length(VECTOR_ELT(DT,0)); int n_cplx = 0; for (int i=0; i length(DT)) - error("internal error: 'by' value %d out of range [1,%d]", by_i, length(DT)); // # nocov # R forderv already catch that using C colnamesInt + error(_("internal error: 'by' value %d out of range [1,%d]"), by_i, length(DT)); // # nocov # R forderv already catch that using C colnamesInt if ( nrow != length(VECTOR_ELT(DT, by_i-1)) ) - error("Column %d is length %d which differs from length of column 1 (%d)\n", INTEGER(by)[i], length(VECTOR_ELT(DT, INTEGER(by)[i]-1)), nrow); + error(_("Column %d is length %d which differs from length of column 1 (%d)\n"), INTEGER(by)[i], length(VECTOR_ELT(DT, INTEGER(by)[i]-1)), nrow); if (TYPEOF(VECTOR_ELT(DT, by_i-1)) == CPLXSXP) n_cplx++; } if (!isLogical(retGrpArg) || LENGTH(retGrpArg)!=1 || INTEGER(retGrpArg)[0]==NA_LOGICAL) - error("retGrp= must be TRUE or FALSE"); + error(_("retGrp= must be TRUE or FALSE")); retgrp = LOGICAL(retGrpArg)[0]==TRUE; if (!isLogical(sortGroupsArg) || LENGTH(sortGroupsArg)!=1 || INTEGER(sortGroupsArg)[0]==NA_LOGICAL ) - error("sort= must be TRUE or FALSE"); + error(_("sort= must be TRUE or FALSE")); sortType = LOGICAL(sortGroupsArg)[0]==TRUE; // if sortType is 1, it is later flipped between +1/-1 according to ascArg. Otherwise ascArg is ignored when sortType==0 if (!retgrp && !sortType) - error("At least one of retGrp= or sort= must be TRUE"); + error(_("At least one of retGrp= or sort= must be TRUE")); if (!isLogical(naArg) || LENGTH(naArg) != 1) - error("na.last must be logical TRUE, FALSE or NA of length 1"); + error(_("na.last must be logical TRUE, FALSE or NA of length 1")); nalast = (LOGICAL(naArg)[0] == NA_LOGICAL) ? -1 : LOGICAL(naArg)[0]; // 1=na last, 0=na first (default), -1=remove na if (nrow==0) { @@ -1298,11 +1298,11 @@ SEXP isOrderedSubset(SEXP x, SEXP nrowArg) // specialized for use in [.data.table only // Ignores 0s but heeds NAs and any out-of-range (which result in NA) { - if (!isNull(x) && !isInteger(x)) error("x must be either NULL or an integer vector"); + if (!isNull(x) && !isInteger(x)) error(_("x must be either NULL or an integer vector")); if (length(x)<=1) return(ScalarLogical(TRUE)); // a single NA when length(x)==1 is ordered (e.g. tests 128 & 130) otherwise anyNA => FALSE - if (!isInteger(nrowArg) || LENGTH(nrowArg)!=1) error("nrow must be integer vector length 1"); + if (!isInteger(nrowArg) || LENGTH(nrowArg)!=1) error(_("nrow must be integer vector length 1")); const int nrow = INTEGER(nrowArg)[0]; - if (nrow<0) error("nrow==%d but must be >=0", nrow); + if (nrow<0) error(_("nrow==%d but must be >=0"), nrow); const int *xd = INTEGER(x), xlen=LENGTH(x); for (int i=0, last=INT_MIN; iLENGTH(x)) - error("Item %d of 'cols' is %d which is outside 1-based range [1,ncol(x)=%d]", i+1, elem, LENGTH(x)); + error(_("Item %d of 'cols' is %d which is outside 1-based range [1,ncol(x)=%d]"), i+1, elem, LENGTH(x)); if (!n) n = length(VECTOR_ELT(x, elem-1)); } SEXP ans = PROTECT(allocVector(LGLSXP, n)); @@ -23,7 +23,7 @@ SEXP dt_na(SEXP x, SEXP cols) { SEXP v = VECTOR_ELT(x, INTEGER(cols)[i]-1); if (!length(v) || isNewList(v) || isList(v)) continue; // like stats:::na.omit.data.frame, skip list/pairlist columns if (n != length(v)) - error("Column %d of input list x is length %d, inconsistent with first column of that item which is length %d.", i+1,length(v),n); + error(_("Column %d of input list x is length %d, inconsistent with first column of that item which is length %d."), i+1,length(v),n); switch (TYPEOF(v)) { case LGLSXP: { const int *iv = LOGICAL(v); @@ -62,7 +62,7 @@ SEXP dt_na(SEXP x, SEXP cols) { } break; default: - error("Unsupported column type '%s'", type2char(TYPEOF(v))); + error(_("Unsupported column type '%s'"), type2char(TYPEOF(v))); } } UNPROTECT(1); @@ -80,7 +80,7 @@ SEXP frank(SEXP xorderArg, SEXP xstartArg, SEXP xlenArg, SEXP ties_method) { else if (!strcmp(CHAR(STRING_ELT(ties_method, 0)), "dense")) ties = DENSE; else if (!strcmp(CHAR(STRING_ELT(ties_method, 0)), "sequence")) ties = SEQUENCE; // else if (!strcmp(CHAR(STRING_ELT(ties_method, 0)), "runlength")) ties = RUNLENGTH; - else error("Internal error: invalid ties.method for frankv(), should have been caught before. please report to data.table issue tracker"); // # nocov + else error(_("Internal error: invalid ties.method for frankv(), should have been caught before. please report to data.table issue tracker")); // # nocov n = length(xorderArg); SEXP ans = (ties == MEAN) ? PROTECT(allocVector(REALSXP, n)) : PROTECT(allocVector(INTSXP, n)); int *ians = INTEGER(ans); @@ -127,7 +127,7 @@ SEXP frank(SEXP xorderArg, SEXP xstartArg, SEXP xlenArg, SEXP ties_method) { // INTEGER(ans)[xorder[j]-1] = k++; // } // break; - default: error("Internal error: unknown ties value in frank: %d", ties); // #nocov + default: error(_("Internal error: unknown ties value in frank: %d"), ties); // #nocov } } UNPROTECT(1); @@ -138,12 +138,12 @@ SEXP frank(SEXP xorderArg, SEXP xstartArg, SEXP xlenArg, SEXP ties_method) { SEXP anyNA(SEXP x, SEXP cols) { int i, j, n=0, elem; - if (!isNewList(x)) error("Internal error. Argument 'x' to CanyNA is type '%s' not 'list'", type2char(TYPEOF(x))); // #nocov - if (!isInteger(cols)) error("Internal error. Argument 'cols' to CanyNA is type '%s' not 'integer'", type2char(TYPEOF(cols))); // # nocov + if (!isNewList(x)) error(_("Internal error. Argument 'x' to CanyNA is type '%s' not 'list'"), type2char(TYPEOF(x))); // #nocov + if (!isInteger(cols)) error(_("Internal error. Argument 'cols' to CanyNA is type '%s' not 'integer'"), type2char(TYPEOF(cols))); // # nocov for (i=0; iLENGTH(x)) - error("Item %d of 'cols' is %d which is outside 1-based range [1,ncol(x)=%d]", i+1, elem, LENGTH(x)); + error(_("Item %d of 'cols' is %d which is outside 1-based range [1,ncol(x)=%d]"), i+1, elem, LENGTH(x)); if (!n) n = length(VECTOR_ELT(x, elem-1)); } SEXP ans = PROTECT(allocVector(LGLSXP, 1)); @@ -152,7 +152,7 @@ SEXP anyNA(SEXP x, SEXP cols) { SEXP v = VECTOR_ELT(x, INTEGER(cols)[i]-1); if (!length(v) || isNewList(v) || isList(v)) continue; // like stats:::na.omit.data.frame, skip list/pairlist columns if (n != length(v)) - error("Column %d of input list x is length %d, inconsistent with first column of that item which is length %d.", i+1,length(v),n); + error(_("Column %d of input list x is length %d, inconsistent with first column of that item which is length %d."), i+1,length(v),n); j=0; switch (TYPEOF(v)) { case LGLSXP: { @@ -199,7 +199,7 @@ SEXP anyNA(SEXP x, SEXP cols) { } break; default: - error("Unsupported column type '%s'", type2char(TYPEOF(v))); + error(_("Unsupported column type '%s'"), type2char(TYPEOF(v))); } if (LOGICAL(ans)[0]) break; } diff --git a/src/freadR.c b/src/freadR.c index 817805cfac..6b832fc710 100644 --- a/src/freadR.c +++ b/src/freadR.c @@ -81,7 +81,7 @@ SEXP freadR( dtnrows = 0; const char *ch, *ch2; if (!isString(inputArg) || LENGTH(inputArg)!=1) - error("Internal error: freadR input not a single character string: a filename or the data itself. Should have been caught at R level."); // # nocov + error(_("Internal error: freadR input not a single character string: a filename or the data itself. Should have been caught at R level.")); // # nocov ch = ch2 = (const char *)CHAR(STRING_ELT(inputArg,0)); while (*ch2!='\n' && *ch2!='\r' && *ch2!='\0') ch2++; args.input = (*ch2=='\0') ? R_ExpandFileName(ch) : ch; // for convenience so user doesn't have to call path.expand() @@ -98,18 +98,18 @@ SEXP freadR( } if (!isString(sepArg) || LENGTH(sepArg)!=1 || strlen(CHAR(STRING_ELT(sepArg,0)))>1) - error("Internal error: freadR sep not a single character. R level catches this."); // # nocov + error(_("Internal error: freadR sep not a single character. R level catches this.")); // # nocov args.sep = CHAR(STRING_ELT(sepArg,0))[0]; // '\0' when default "auto" was replaced by "" at R level if (!(isString(decArg) && LENGTH(decArg)==1 && strlen(CHAR(STRING_ELT(decArg,0)))==1)) - error("Internal error: freadR dec not a single character. R level catches this."); // # nocov + error(_("Internal error: freadR dec not a single character. R level catches this.")); // # nocov args.dec = CHAR(STRING_ELT(decArg,0))[0]; if (IS_FALSE(quoteArg)) { args.quote = '\0'; } else { if (!isString(quoteArg) || LENGTH(quoteArg)!=1 || strlen(CHAR(STRING_ELT(quoteArg,0))) > 1) - error("quote= must be a single character, blank \"\", or FALSE"); + error(_("quote= must be a single character, blank \")\", or FALSE"); args.quote = CHAR(STRING_ELT(quoteArg,0))[0]; } @@ -134,10 +134,10 @@ SEXP freadR( args.skipString = CHAR(STRING_ELT(skipArg,0)); // LENGTH==1 was checked at R level } else if (isInteger(skipArg)) { args.skipNrow = (int64_t)INTEGER(skipArg)[0]; - } else error("Internal error: skip not integer or string in freadR.c"); // # nocov + } else error(_("Internal error: skip not integer or string in freadR.c")); // # nocov if (!isNull(NAstringsArg) && !isString(NAstringsArg)) - error("Internal error: NAstringsArg is type '%s'. R level catches this", type2char(TYPEOF(NAstringsArg))); // # nocov + error(_("Internal error: NAstringsArg is type '%s'. R level catches this"), type2char(TYPEOF(NAstringsArg))); // # nocov int nnas = length(NAstringsArg); const char **NAstrings = (const char **)R_alloc((nnas + 1), sizeof(char*)); // +1 for the final NULL to save a separate nna variable for (int i=0; idbl_v[k-1] = REAL(eval0)[0]; @@ -435,7 +435,7 @@ void frollapply(double *x, int64_t nx, double *w, int k, ans_t *ans, int align, Rprintf("%s: results from provided FUN are not of type double, coercion from integer or logical will be applied on each iteration\n", __func__); ans->dbl_v[k-1] = REAL(coerceVector(eval0, REALSXP))[0]; } else { - error("%s: results from provided FUN are not of type double", __func__); + error(_("%s: results from provided FUN are not of type double"), __func__); } } UNPROTECT(1); // eval0 diff --git a/src/frollR.c b/src/frollR.c index 66ac763c73..5985f4a46f 100644 --- a/src/frollR.c +++ b/src/frollR.c @@ -12,7 +12,7 @@ SEXP coerceToRealListR(SEXP obj) { } else if (isInteger(obj) || isLogical(obj)) { SET_VECTOR_ELT(x, 0, coerceVector(obj, REALSXP)); } else { - error("x must be of type numeric or logical"); + error(_("x must be of type numeric or logical")); } } else { R_len_t nobj = length(obj); @@ -23,7 +23,7 @@ SEXP coerceToRealListR(SEXP obj) { } else if (isInteger(VECTOR_ELT(obj, i)) || isLogical(VECTOR_ELT(obj, i))) { SET_VECTOR_ELT(x, i, coerceVector(VECTOR_ELT(obj, i), REALSXP)); } else { - error("x must be list, data.frame or data.table of numeric or logical types"); + error(_("x must be list, data.frame or data.table of numeric or logical types")); } } } @@ -44,10 +44,10 @@ SEXP frollfunR(SEXP fun, SEXP obj, SEXP k, SEXP fill, SEXP algo, SEXP align, SEX R_len_t nx=length(x); // number of columns to roll on if (xlength(k) == 0) // check that window is non zero length - error("n must be non 0 length"); + error(_("n must be non 0 length")); if (!isLogical(adaptive) || length(adaptive) != 1 || LOGICAL(adaptive)[0] == NA_LOGICAL) - error("adaptive must be TRUE or FALSE"); + error(_("adaptive must be TRUE or FALSE")); bool badaptive = LOGICAL(adaptive)[0]; R_len_t nk = 0; // number of rolling windows, for adaptive might be atomic to be wrapped into list, 0 for clang -Wall @@ -55,21 +55,21 @@ SEXP frollfunR(SEXP fun, SEXP obj, SEXP k, SEXP fill, SEXP algo, SEXP align, SEX SEXP kl = R_NilValue; // holds adaptive window width, if doing adaptive roll fun if (!badaptive) { // validating n input for adaptive=FALSE if (isNewList(k)) - error("n must be integer, list is accepted for adaptive TRUE"); + error(_("n must be integer, list is accepted for adaptive TRUE")); if (isInteger(k)) { // check that k is integer vector ik = k; } else if (isReal(k)) { // if n is double then convert to integer ik = PROTECT(coerceVector(k, INTSXP)); protecti++; } else { - error("n must be integer"); + error(_("n must be integer")); } nk = length(k); R_len_t i=0; // check that all window values positive while (i < nk && INTEGER(ik)[i] > 0) i++; if (i != nk) - error("n must be positive integer values (> 0)"); + error(_("n must be positive integer values (> 0)")); } else { // validating n input for adaptive=TRUE if (isVectorAtomic(k)) { // if not-list then wrap into list kl = PROTECT(allocVector(VECSXP, 1)); protecti++; @@ -78,7 +78,7 @@ SEXP frollfunR(SEXP fun, SEXP obj, SEXP k, SEXP fill, SEXP algo, SEXP align, SEX } else if (isReal(k)) { // if n is double then convert to integer SET_VECTOR_ELT(kl, 0, coerceVector(k, INTSXP)); } else { - error("n must be integer vector or list of integer vectors"); + error(_("n must be integer vector or list of integer vectors")); } nk = 1; } else { @@ -90,7 +90,7 @@ SEXP frollfunR(SEXP fun, SEXP obj, SEXP k, SEXP fill, SEXP algo, SEXP align, SEX } else if (isReal(VECTOR_ELT(k, i))) { // coerce double types to integer SET_VECTOR_ELT(kl, i, coerceVector(VECTOR_ELT(k, i), INTSXP)); } else { - error("n must be integer vector or list of integer vectors"); + error(_("n must be integer vector or list of integer vectors")); } } } @@ -101,12 +101,12 @@ SEXP frollfunR(SEXP fun, SEXP obj, SEXP k, SEXP fill, SEXP algo, SEXP align, SEX } if (!IS_TRUE_OR_FALSE(narm)) - error("na.rm must be TRUE or FALSE"); + error(_("na.rm must be TRUE or FALSE")); if (!isLogical(hasna) || length(hasna)!=1) - error("hasNA must be TRUE, FALSE or NA"); + error(_("hasNA must be TRUE, FALSE or NA")); if (LOGICAL(hasna)[0]==FALSE && LOGICAL(narm)[0]) - error("using hasNA FALSE and na.rm TRUE does not make sense, if you know there are NA values use hasNA TRUE, otherwise leave it as default NA"); + error(_("using hasNA FALSE and na.rm TRUE does not make sense, if you know there are NA values use hasNA TRUE, otherwise leave it as default NA")); int ialign; // decode align to integer if (!strcmp(CHAR(STRING_ELT(align, 0)), "right")) @@ -116,10 +116,10 @@ SEXP frollfunR(SEXP fun, SEXP obj, SEXP k, SEXP fill, SEXP algo, SEXP align, SEX else if (!strcmp(CHAR(STRING_ELT(align, 0)), "left")) ialign = -1; else - error("Internal error: invalid align argument in rolling function, should have been caught before. please report to data.table issue tracker."); // # nocov + error(_("Internal error: invalid align argument in rolling function, should have been caught before. please report to data.table issue tracker.")); // # nocov if (badaptive && ialign!=1) - error("using adaptive TRUE and align argument different than 'right' is not implemented"); + error(_("using adaptive TRUE and align argument different than 'right' is not implemented")); SEXP ans = PROTECT(allocVector(VECSXP, nk * nx)); protecti++; // allocate list to keep results if (verbose) @@ -132,9 +132,9 @@ SEXP frollfunR(SEXP fun, SEXP obj, SEXP k, SEXP fill, SEXP algo, SEXP align, SEX for (R_len_t j=0; j 0 && (inx[i]!=inx[i-1])) // variable length list input not allowed for adaptive roll - error("adaptive rolling function can only process 'x' having equal length of elements, like data.table or data.frame; If you want to call rolling function on list having variable length of elements call it for each field separately"); + error(_("adaptive rolling function can only process 'x' having equal length of elements, like data.table or data.frame; If you want to call rolling function on list having variable length of elements call it for each field separately")); if (xlength(VECTOR_ELT(kl, j))!=inx[0]) // check that length of integer vectors in n list match to xrows[0] ([0] and not [i] because there is above check for equal xrows) - error("length of integer vector(s) provided as list to 'n' argument must be equal to number of observations provided in 'x'"); + error(_("length of integer vector(s) provided as list to 'n' argument must be equal to number of observations provided in 'x'")); } SET_VECTOR_ELT(ans, i*nk+j, allocVector(REALSXP, inx[i]));// allocate answer vector for this column-window dans[i*nk+j] = ((ans_t) { .dbl_v=REAL(VECTOR_ELT(ans, i*nk+j)), .status=0, .message={"\0","\0","\0","\0"} }); @@ -148,11 +148,11 @@ SEXP frollfunR(SEXP fun, SEXP obj, SEXP k, SEXP fill, SEXP algo, SEXP align, SEX } else if (!strcmp(CHAR(STRING_ELT(fun, 0)), "sum")) { sfun = SUM; } else { - error("Internal error: invalid fun argument in rolling function, should have been caught before. please report to data.table issue tracker."); // # nocov + error(_("Internal error: invalid fun argument in rolling function, should have been caught before. please report to data.table issue tracker.")); // # nocov } if (length(fill) != 1) - error("fill must be a vector of length 1"); + error(_("fill must be a vector of length 1")); double dfill; if (isInteger(fill)) { @@ -166,7 +166,7 @@ SEXP frollfunR(SEXP fun, SEXP obj, SEXP k, SEXP fill, SEXP algo, SEXP align, SEX } else if (isLogical(fill) && LOGICAL(fill)[0]==NA_LOGICAL){ dfill = NA_REAL; } else { - error("fill must be numeric"); + error(_("fill must be numeric")); } bool bnarm = LOGICAL(narm)[0]; @@ -182,12 +182,12 @@ SEXP frollfunR(SEXP fun, SEXP obj, SEXP k, SEXP fill, SEXP algo, SEXP align, SEX else if (!strcmp(CHAR(STRING_ELT(algo, 0)), "exact")) ialgo = 1; // exact = 1 else - error("Internal error: invalid algo argument in rolling function, should have been caught before. please report to data.table issue tracker."); // # nocov + error(_("Internal error: invalid algo argument in rolling function, should have been caught before. please report to data.table issue tracker.")); // # nocov int* iik = NULL; if (!badaptive) { if (!isInteger(ik)) - error("Internal error: badaptive=%d but ik is not integer", badaptive); // # nocov + error(_("Internal error: badaptive=%d but ik is not integer"), badaptive); // # nocov iik = INTEGER(ik); // pointer to non-adaptive window width, still can be vector when doing multiple windows } else { // ik is still R_NilValue from initialization. But that's ok as it's only needed below when !badaptive. @@ -216,7 +216,7 @@ SEXP frollfunR(SEXP fun, SEXP obj, SEXP k, SEXP fill, SEXP algo, SEXP align, SEX fadaptiverollsum(ialgo, dx[i], inx[i], &dans[i*nk+j], ikl[j], dfill, bnarm, ihasna, verbose); break; default: - error("Internal error: Unknown sfun value in froll: %d", sfun); // #nocov + error(_("Internal error: Unknown sfun value in froll: %d"), sfun); // #nocov } } } @@ -235,9 +235,9 @@ SEXP frollapplyR(SEXP fun, SEXP obj, SEXP k, SEXP fill, SEXP align, SEXP rho) { const bool verbose = GetVerbose(); if (!isFunction(fun)) - error("internal error: 'fun' must be a function"); // # nocov + error(_("internal error: 'fun' must be a function")); // # nocov if (!isEnvironment(rho)) - error("internal error: 'rho' should be an environment"); // # nocov + error(_("internal error: 'rho' should be an environment")); // # nocov if (!xlength(obj)) return(obj); @@ -253,15 +253,15 @@ SEXP frollapplyR(SEXP fun, SEXP obj, SEXP k, SEXP fill, SEXP align, SEXP rho) { SEXP ik = PROTECT(coerceVector(k, INTSXP)); protecti++; k = ik; } else { - error("n must be integer"); + error(_("n must be integer")); } } else { - error("n must be integer"); + error(_("n must be integer")); } } R_len_t nk = length(k); if (nk == 0) - error("n must be non 0 length"); + error(_("n must be non 0 length")); int *ik = INTEGER(k); int ialign; @@ -272,11 +272,11 @@ SEXP frollapplyR(SEXP fun, SEXP obj, SEXP k, SEXP fill, SEXP align, SEXP rho) { } else if (!strcmp(CHAR(STRING_ELT(align, 0)), "left")) { ialign = -1; } else { - error("Internal error: invalid align argument in rolling function, should have been caught before. please report to data.table issue tracker."); // # nocov + error(_("Internal error: invalid align argument in rolling function, should have been caught before. please report to data.table issue tracker.")); // # nocov } if (length(fill) != 1) - error("fill must be a vector of length 1"); + error(_("fill must be a vector of length 1")); double dfill; if (isInteger(fill)) { if (INTEGER(fill)[0]==NA_LOGICAL) { @@ -289,7 +289,7 @@ SEXP frollapplyR(SEXP fun, SEXP obj, SEXP k, SEXP fill, SEXP align, SEXP rho) { } else if (isLogical(fill) && LOGICAL(fill)[0]==NA_LOGICAL){ dfill = NA_REAL; } else { - error("fill must be numeric"); + error(_("fill must be numeric")); } SEXP ans = PROTECT(allocVector(VECSXP, nk * nx)); protecti++; diff --git a/src/fsort.c b/src/fsort.c index 2de548f9bd..f4760ec4a0 100644 --- a/src/fsort.c +++ b/src/fsort.c @@ -106,9 +106,9 @@ SEXP fsort(SEXP x, SEXP verboseArg) { double t[10]; t[0] = wallclock(); if (!isLogical(verboseArg) || LENGTH(verboseArg)!=1 || LOGICAL(verboseArg)[0]==NA_LOGICAL) - error("verbose must be TRUE or FALSE"); + error(_("verbose must be TRUE or FALSE")); Rboolean verbose = LOGICAL(verboseArg)[0]; - if (!isNumeric(x)) error("x must be a vector of type 'double' currently"); + if (!isNumeric(x)) error(_("x must be a vector of type 'double' currently")); // TODO: not only detect if already sorted, but if it is, just return x to save the duplicate SEXP ansVec = PROTECT(allocVector(REALSXP, xlength(x))); @@ -154,7 +154,7 @@ SEXP fsort(SEXP x, SEXP verboseArg) { if (maxs[i]>max) max=maxs[i]; } if (verbose) Rprintf("Range = [%g,%g]\n", min, max); - if (min < 0.0) error("Cannot yet handle negatives."); + if (min < 0.0) error(_("Cannot yet handle negatives.")); // TODO: -0ULL should allow negatives // avoid twiddle function call as expensive in recent tests (0.34 vs 2.7) // possibly twiddle once to *ans, then untwiddle at the end in a fast parallel sweep @@ -170,7 +170,7 @@ SEXP fsort(SEXP x, SEXP verboseArg) { if (verbose) Rprintf("maxBit=%d; MSBNbits=%d; shift=%d; MSBsize=%d\n", maxBit, MSBNbits, shift, MSBsize); R_xlen_t *counts = calloc(nBatch*MSBsize, sizeof(R_xlen_t)); - if (counts==NULL) error("Unable to allocate working memory"); + if (counts==NULL) error(_("Unable to allocate working memory")); // provided MSBsize>=9, each batch is a multiple of at least one 4k page, so no page overlap // TODO: change all calloc, malloc and free to Calloc and Free to be robust to error() and catch ooms. @@ -227,7 +227,7 @@ SEXP fsort(SEXP x, SEXP verboseArg) { // sort bins by size, largest first to minimise last-man-home R_xlen_t *msbCounts = counts + (nBatch-1)*MSBsize; // msbCounts currently contains the ending position of each MSB (the starting location of the next) even across empty - if (msbCounts[MSBsize-1] != xlength(x)) error("Internal error: counts[nBatch-1][MSBsize-1] != length(x)"); // # nocov + if (msbCounts[MSBsize-1] != xlength(x)) error(_("Internal error: counts[nBatch-1][MSBsize-1] != length(x)")); // # nocov R_xlen_t *msbFrom = malloc(MSBsize*sizeof(R_xlen_t)); int *order = malloc(MSBsize*sizeof(int)); R_xlen_t cumSum = 0; diff --git a/src/fwriteR.c b/src/fwriteR.c index 8040631db6..75b4510709 100644 --- a/src/fwriteR.c +++ b/src/fwriteR.c @@ -38,7 +38,7 @@ const int getMaxStringLen(const SEXP *col, const int64_t n) { const int getMaxCategLen(SEXP col) { col = getAttrib(col, R_LevelsSymbol); - if (!isString(col)) error("Internal error: col passed to getMaxCategLen is missing levels"); + if (!isString(col)) error(_("Internal error: col passed to getMaxCategLen is missing levels")); return getMaxStringLen( STRING_PTR(col), LENGTH(col) ); } @@ -72,7 +72,7 @@ void writeList(SEXP *col, int64_t row, char **pch) { SEXP v = col[row]; int32_t wf = whichWriter(v); if (TYPEOF(v)==VECSXP || wf==INT32_MIN || isFactor(v)) { - error("Internal error: getMaxListItemLen should have caught this up front."); // # nocov + error(_("Internal error: getMaxListItemLen should have caught this up front.")); // # nocov } char *ch = *pch; write_chars(sep2start, &ch); @@ -95,7 +95,7 @@ const int getMaxListItemLen(const SEXP *col, const int64_t n) { if (this==last) continue; // no point calling LENGTH() again on the same string; LENGTH is unlikely as fast as single pointer compare int32_t wf = whichWriter(this); if (TYPEOF(this)==VECSXP || wf==INT32_MIN || isFactor(this)) { - error("Row %d of list column is type '%s' - not yet implemented. fwrite() can write list columns containing items which are atomic vectors of" \ + error(_("Row %d of list column is type '%s' - not yet implemented. fwrite() can write list columns containing items which are atomic vectors of") \ " type logical, integer, integer64, double, complex and character.", i+1, isFactor(this) ? "factor" : type2char(TYPEOF(this))); } int width = writerMaxLen[wf]; @@ -167,7 +167,7 @@ SEXP fwriteR( SEXP verbose_Arg ) { - if (!isNewList(DF)) error("fwrite must be passed an object of type list; e.g. data.frame, data.table"); + if (!isNewList(DF)) error(_("fwrite must be passed an object of type list; e.g. data.frame, data.table")); fwriteMainArgs args; args.is_gzip = LOGICAL(is_gzip_Arg)[0]; args.bom = LOGICAL(bom_Arg)[0]; @@ -231,10 +231,10 @@ SEXP fwriteR( for (int j=0; jmaxgrpn) maxgrpn = grpsize[i]; // old comment to be checked: 'needed for #2046 and #2111 when maxgrpn attribute is not attached to empty o' } - if (LENGTH(o) && LENGTH(o)!=nrow) error("o has length %d but sum(l)=%d", LENGTH(o), nrow); + if (LENGTH(o) && LENGTH(o)!=nrow) error(_("o has length %d but sum(l)=%d"), LENGTH(o), nrow); { SEXP tt = getAttrib(o, install("maxgrpn")); - if (length(tt)==1 && INTEGER(tt)[0]!=maxgrpn) error("Internal error: o's maxgrpn attribute mismatches recalculated maxgrpn"); // # nocov + if (length(tt)==1 && INTEGER(tt)[0]!=maxgrpn) error(_("Internal error: o's maxgrpn attribute mismatches recalculated maxgrpn")); // # nocov } int nb = nbit(ngrp-1); @@ -86,7 +86,7 @@ SEXP gforce(SEXP env, SEXP jsub, SEXP o, SEXP f, SEXP l, SEXP irowsArg) { // TODO: enable stress-test mode in tests only (#3205) which can be turned off by default in release to decrease overhead on small data // if that is established to be biting (it may be fine). if (nBatch<1 || batchSize<1 || lastBatchSize<1) { - error("Internal error: nrow=%d ngrp=%d nbit=%d shift=%d highSize=%d nBatch=%d batchSize=%d lastBatchSize=%d\n", // # nocov + error(_("Internal error: nrow=%d ngrp=%d nbit=%d shift=%d highSize=%d nBatch=%d batchSize=%d lastBatchSize=%d\n"), // # nocov nrow, ngrp, nb, shift, highSize, nBatch, batchSize, lastBatchSize); // # nocov } // initial population of g: @@ -113,7 +113,7 @@ SEXP gforce(SEXP env, SEXP jsub, SEXP o, SEXP f, SEXP l, SEXP irowsArg) { //Rprintf("When assigning grp[o] = g, highSize=%d nb=%d shift=%d nBatch=%d\n", highSize, nb, shift, nBatch); int *counts = calloc(nBatch*highSize, sizeof(int)); // TODO: cache-line align and make highSize a multiple of 64 int *TMP = malloc(nrow*2*sizeof(int)); - if (!counts || !TMP ) error("Internal error: Failed to allocate counts or TMP when assigning g in gforce"); + if (!counts || !TMP ) error(_("Internal error: Failed to allocate counts or TMP when assigning g in gforce")); #pragma omp parallel for num_threads(getDTthreads()) // schedule(dynamic,1) for (int b=0; b8) error("Pointers are %d bytes, greater than 8. We have not tested on any architecture greater than 64bit yet.", sizeof(char *)); + if (sizeof(char *)>8) error(_("Pointers are %d bytes, greater than 8. We have not tested on any architecture greater than 64bit yet."), sizeof(char *)); // One place we need the largest sizeof is the working memory malloc in reorder.c } @@ -206,59 +206,59 @@ void attribute_visible R_init_datatable(DllInfo *info) R_useDynamicSymbols(info, FALSE); setSizes(); const char *msg = "... failed. Please forward this message to maintainer('data.table')."; - if ((int)NA_INTEGER != (int)INT_MIN) error("Checking NA_INTEGER [%d] == INT_MIN [%d] %s", NA_INTEGER, INT_MIN, msg); - if ((int)NA_INTEGER != (int)NA_LOGICAL) error("Checking NA_INTEGER [%d] == NA_LOGICAL [%d] %s", NA_INTEGER, NA_LOGICAL, msg); - if (sizeof(int) != 4) error("Checking sizeof(int) [%d] is 4 %s", sizeof(int), msg); - if (sizeof(double) != 8) error("Checking sizeof(double) [%d] is 8 %s", sizeof(double), msg); // 8 on both 32bit and 64bit - // alignof not available in C99: if (alignof(double) != 8) error("Checking alignof(double) [%d] is 8 %s", alignof(double), msg); // 8 on both 32bit and 64bit - if (sizeof(long long) != 8) error("Checking sizeof(long long) [%d] is 8 %s", sizeof(long long), msg); - if (sizeof(char *) != 4 && sizeof(char *) != 8) error("Checking sizeof(pointer) [%d] is 4 or 8 %s", sizeof(char *), msg); - if (sizeof(SEXP) != sizeof(char *)) error("Checking sizeof(SEXP) [%d] == sizeof(pointer) [%d] %s", sizeof(SEXP), sizeof(char *), msg); - if (sizeof(uint64_t) != 8) error("Checking sizeof(uint64_t) [%d] is 8 %s", sizeof(uint64_t), msg); - if (sizeof(int64_t) != 8) error("Checking sizeof(int64_t) [%d] is 8 %s", sizeof(int64_t), msg); - if (sizeof(signed char) != 1) error("Checking sizeof(signed char) [%d] is 1 %s", sizeof(signed char), msg); - if (sizeof(int8_t) != 1) error("Checking sizeof(int8_t) [%d] is 1 %s", sizeof(int8_t), msg); - if (sizeof(uint8_t) != 1) error("Checking sizeof(uint8_t) [%d] is 1 %s", sizeof(uint8_t), msg); - if (sizeof(int16_t) != 2) error("Checking sizeof(int16_t) [%d] is 2 %s", sizeof(int16_t), msg); - if (sizeof(uint16_t) != 2) error("Checking sizeof(uint16_t) [%d] is 2 %s", sizeof(uint16_t), msg); + if ((int)NA_INTEGER != (int)INT_MIN) error(_("Checking NA_INTEGER [%d] == INT_MIN [%d] %s"), NA_INTEGER, INT_MIN, msg); + if ((int)NA_INTEGER != (int)NA_LOGICAL) error(_("Checking NA_INTEGER [%d] == NA_LOGICAL [%d] %s"), NA_INTEGER, NA_LOGICAL, msg); + if (sizeof(int) != 4) error(_("Checking sizeof(int) [%d] is 4 %s"), sizeof(int), msg); + if (sizeof(double) != 8) error(_("Checking sizeof(double) [%d] is 8 %s"), sizeof(double), msg); // 8 on both 32bit and 64bit + // alignof not available in C99: if (alignof(double) != 8) error(_("Checking alignof(double) [%d] is 8 %s"), alignof(double), msg); // 8 on both 32bit and 64bit + if (sizeof(long long) != 8) error(_("Checking sizeof(long long) [%d] is 8 %s"), sizeof(long long), msg); + if (sizeof(char *) != 4 && sizeof(char *) != 8) error(_("Checking sizeof(pointer) [%d] is 4 or 8 %s"), sizeof(char *), msg); + if (sizeof(SEXP) != sizeof(char *)) error(_("Checking sizeof(SEXP) [%d] == sizeof(pointer) [%d] %s"), sizeof(SEXP), sizeof(char *), msg); + if (sizeof(uint64_t) != 8) error(_("Checking sizeof(uint64_t) [%d] is 8 %s"), sizeof(uint64_t), msg); + if (sizeof(int64_t) != 8) error(_("Checking sizeof(int64_t) [%d] is 8 %s"), sizeof(int64_t), msg); + if (sizeof(signed char) != 1) error(_("Checking sizeof(signed char) [%d] is 1 %s"), sizeof(signed char), msg); + if (sizeof(int8_t) != 1) error(_("Checking sizeof(int8_t) [%d] is 1 %s"), sizeof(int8_t), msg); + if (sizeof(uint8_t) != 1) error(_("Checking sizeof(uint8_t) [%d] is 1 %s"), sizeof(uint8_t), msg); + if (sizeof(int16_t) != 2) error(_("Checking sizeof(int16_t) [%d] is 2 %s"), sizeof(int16_t), msg); + if (sizeof(uint16_t) != 2) error(_("Checking sizeof(uint16_t) [%d] is 2 %s"), sizeof(uint16_t), msg); SEXP tmp = PROTECT(allocVector(INTSXP,2)); - if (LENGTH(tmp)!=2) error("Checking LENGTH(allocVector(INTSXP,2)) [%d] is 2 %s", LENGTH(tmp), msg); - if (TRUELENGTH(tmp)!=0) error("Checking TRUELENGTH(allocVector(INTSXP,2)) [%d] is 0 %s", TRUELENGTH(tmp), msg); + if (LENGTH(tmp)!=2) error(_("Checking LENGTH(allocVector(INTSXP,2)) [%d] is 2 %s"), LENGTH(tmp), msg); + if (TRUELENGTH(tmp)!=0) error(_("Checking TRUELENGTH(allocVector(INTSXP,2)) [%d] is 0 %s"), TRUELENGTH(tmp), msg); UNPROTECT(1); // According to IEEE (http://en.wikipedia.org/wiki/IEEE_754-1985#Zero) we can rely on 0.0 being all 0 bits. // But check here anyway just to be sure, just in case this answer is right (http://stackoverflow.com/a/2952680/403310). int i = 314; memset(&i, 0, sizeof(int)); - if (i != 0) error("Checking memset(&i,0,sizeof(int)); i == (int)0 %s", msg); + if (i != 0) error(_("Checking memset(&i,0,sizeof(int)); i == (int)0 %s"), msg); unsigned int ui = 314; memset(&ui, 0, sizeof(unsigned int)); - if (ui != 0) error("Checking memset(&ui, 0, sizeof(unsigned int)); ui == (unsigned int)0 %s", msg); + if (ui != 0) error(_("Checking memset(&ui, 0, sizeof(unsigned int)); ui == (unsigned int)0 %s"), msg); double d = 3.14; memset(&d, 0, sizeof(double)); - if (d != 0.0) error("Checking memset(&d, 0, sizeof(double)); d == (double)0.0 %s", msg); + if (d != 0.0) error(_("Checking memset(&d, 0, sizeof(double)); d == (double)0.0 %s"), msg); long double ld = 3.14; memset(&ld, 0, sizeof(long double)); - if (ld != 0.0) error("Checking memset(&ld, 0, sizeof(long double)); ld == (long double)0.0 %s", msg); + if (ld != 0.0) error(_("Checking memset(&ld, 0, sizeof(long double)); ld == (long double)0.0 %s"), msg); // Check unsigned cast used in fread.c. This isn't overflow/underflow, just cast. - if ((uint_fast8_t)('0'-'/') != 1) error("The ascii character '/' is not just before '0'"); - if ((uint_fast8_t)('/'-'0') < 10) error("The C expression (uint_fast8_t)('/'-'0')<10 is true. Should be false."); - if ((uint_fast8_t)(':'-'9') != 1) error("The ascii character ':' is not just after '9'"); - if ((uint_fast8_t)('9'-':') < 10) error("The C expression (uint_fast8_t)('9'-':')<10 is true. Should be false."); + if ((uint_fast8_t)('0'-'/') != 1) error(_("The ascii character '/' is not just before '0'")); + if ((uint_fast8_t)('/'-'0') < 10) error(_("The C expression (uint_fast8_t)('/'-'0')<10 is true. Should be false.")); + if ((uint_fast8_t)(':'-'9') != 1) error(_("The ascii character ':' is not just after '9'")); + if ((uint_fast8_t)('9'-':') < 10) error(_("The C expression (uint_fast8_t)('9'-':')<10 is true. Should be false.")); // Variables rather than #define for NA_INT64 to ensure correct usage; i.e. not casted NA_INT64_LL = LLONG_MIN; NA_INT64_D = LLtoD(NA_INT64_LL); - if (NA_INT64_LL != DtoLL(NA_INT64_D)) error("Conversion of NA_INT64 via double failed %lld!=%lld", NA_INT64_LL, DtoLL(NA_INT64_D)); + if (NA_INT64_LL != DtoLL(NA_INT64_D)) error(_("Conversion of NA_INT64 via double failed %lld!=%lld"), NA_INT64_LL, DtoLL(NA_INT64_D)); // LLONG_MIN when punned to double is the sign bit set and then all zeros in exponent and significand i.e. -0.0 // That's why we must never test for NA_INT64_D using == in double type. Must always DtoLL and compare long long types. // Assigning NA_INT64_D to a REAL is ok however. - if (NA_INT64_D != 0.0) error("NA_INT64_D (negative -0.0) is not == 0.0."); - if (NA_INT64_D != -0.0) error("NA_INT64_D (negative -0.0) is not ==-0.0."); - if (ISNAN(NA_INT64_D)) error("ISNAN(NA_INT64_D) is TRUE but should not be"); - if (isnan(NA_INT64_D)) error("isnan(NA_INT64_D) is TRUE but should not be"); + if (NA_INT64_D != 0.0) error(_("NA_INT64_D (negative -0.0) is not == 0.0.")); + if (NA_INT64_D != -0.0) error(_("NA_INT64_D (negative -0.0) is not ==-0.0.")); + if (ISNAN(NA_INT64_D)) error(_("ISNAN(NA_INT64_D) is TRUE but should not be")); + if (isnan(NA_INT64_D)) error(_("isnan(NA_INT64_D) is TRUE but should not be")); NA_CPLX.r = NA_REAL; // NA_REAL is defined as R_NaReal which is not a strict constant and thus initializer {NA_REAL, NA_REAL} can't be used in .h NA_CPLX.i = NA_REAL; // https://github.com/Rdatatable/data.table/pull/3689/files#r304117234 @@ -287,7 +287,7 @@ void attribute_visible R_init_datatable(DllInfo *info) if (TYPEOF(char_integer64) != CHARSXP) { // checking one is enough in case of any R-devel changes - error("PRINTNAME(install(\"integer64\")) has returned %s not %s", type2char(TYPEOF(char_integer64)), type2char(CHARSXP)); // # nocov + error(_("PRINTNAME(install(\")integer64\")) has returned %s not %s", type2char(TYPEOF(char_integer64)), type2char(CHARSXP)); // # nocov } // create commonly used symbols, same as R_*Symbol but internal to DT @@ -356,7 +356,7 @@ SEXP hasOpenMP() { extern int *_Last_updated; // assign.c SEXP initLastUpdated(SEXP var) { - if (!isInteger(var) || LENGTH(var)!=1) error(".Last.value in namespace is not a length 1 integer"); + if (!isInteger(var) || LENGTH(var)!=1) error(_(".Last.value in namespace is not a length 1 integer")); _Last_updated = INTEGER(var); return R_NilValue; } diff --git a/src/nafill.c b/src/nafill.c index 841d9f6fb1..6236504425 100644 --- a/src/nafill.c +++ b/src/nafill.c @@ -70,7 +70,7 @@ void nafillInteger64(int64_t *x, uint_fast64_t nx, unsigned int type, int64_t fi SEXP nafillR(SEXP obj, SEXP type, SEXP fill, SEXP inplace, SEXP cols, SEXP verbose) { int protecti=0; if (!IS_TRUE_OR_FALSE(verbose)) - error("verbose must be TRUE or FALSE"); + error(_("verbose must be TRUE or FALSE")); bool bverbose = LOGICAL(verbose)[0]; if (!xlength(obj)) @@ -80,9 +80,9 @@ SEXP nafillR(SEXP obj, SEXP type, SEXP fill, SEXP inplace, SEXP cols, SEXP verbo SEXP x = R_NilValue; if (isVectorAtomic(obj)) { if (binplace) - error("'x' argument is atomic vector, in-place update is supported only for list/data.table"); + error(_("'x' argument is atomic vector, in-place update is supported only for list/data.table")); else if (!isReal(obj) && !isInteger(obj)) - error("'x' argument must be numeric type, or list/data.table of numeric types"); + error(_("'x' argument must be numeric type, or list/data.table of numeric types")); x = PROTECT(allocVector(VECSXP, 1)); protecti++; // wrap into list SET_VECTOR_ELT(x, 0, obj); } else { @@ -92,7 +92,7 @@ SEXP nafillR(SEXP obj, SEXP type, SEXP fill, SEXP inplace, SEXP cols, SEXP verbo for (int i=0; i= 0. See ?setDTthreads."); + error(_("threads= must be either NULL or a single integer >= 0. See ?setDTthreads.")); } UNPROTECT(protecti); int num_procs = imax(omp_get_num_procs(), 1); // max just in case omp_get_num_procs() returns <= 0 (perhaps error, or unsupported) if (!isLogical(percent) || length(percent)!=1 || LOGICAL(percent)[0]==NA_LOGICAL) { - error("Internal error: percent= must be TRUE or FALSE at C level"); // # nocov + error(_("Internal error: percent= must be TRUE or FALSE at C level")); // # nocov } if (LOGICAL(percent)[0]) { - if (n<2 || n>100) error("Internal error: threads==%d should be between 2 and 100 (percent=TRUE at C level).", n); // # nocov + if (n<2 || n>100) error(_("Internal error: threads==%d should be between 2 and 100 (percent=TRUE at C level)."), n); // # nocov n = num_procs*n/100; // if 0 it will be reset to 1 in the imax() below } else { if (n==0 || n>num_procs) n = num_procs; // setDTthreads(0) == setDTthread(percent=100); i.e. use all logical CPUs (the default in 1.12.0 and before, from 1.12.2 it's 50%) diff --git a/src/rbindlist.c b/src/rbindlist.c index f9bba8bb78..e12d1df8e5 100644 --- a/src/rbindlist.c +++ b/src/rbindlist.c @@ -5,11 +5,11 @@ SEXP rbindlist(SEXP l, SEXP usenamesArg, SEXP fillArg, SEXP idcolArg) { if (!isLogical(fillArg) || LENGTH(fillArg) != 1 || LOGICAL(fillArg)[0] == NA_LOGICAL) - error("fill= should be TRUE or FALSE"); + error(_("fill= should be TRUE or FALSE")); if (!isLogical(usenamesArg) || LENGTH(usenamesArg)!=1) - error("use.names= should be TRUE, FALSE, or not used (\"check\" by default)"); // R levels converts "check" to NA + error(_("use.names= should be TRUE, FALSE, or not used (\")check\" by default)"); // R levels converts "check" to NA if (!length(l)) return(l); - if (TYPEOF(l) != VECSXP) error("Input to rbindlist must be a list. This list can contain data.tables, data.frames or plain lists."); + if (TYPEOF(l) != VECSXP) error(_("Input to rbindlist must be a list. This list can contain data.tables, data.frames or plain lists.")); Rboolean usenames = LOGICAL(usenamesArg)[0]; const bool fill = LOGICAL(fillArg)[0]; if (fill && usenames!=TRUE) { @@ -17,7 +17,7 @@ SEXP rbindlist(SEXP l, SEXP usenamesArg, SEXP fillArg, SEXP idcolArg) usenames=TRUE; } const bool idcol = !isNull(idcolArg); - if (idcol && (!isString(idcolArg) || LENGTH(idcolArg)!=1)) error("Internal error: rbindlist.c idcol is not a single string"); // # nocov + if (idcol && (!isString(idcolArg) || LENGTH(idcolArg)!=1)) error(_("Internal error: rbindlist.c idcol is not a single string")); // # nocov int ncol=0, first=0; int64_t nrow=0, upperBoundUniqueNames=1; bool anyNames=false; @@ -28,25 +28,25 @@ SEXP rbindlist(SEXP l, SEXP usenamesArg, SEXP fillArg, SEXP idcolArg) eachMax[i] = 0; SEXP li = VECTOR_ELT(l, i); if (isNull(li)) continue; - if (TYPEOF(li) != VECSXP) error("Item %d of input is not a data.frame, data.table or list", i+1); + if (TYPEOF(li) != VECSXP) error(_("Item %d of input is not a data.frame, data.table or list"), i+1); const int thisncol = length(li); if (!thisncol) continue; - // delete as now more flexible ... if (fill && isNull(getAttrib(li, R_NamesSymbol))) error("When fill=TRUE every item of the input must have column names. Item %d does not.", i+1); + // delete as now more flexible ... if (fill && isNull(getAttrib(li, R_NamesSymbol))) error(_("When fill=TRUE every item of the input must have column names. Item %d does not."), i+1); if (fill) { if (thisncol>ncol) ncol=thisncol; // this section initializes ncol with max ncol. ncol may be increased when usenames is accounted for further down } else { if (ncol==0) { ncol=thisncol; first=i; } - else if (thisncol!=ncol) error("Item %d has %d columns, inconsistent with item %d which has %d columns. To fill missing columns use fill=TRUE.", i+1, thisncol, first+1, ncol); + else if (thisncol!=ncol) error(_("Item %d has %d columns, inconsistent with item %d which has %d columns. To fill missing columns use fill=TRUE."), i+1, thisncol, first+1, ncol); } int nNames = length(getAttrib(li, R_NamesSymbol)); - if (nNames>0 && nNames!=thisncol) error("Item %d has %d columns but %d column names. Invalid object.", i+1, thisncol, nNames); + if (nNames>0 && nNames!=thisncol) error(_("Item %d has %d columns but %d column names. Invalid object."), i+1, thisncol, nNames); if (nNames>0) anyNames=true; upperBoundUniqueNames += nNames; int maxLen=0, whichMax=0; for (int j=0; jmaxLen) { maxLen=tt; whichMax=j; } } for (int j=0; j1 && tt!=maxLen) error("Column %d of item %d is length %d inconsistent with column %d which is length %d. Only length-1 columns are recycled.", j+1, i+1, tt, whichMax+1, maxLen); + if (tt>1 && tt!=maxLen) error(_("Column %d of item %d is length %d inconsistent with column %d which is length %d. Only length-1 columns are recycled."), j+1, i+1, tt, whichMax+1, maxLen); if (tt==0 && maxLen>0 && numZero++==0) { firstZeroCol = j; firstZeroItem=i; } } eachMax[i] = maxLen; @@ -59,8 +59,8 @@ SEXP rbindlist(SEXP l, SEXP usenamesArg, SEXP fillArg, SEXP idcolArg) firstZeroCol+1, ch, firstZeroItem+1, numZero-1, numZero==2?"":"s"); } if (nrow==0 && ncol==0) return(R_NilValue); - if (nrow>INT32_MAX) error("Total rows in the list is %lld which is larger than the maximum number of rows, currently %d", nrow, INT32_MAX); - if (usenames==TRUE && !anyNames) error("use.names=TRUE but no item of input list has any names"); + if (nrow>INT32_MAX) error(_("Total rows in the list is %lld which is larger than the maximum number of rows, currently %d"), nrow, INT32_MAX); + if (usenames==TRUE && !anyNames) error(_("use.names=TRUE but no item of input list has any names")); int *colMap=NULL; // maps each column in final result to the column of each list item if (usenames==TRUE || usenames==NA_LOGICAL) { @@ -68,7 +68,7 @@ SEXP rbindlist(SEXP l, SEXP usenamesArg, SEXP fillArg, SEXP idcolArg) // when use.names==NA we also proceed here as if use.names was TRUE to save new code and then check afterwards the map is 1:ncol for every item // first find number of unique column names present; i.e. length(unique(unlist(lapply(l,names)))) SEXP *uniq = (SEXP *)malloc(upperBoundUniqueNames * sizeof(SEXP)); // upperBoundUniqueNames was initialized with 1 to ensure this is defined (otherwise 0 when no item has names) - if (!uniq) error("Failed to allocate upper bound of %lld unique column names [sum(lapply(l,ncol))]", upperBoundUniqueNames); + if (!uniq) error(_("Failed to allocate upper bound of %lld unique column names [sum(lapply(l,ncol))]"), upperBoundUniqueNames); savetl_init(); int nuniq=0; for (int i=0; iTYPEORDER(maxType)) maxType=thisType; if (isFactor(thisCol)) { - if (isNull(getAttrib(thisCol,R_LevelsSymbol))) error("Column %d of item %d has type 'factor' but has no levels; i.e. malformed.", w+1, i+1); + if (isNull(getAttrib(thisCol,R_LevelsSymbol))) error(_("Column %d of item %d has type 'factor' but has no levels; i.e. malformed."), w+1, i+1); factor = true; if (isOrdered(thisCol)) { orderedFactor = true; @@ -312,7 +312,7 @@ SEXP rbindlist(SEXP l, SEXP usenamesArg, SEXP fillArg, SEXP idcolArg) if (!R_compute_identical(PROTECT(getAttrib(thisCol, R_ClassSymbol)), PROTECT(getAttrib(firstCol, R_ClassSymbol)), 0)) { - error("Class attribute on column %d of item %d does not match with column %d of item %d.", w+1, i+1, firstw+1, firsti+1); + error(_("Class attribute on column %d of item %d does not match with column %d of item %d."), w+1, i+1, firstw+1, firsti+1); } UNPROTECT(2); } @@ -322,7 +322,7 @@ SEXP rbindlist(SEXP l, SEXP usenamesArg, SEXP fillArg, SEXP idcolArg) if (!foundName) { static char buff[12]; sprintf(buff,"V%d",j+1), SET_STRING_ELT(ansNames, idcol+j, mkChar(buff)); foundName=buff; } if (factor) maxType=INTSXP; // if any items are factors then a factor is created (could be an option) if (int64 && maxType!=REALSXP) - error("Internal error: column %d of result is determined to be integer64 but maxType=='%s' != REALSXP", j+1, type2char(maxType)); // # nocov + error(_("Internal error: column %d of result is determined to be integer64 but maxType=='%s' != REALSXP"), j+1, type2char(maxType)); // # nocov SEXP target; SET_VECTOR_ELT(ans, idcol+j, target=allocVector(maxType, nrow)); // does not initialize logical & numerics, but does initialize character and list if (!factor) copyMostAttrib(firstCol, target); // all but names,dim and dimnames; mainly for class. And if so, we want a copy here, not keepattr's SET_ATTRIB. @@ -358,7 +358,7 @@ SEXP rbindlist(SEXP l, SEXP usenamesArg, SEXP fillArg, SEXP idcolArg) const SEXP *sd = STRING_PTR(longestLevels); nLevel = allocLevel = longestLen; levelsRaw = (SEXP *)malloc(nLevel * sizeof(SEXP)); - if (!levelsRaw) { savetl_end(); error("Failed to allocate working memory for %d ordered factor levels of result column %d", nLevel, idcol+j+1); } + if (!levelsRaw) { savetl_end(); error(_("Failed to allocate working memory for %d ordered factor levels of result column %d"), nLevel, idcol+j+1); } for (int k=0; k0) savetl(s); @@ -429,7 +429,7 @@ SEXP rbindlist(SEXP l, SEXP usenamesArg, SEXP fillArg, SEXP idcolArg) for (int k=0; k maxSize) maxSize=SIZEOF(v); if (ALTREP(v)) SET_VECTOR_ELT(x, i, copyAsPlain(v)); @@ -24,14 +24,14 @@ SEXP reorder(SEXP x, SEXP order) copySharedColumns(x); // otherwise two columns which point to the same vector would be reordered and then re-reordered, issues linked in PR#3768 } else { if (SIZEOF(x)!=4 && SIZEOF(x)!=8 && SIZEOF(x)!=16) - error("reorder accepts vectors but this non-VECSXP is type '%s' which isn't yet supported (SIZEOF=%d)", type2char(TYPEOF(x)), SIZEOF(x)); - if (ALTREP(x)) error("Internal error in reorder.c: cannot reorder an ALTREP vector. Please see NEWS item 2 in v1.11.4 and report this as a bug."); // # nocov + error(_("reorder accepts vectors but this non-VECSXP is type '%s' which isn't yet supported (SIZEOF=%d)"), type2char(TYPEOF(x)), SIZEOF(x)); + if (ALTREP(x)) error(_("Internal error in reorder.c: cannot reorder an ALTREP vector. Please see NEWS item 2 in v1.11.4 and report this as a bug.")); // # nocov maxSize = SIZEOF(x); nrow = length(x); ncol = 1; } - if (!isInteger(order)) error("order must be an integer vector"); - if (length(order) != nrow) error("nrow(x)[%d]!=length(order)[%d]",nrow,length(order)); + if (!isInteger(order)) error(_("order must be an integer vector")); + if (length(order) != nrow) error(_("nrow(x)[%d]!=length(order)[%d]"),nrow,length(order)); int nprotect = 0; if (ALTREP(order)) { order=PROTECT(copyAsPlain(order)); nprotect++; } // TODO: if it's an ALTREP sequence some optimizations are possible rather than expand @@ -45,7 +45,7 @@ SEXP reorder(SEXP x, SEXP order) const int end = i; for (int i=start; i<=end; i++) { int itmp = idx[i]-1; - if (itmpend) error("order is not a permutation of 1:nrow[%d]", nrow); + if (itmpend) error(_("order is not a permutation of 1:nrow[%d]"), nrow); } // Creorder is for internal use (so we should get the input right!), but the check above seems sensible. The for loop above should run // in neglible time (sequential with prefetch). It will catch NAs anywhere but won't catch duplicates. But doing so would be going too @@ -54,7 +54,7 @@ SEXP reorder(SEXP x, SEXP order) char *TMP = malloc(nrow * maxSize); // enough RAM for a copy of one column (of largest type). Writes into the [start,end] subset. Outside [start,end] is wasted in that rarer case // to save a "-start" in the deep loop below in all cases. - if (!TMP) error("Unable to allocate %d * %d bytes of working memory for reordering data.table", end-start+1, maxSize); + if (!TMP) error(_("Unable to allocate %d * %d bytes of working memory for reordering data.table"), end-start+1, maxSize); for (int i=0; imax since they should have been dealt with by convertNegAndZeroIdx() called ealier at R level. // single cache efficient sweep with prefetch, so very low priority to go parallel { - if (!isInteger(idx)) error("Internal error. 'idx' is type '%s' not 'integer'", type2char(TYPEOF(idx))); // # nocov + if (!isInteger(idx)) error(_("Internal error. 'idx' is type '%s' not 'integer'"), type2char(TYPEOF(idx))); // # nocov bool anyLess=false, anyNA=false; int last = INT32_MIN; int *idxp = INTEGER(idx), n=LENGTH(idx); @@ -118,11 +118,11 @@ SEXP convertNegAndZeroIdx(SEXP idx, SEXP maxArg, SEXP allowOverMax) // + a little more efficient than negativeSubscript in src/main/subscript.c (it's private to R so we can't call it anyway) // allowOverMaxArg is false when := (test 1024), otherwise true for selecting - if (!isInteger(idx)) error("Internal error. 'idx' is type '%s' not 'integer'", type2char(TYPEOF(idx))); // # nocov - if (!isInteger(maxArg) || length(maxArg)!=1) error("Internal error. 'maxArg' is type '%s' and length %d, should be an integer singleton", type2char(TYPEOF(maxArg)), length(maxArg)); // # nocov - if (!isLogical(allowOverMax) || LENGTH(allowOverMax)!=1 || LOGICAL(allowOverMax)[0]==NA_LOGICAL) error("Internal error: allowOverMax must be TRUE/FALSE"); // # nocov + if (!isInteger(idx)) error(_("Internal error. 'idx' is type '%s' not 'integer'"), type2char(TYPEOF(idx))); // # nocov + if (!isInteger(maxArg) || length(maxArg)!=1) error(_("Internal error. 'maxArg' is type '%s' and length %d, should be an integer singleton"), type2char(TYPEOF(maxArg)), length(maxArg)); // # nocov + if (!isLogical(allowOverMax) || LENGTH(allowOverMax)!=1 || LOGICAL(allowOverMax)[0]==NA_LOGICAL) error(_("Internal error: allowOverMax must be TRUE/FALSE")); // # nocov int max = INTEGER(maxArg)[0], n=LENGTH(idx); - if (max<0) error("Internal error. max is %d, must be >= 0.", max); // # nocov includes NA which will print as INT_MIN + if (max<0) error(_("Internal error. max is %d, must be >= 0."), max); // # nocov includes NA which will print as INT_MIN int *idxp = INTEGER(idx); bool stop = false; @@ -146,7 +146,7 @@ SEXP convertNegAndZeroIdx(SEXP idx, SEXP maxArg, SEXP allowOverMax) else if (elem>max && firstOverMax==0) firstOverMax=i+1; } if (firstOverMax && LOGICAL(allowOverMax)[0]==FALSE) { - error("i[%d] is %d which is out of range [1,nrow=%d]", firstOverMax, idxp[firstOverMax-1], max); + error(_("i[%d] is %d which is out of range [1,nrow=%d]"), firstOverMax, idxp[firstOverMax-1], max); } int countPos = n-countNeg-countZero-countNA; @@ -158,7 +158,7 @@ SEXP convertNegAndZeroIdx(SEXP idx, SEXP maxArg, SEXP allowOverMax) if (firstNeg==0 && elem<0 && elem!=NA_INTEGER) firstNeg=i+1; i++; } - error("Item %d of i is %d and item %d is %d. Cannot mix positives and negatives.", firstNeg, idxp[firstNeg-1], firstPos, idxp[firstPos-1]); + error(_("Item %d of i is %d and item %d is %d. Cannot mix positives and negatives."), firstNeg, idxp[firstNeg-1], firstPos, idxp[firstPos-1]); } if (countNeg && countNA) { int i=0, firstNeg=0, firstNA=0; @@ -168,7 +168,7 @@ SEXP convertNegAndZeroIdx(SEXP idx, SEXP maxArg, SEXP allowOverMax) if (firstNA==0 && elem==NA_INTEGER) firstNA=i+1; i++; } - error("Item %d of i is %d and item %d is NA. Cannot mix negatives and NA.", firstNeg, idxp[firstNeg-1], firstNA); + error(_("Item %d of i is %d and item %d is NA. Cannot mix negatives and NA."), firstNeg, idxp[firstNeg-1], firstNA); } SEXP ans; @@ -220,15 +220,15 @@ SEXP convertNegAndZeroIdx(SEXP idx, SEXP maxArg, SEXP allowOverMax) static void checkCol(SEXP col, int colNum, int nrow, SEXP x) { - if (isNull(col)) error("Column %d is NULL; malformed data.table.", colNum); + if (isNull(col)) error(_("Column %d is NULL; malformed data.table."), colNum); if (isNewList(col) && INHERITS(col, char_dataframe)) { SEXP names = getAttrib(x, R_NamesSymbol); - error("Column %d ['%s'] is a data.frame or data.table; malformed data.table.", + error(_("Column %d ['%s'] is a data.frame or data.table; malformed data.table."), colNum, isNull(names)?"":CHAR(STRING_ELT(names,colNum-1))); } if (length(col)!=nrow) { SEXP names = getAttrib(x, R_NamesSymbol); - error("Column %d ['%s'] is length %d but column 1 is length %d; malformed data.table.", + error(_("Column %d ['%s'] is length %d but column 1 is length %d; malformed data.table."), colNum, isNull(names)?"":CHAR(STRING_ELT(names,colNum-1)), length(col), nrow); } } @@ -244,7 +244,7 @@ static void checkCol(SEXP col, int colNum, int nrow, SEXP x) SEXP subsetDT(SEXP x, SEXP rows, SEXP cols) { int nprotect=0; - if (!isNewList(x)) error("Internal error. Argument 'x' to CsubsetDT is type '%s' not 'list'", type2char(TYPEOF(rows))); // # nocov + if (!isNewList(x)) error(_("Internal error. Argument 'x' to CsubsetDT is type '%s' not 'list'"), type2char(TYPEOF(rows))); // # nocov if (!length(x)) return(x); // return empty list const int nrow = length(VECTOR_ELT(x,0)); @@ -257,10 +257,10 @@ SEXP subsetDT(SEXP x, SEXP rows, SEXP cols) { if (err!=NULL) error(err); } - if (!isInteger(cols)) error("Internal error. Argument 'cols' to Csubset is type '%s' not 'integer'", type2char(TYPEOF(cols))); // # nocov + if (!isInteger(cols)) error(_("Internal error. Argument 'cols' to Csubset is type '%s' not 'integer'"), type2char(TYPEOF(cols))); // # nocov for (int i=0; iLENGTH(x)) error("Item %d of 'cols' is %d which is outside 1-based range [1,ncol(x)=%d]", i+1, this, LENGTH(x)); + if (this<1 || this>LENGTH(x)) error(_("Item %d of 'cols' is %d which is outside 1-based range [1,ncol(x)=%d]"), i+1, this, LENGTH(x)); } int overAlloc = checkOverAlloc(GetOption(install("datatable.alloccol"), R_NilValue)); @@ -334,9 +334,9 @@ SEXP subsetVector(SEXP x, SEXP idx) { // idx is 1-based passed from R level bool anyNA=false, orderedSubset=false; int nprotect=0; if (isNull(x)) - error("Internal error: NULL can not be subset. It is invalid for a data.table to contain a NULL column."); // # nocov + error(_("Internal error: NULL can not be subset. It is invalid for a data.table to contain a NULL column.")); // # nocov if (check_idx(idx, length(x), &anyNA, &orderedSubset) != NULL) - error("Internal error: CsubsetVector is internal-use-only but has received negatives, zeros or out-of-range"); // # nocov + error(_("Internal error: CsubsetVector is internal-use-only but has received negatives, zeros or out-of-range")); // # nocov SEXP ans = PROTECT(allocVector(TYPEOF(x), length(idx))); nprotect++; copyMostAttrib(x, ans); subsetVectorRaw(ans, x, idx, anyNA); diff --git a/src/transpose.c b/src/transpose.c index 6f6acc1a38..aa52303ac6 100644 --- a/src/transpose.c +++ b/src/transpose.c @@ -6,17 +6,17 @@ SEXP transpose(SEXP l, SEXP fill, SEXP ignoreArg, SEXP keepNamesArg) { int nprotect=0; if (!isNewList(l)) - error("l must be a list."); + error(_("l must be a list.")); if (!length(l)) return(copyAsPlain(l)); if (!isLogical(ignoreArg) || LOGICAL(ignoreArg)[0]==NA_LOGICAL) - error("ignore.empty should be logical TRUE/FALSE."); + error(_("ignore.empty should be logical TRUE/FALSE.")); bool ignore = LOGICAL(ignoreArg)[0]; if (!(isNull(keepNamesArg) || (isString(keepNamesArg) && LENGTH(keepNamesArg)==1))) - error("keep.names should be either NULL, or the name of the first column of the result in which to place the names of the input"); + error(_("keep.names should be either NULL, or the name of the first column of the result in which to place the names of the input")); bool rn = !isNull(keepNamesArg); if (length(fill) != 1) - error("fill must be a length 1 vector, such as the default NA"); + error(_("fill must be a length 1 vector, such as the default NA")); R_len_t ln = LENGTH(l); // preprocessing @@ -25,7 +25,7 @@ SEXP transpose(SEXP l, SEXP fill, SEXP ignoreArg, SEXP keepNamesArg) { for (int i=0; imaxlen) maxlen=len; zerolen += (len==0); @@ -85,7 +85,7 @@ SEXP transpose(SEXP l, SEXP fill, SEXP ignoreArg, SEXP keepNamesArg) { } } break; default : - error("Unsupported column type '%s'", type2char(maxtype)); + error(_("Unsupported column type '%s'"), type2char(maxtype)); } UNPROTECT(1); // inside the loop to save the protection stack k++; diff --git a/src/types.c b/src/types.c index cbcf55c306..93742a7a0e 100644 --- a/src/types.c +++ b/src/types.c @@ -20,7 +20,7 @@ void ansMsg(ans_t *ans, int n, bool verbose, const char *func) { if (ans[i].message[2][0] != '\0') warning("%s: %d:\n%s", func, i+1, ans[i].message[2]); if (ans[i].status == 3) - error("%s: %d:\n%s:", func, i+1, ans[i].message[3]); + error(_("%s: %d:\n%s:"), func, i+1, ans[i].message[3]); } } @@ -52,7 +52,7 @@ void testRaiseMsg(ans_t *ans, int istatus, bool verbose) { } SEXP testMsgR(SEXP status, SEXP x, SEXP k) { if (!isInteger(status) || !isInteger(x) || !isInteger(k)) - error("internal error: status, nx, nk must be integer"); // # nocov + error(_("internal error: status, nx, nk must be integer")); // # nocov int protecti = 0; const bool verbose = GetVerbose(); int istatus = INTEGER(status)[0], nx = INTEGER(x)[0], nk = INTEGER(k)[0]; diff --git a/src/uniqlist.c b/src/uniqlist.c index e2fe01d8bb..dd1484cdf7 100644 --- a/src/uniqlist.c +++ b/src/uniqlist.c @@ -11,12 +11,12 @@ SEXP uniqlist(SEXP l, SEXP order) // (maximum length the number of rows) and the length returned in anslen. // No NA in order which is guaranteed since internal-only. Used at R level internally (Cuniqlist) but is not and should not be exported. // DONE: ans is now grown - if (!isNewList(l)) error("Internal error: uniqlist has not been passed a list of columns"); // # nocov + if (!isNewList(l)) error(_("Internal error: uniqlist has not been passed a list of columns")); // # nocov R_len_t ncol = length(l); R_len_t nrow = length(VECTOR_ELT(l,0)); - if (!isInteger(order)) error("Internal error: uniqlist has been passed a non-integer order"); // # nocov - if (LENGTH(order)<1) error("Internal error: uniqlist has been passed a length-0 order"); // # nocov - if (LENGTH(order)>1 && LENGTH(order)!=nrow) error("Internal error: uniqlist has been passed length(order)==%d but nrow==%d", LENGTH(order), nrow); // # nocov + if (!isInteger(order)) error(_("Internal error: uniqlist has been passed a non-integer order")); // # nocov + if (LENGTH(order)<1) error(_("Internal error: uniqlist has been passed a length-0 order")); // # nocov + if (LENGTH(order)>1 && LENGTH(order)!=nrow) error(_("Internal error: uniqlist has been passed length(order)==%d but nrow==%d"), LENGTH(order), nrow); // # nocov bool via_order = INTEGER(order)[0] != -1; // has an ordering vector been passed in that we have to hop via? Don't use MISSING() here as it appears unstable on Windows unsigned long long *ulv; // for numeric check speed-up @@ -93,7 +93,7 @@ SEXP uniqlist(SEXP l, SEXP order) } } break; default : - error("Type '%s' not supported", type2char(TYPEOF(v))); // # nocov + error(_("Type '%s' not supported"), type2char(TYPEOF(v))); // # nocov } } else { // ncol>1 @@ -124,7 +124,7 @@ SEXP uniqlist(SEXP l, SEXP order) } break; default : - error("Type '%s' not supported", type2char(TYPEOF(v))); // # nocov + error(_("Type '%s' not supported"), type2char(TYPEOF(v))); // # nocov } } if (!b) { @@ -145,8 +145,8 @@ SEXP uniqlist(SEXP l, SEXP order) SEXP uniqlengths(SEXP x, SEXP n) { // seems very similar to rbindlist.c:uniq_lengths. TODO: centralize into common function - if (TYPEOF(x) != INTSXP) error("Input argument 'x' to 'uniqlengths' must be an integer vector"); - if (TYPEOF(n) != INTSXP || length(n) != 1) error("Input argument 'n' to 'uniqlengths' must be an integer vector of length 1"); + if (TYPEOF(x) != INTSXP) error(_("Input argument 'x' to 'uniqlengths' must be an integer vector")); + if (TYPEOF(n) != INTSXP || length(n) != 1) error(_("Input argument 'n' to 'uniqlengths' must be an integer vector of length 1")); R_len_t len = length(x); SEXP ans = PROTECT(allocVector(INTSXP, len)); for (R_len_t i=1; i= 1"); + if (!isInteger(cols) || lencols==0) error(_("cols must be an integer vector with length >= 1")); int *icols = INTEGER(cols); for (int i=0; incol) error("Item %d of cols is %d which is outside range of l [1,length(l)=%d]", i+1, elem, ncol); + if (elem<1 || elem>ncol) error(_("Item %d of cols is %d which is outside range of l [1,length(l)=%d]"), i+1, elem, ncol); } for (int i=1; i0); SEXP v, ans; - if (!isNewList(l) || length(l) < 1) error("Internal error: nestedid was not passed a list length 1 or more"); // # nocov + if (!isNewList(l) || length(l) < 1) error(_("Internal error: nestedid was not passed a list length 1 or more")); // # nocov R_len_t nrows = length(VECTOR_ELT(l,0)), ncols = length(cols); if (nrows==0) return(allocVector(INTSXP, 0)); R_len_t thisi, previ, ansgrpsize=1000, nansgrp=0; R_len_t *ansgrp = Calloc(ansgrpsize, R_len_t), starts, grplen; // #3401 fix. Needs to be Calloc due to Realloc below .. else segfaults. R_len_t ngrps = length(grps); bool *i64 = (bool *)R_alloc(ncols, sizeof(bool)); - if (ngrps==0) error("Internal error: nrows[%d]>0 but ngrps==0", nrows); // # nocov + if (ngrps==0) error(_("Internal error: nrows[%d]>0 but ngrps==0"), nrows); // # nocov R_len_t resetctr=0, rlen = length(resetvals) ? INTEGER(resetvals)[0] : 0; - if (!isInteger(cols) || ncols == 0) error("cols must be an integer vector of positive length"); + if (!isInteger(cols) || ncols == 0) error(_("cols must be an integer vector of positive length")); // mult arg enum {ALL, FIRST, LAST} mult = ALL; if (!strcmp(CHAR(STRING_ELT(multArg, 0)), "all")) mult = ALL; else if (!strcmp(CHAR(STRING_ELT(multArg, 0)), "first")) mult = FIRST; else if (!strcmp(CHAR(STRING_ELT(multArg, 0)), "last")) mult = LAST; - else error("Internal error: invalid value for 'mult'. please report to data.table issue tracker"); // # nocov + else error(_("Internal error: invalid value for 'mult'. please report to data.table issue tracker")); // # nocov // integer64 for (int j=0; j= dtwiddle(xd, previ); } break; default: - error("Type '%s' not supported", type2char(TYPEOF(v))); // # nocov + error(_("Type '%s' not supported"), type2char(TYPEOF(v))); // # nocov } } if (b) break; @@ -346,8 +346,8 @@ SEXP nestedid(SEXP l, SEXP cols, SEXP order, SEXP grps, SEXP resetvals, SEXP mul SEXP uniqueNlogical(SEXP x, SEXP narmArg) { // single pass; short-circuit and return as soon as all 3 values are found - if (!isLogical(x)) error("x is not a logical vector"); - if (!isLogical(narmArg) || length(narmArg)!=1 || INTEGER(narmArg)[0]==NA_INTEGER) error("na.rm must be TRUE or FALSE"); + if (!isLogical(x)) error(_("x is not a logical vector")); + if (!isLogical(narmArg) || length(narmArg)!=1 || INTEGER(narmArg)[0]==NA_INTEGER) error(_("na.rm must be TRUE or FALSE")); bool narm = LOGICAL(narmArg)[0]==1; const R_xlen_t n = xlength(x); if (n==0) diff --git a/src/utils.c b/src/utils.c index 77af6f0df2..7a455826d7 100644 --- a/src/utils.c +++ b/src/utils.c @@ -70,7 +70,7 @@ bool allNA(SEXP x, bool errorForBadType) { return true; }} if (!errorForBadType) return false; - error("Unsupported type '%s' passed to allNA()", type2char(TYPEOF(x))); // e.g. VECSXP; tests 2116.16-18 + error(_("Unsupported type '%s' passed to allNA()"), type2char(TYPEOF(x))); // e.g. VECSXP; tests 2116.16-18 // turned off allNA list support for now to avoid accidentally using it internally where we did not intend; allNA not yet exported // https://github.com/Rdatatable/data.table/pull/3909#discussion_r329065950 } @@ -89,9 +89,9 @@ SEXP allNAR(SEXP x) { */ SEXP colnamesInt(SEXP x, SEXP cols, SEXP check_dups) { if (!isNewList(x)) - error("'x' argument must be data.table compatible"); + error(_("'x' argument must be data.table compatible")); if (!IS_TRUE_OR_FALSE(check_dups)) - error("'check_dups' argument must be TRUE or FALSE"); + error(_("'check_dups' argument must be TRUE or FALSE")); int protecti = 0; R_len_t nx = length(x); R_len_t nc = length(cols); @@ -107,35 +107,35 @@ SEXP colnamesInt(SEXP x, SEXP cols, SEXP check_dups) { ricols = cols; } else if (isReal(cols)) { if (!isRealReallyInt(cols)) - error("argument specifying columns is type 'double' and one or more items in it are not whole integers"); + error(_("argument specifying columns is type 'double' and one or more items in it are not whole integers")); ricols = PROTECT(coerceVector(cols, INTSXP)); protecti++; } int *icols = INTEGER(ricols); for (int i=0; inx) || (icols[i]<1)) - error("argument specifying columns specify non existing column(s): cols[%d]=%d", i+1, icols[i]); // handles NAs also + error(_("argument specifying columns specify non existing column(s): cols[%d]=%d"), i+1, icols[i]); // handles NAs also } } else if (isString(cols)) { SEXP xnames = PROTECT(getAttrib(x, R_NamesSymbol)); protecti++; if (isNull(xnames)) - error("'x' argument data.table has no names"); + error(_("'x' argument data.table has no names")); ricols = PROTECT(chmatch(cols, xnames, 0)); protecti++; int *icols = INTEGER(ricols); for (int i=0; ilimit) error("Join results in %d rows; more than %d = nrow(x)+nrow(i). Check for duplicate key values in i each of which join to the same group in x over and over again. If that's ok, try by=.EACHI to run j for each group to avoid the large allocation. If you are sure you wish to proceed, rerun with allow.cartesian=TRUE. Otherwise, please search for this error message in the FAQ, Wiki, Stack Overflow and data.table issue tracker for advice.", reslen, (int)limit); + if (limit<0) error(_("clamp must be positive")); + if (reslen>limit) error(_("Join results in %d rows; more than %d = nrow(x)+nrow(i). Check for duplicate key values in i each of which join to the same group in x over and over again. If that's ok, try by=.EACHI to run j for each group to avoid the large allocation. If you are sure you wish to proceed, rerun with allow.cartesian=TRUE. Otherwise, please search for this error message in the FAQ, Wiki, Stack Overflow and data.table issue tracker for advice."), reslen, (int)limit); } SEXP ans = PROTECT(allocVector(INTSXP, reslen)); int *ians = INTEGER(ans); diff --git a/src/wrappers.c b/src/wrappers.c index af9ac39ccf..272355b35e 100644 --- a/src/wrappers.c +++ b/src/wrappers.c @@ -8,12 +8,12 @@ SEXP setattrib(SEXP x, SEXP name, SEXP value) { - if (!isString(name) || LENGTH(name)!=1) error("Attribute name must be a character vector of length 1"); + if (!isString(name) || LENGTH(name)!=1) error(_("Attribute name must be a character vector of length 1")); if (!isNewList(x) && strcmp(CHAR(STRING_ELT(name,0)),"class")==0 && isString(value) && LENGTH(value)>0 && (strcmp(CHAR(STRING_ELT(value, 0)),"data.table")==0 || strcmp(CHAR(STRING_ELT(value,0)),"data.frame")==0) ) { - error("Internal structure doesn't seem to be a list. Can't set class to be 'data.table' or 'data.frame'. Use 'as.data.table()' or 'as.data.frame()' methods instead."); + error(_("Internal structure doesn't seem to be a list. Can't set class to be 'data.table' or 'data.frame'. Use 'as.data.table()' or 'as.data.frame()' methods instead.")); } if (isLogical(x) && LENGTH(x)==1 && (x==ScalarLogical(TRUE) || x==ScalarLogical(FALSE) || x==ScalarLogical(NA_LOGICAL))) { // R's internal globals, #1281 @@ -56,10 +56,10 @@ SEXP setlistelt(SEXP l, SEXP i, SEXP value) { R_len_t i2; // Internal use only. So that := can update elements of a list of data.table, #2204. Just needed to overallocate/grow the VECSXP. - if (!isNewList(l)) error("First argument to setlistelt must be a list()"); - if (!isInteger(i) || LENGTH(i)!=1) error("Second argument to setlistelt must a length 1 integer vector"); + if (!isNewList(l)) error(_("First argument to setlistelt must be a list()")); + if (!isInteger(i) || LENGTH(i)!=1) error(_("Second argument to setlistelt must a length 1 integer vector")); i2 = INTEGER(i)[0]; - if (LENGTH(l) < i2 || i2<1) error("i (%d) is outside the range of items [1,%d]",i2,LENGTH(l)); + if (LENGTH(l) < i2 || i2<1) error(_("i (%d) is outside the range of items [1,%d]"),i2,LENGTH(l)); SET_VECTOR_ELT(l, i2-1, value); return(R_NilValue); } @@ -81,7 +81,7 @@ SEXP expandAltRep(SEXP x) // At R level (for example [.data.table) we use and benefit from altrep vectors very much. It's just as columns that we expand them. // See extensive discussion in issue #2866 - if (TYPEOF(x) != VECSXP) error("x isn't a VECSXP"); + if (TYPEOF(x) != VECSXP) error(_("x isn't a VECSXP")); for (int i=0; i Date: Wed, 16 Oct 2019 00:45:25 +0800 Subject: [PATCH 04/22] adding warning()s from C --- src/assign.c | 18 +++++++++--------- src/dogroups.c | 4 ++-- src/fmelt.c | 4 ++-- src/fread.c | 2 +- src/freadR.c | 2 +- src/fwriteR.c | 2 +- src/gsumm.c | 14 +++++++------- src/openmp-utils.c | 4 ++-- src/rbindlist.c | 17 ++++++++--------- src/subset.c | 4 ++-- src/types.c | 2 +- 11 files changed, 36 insertions(+), 37 deletions(-) diff --git a/src/assign.c b/src/assign.c index cb9909d6ac..4595fa979f 100644 --- a/src/assign.c +++ b/src/assign.c @@ -216,7 +216,7 @@ SEXP alloccol(SEXP dt, R_len_t n, Rboolean verbose) // R <= 2.13.2 and we didn't catch uninitialized tl somehow if (tl<0) error(_("Internal error, tl of class is marked but tl<0.")); // # nocov if (tl>0 && tll+10000) warning("tl (%d) is greater than 10,000 items over-allocated (l = %d). If you didn't set the datatable.alloccol option to be very large, please report to data.table issue tracker including the result of sessionInfo().",tl,l); + if (tl>l+10000) warning(_("tl (%d) is greater than 10,000 items over-allocated (l = %d). If you didn't set the datatable.alloccol option to be very large, please report to data.table issue tracker including the result of sessionInfo()."),tl,l); if (n>tl) return(shallow(dt,R_NilValue,n)); // usual case (increasing alloc) if (n=length(newcolnames)) error(_("Internal error in assign.c: length(newcolnames)=%d, length(names)=%d, coln=%d"), length(newcolnames), length(names), coln); // # nocov if (isNull(thisvalue)) { - warning("Column '%s' does not exist to remove",CHAR(STRING_ELT(newcolnames,newcolnum))); + warning(_("Column '%s' does not exist to remove"),CHAR(STRING_ELT(newcolnames,newcolnum))); continue; } // RHS of assignment to new column is zero length but we'll use its type to create all-NA column of that type } if (isMatrix(thisvalue) && (j=INTEGER(getAttrib(thisvalue, R_DimSymbol))[1]) > 1) // matrix passes above (considered atomic vector) - warning("%d column matrix RHS of := will be treated as one vector", j); + warning(_("%d column matrix RHS of := will be treated as one vector"), j); const SEXP existing = (coln+1)<=oldncol ? VECTOR_ELT(dt,coln) : R_NilValue; if (isFactor(existing) && !isString(thisvalue) && TYPEOF(thisvalue)!=INTSXP && TYPEOF(thisvalue)!=LGLSXP && !isReal(thisvalue) && !isNewList(thisvalue)) { // !=INTSXP includes factor @@ -451,7 +451,7 @@ SEXP assign(SEXP dt, SEXP rows, SEXP cols, SEXP newcolnames, SEXP values) if (oldtncol==0) error(_("This data.table has either been loaded from disk (e.g. using readRDS()/load()) or constructed manually (e.g. using structure()). Please run setDT() or setalloccol() on it first (to pre-allocate space for new columns) before assigning by reference to it.")); // #2996 error(_("Internal error: oldtncol(%d) < oldncol(%d). Please report to data.table issue tracker, including result of sessionInfo()."), oldtncol, oldncol); // # nocov } - if (oldtncol>oldncol+10000L) warning("truelength (%d) is greater than 10,000 items over-allocated (length = %d). See ?truelength. If you didn't set the datatable.alloccol option very large, please report to data.table issue tracker including the result of sessionInfo().",oldtncol, oldncol); + if (oldtncol>oldncol+10000L) warning(_("truelength (%d) is greater than 10,000 items over-allocated (length = %d). See ?truelength. If you didn't set the datatable.alloccol option very large, please report to data.table issue tracker including the result of sessionInfo()."),oldtncol, oldncol); if (oldtncol < oldncol+LENGTH(newcolnames)) error(_("Internal error: DT passed to assign has not been allocated enough column slots. l=%d, tl=%d, adding %d"), oldncol, oldtncol, LENGTH(newcolnames)); // # nocov if (!selfrefnamesok(dt,verbose)) @@ -830,7 +830,7 @@ const char *memrecycle(SEXP target, SEXP where, int start, int len, SEXP source, } } } else if (isString(source) && !isString(target) && !isNewList(target)) { - warning("Coercing 'character' RHS to '%s' to match the type of the target column (column %d named '%s').", + warning(_("Coercing 'character' RHS to '%s' to match the type of the target column (column %d named '%s')."), type2char(TYPEOF(target)), colnum, colname); // this "Coercing ..." warning first to give context in case coerceVector warns 'NAs introduced by coercion' source = PROTECT(coerceVector(source, TYPEOF(target))); protecti++; @@ -841,7 +841,7 @@ const char *memrecycle(SEXP target, SEXP where, int start, int len, SEXP source, } // as in base R; e.g. let as.double(list(1,2,3)) work but not as.double(list(1,c(2,4),3)) // relied on by NNS, simstudy and table.express; tests 1294.* - warning("Coercing 'list' RHS to '%s' to match the type of the target column (column %d named '%s').", + warning(_("Coercing 'list' RHS to '%s' to match the type of the target column (column %d named '%s')."), type2char(TYPEOF(target)), colnum, colname); source = PROTECT(coerceVector(source, TYPEOF(target))); protecti++; } else if ((TYPEOF(target)!=TYPEOF(source) || targetIsI64!=sourceIsI64) && !isNewList(target)) { diff --git a/src/dogroups.c b/src/dogroups.c index 568b0286b1..3056d49473 100644 --- a/src/dogroups.c +++ b/src/dogroups.c @@ -316,7 +316,7 @@ SEXP dogroups(SEXP dt, SEXP dtcols, SEXP groups, SEXP grpcols, SEXP jiscols, SEX const char *warn = memrecycle(target, order, INTEGER(starts)[i]-1, grpn, RHS, 0, ""); // can't error here because length mismatch already checked for all jval columns before starting to add any new columns if (warn) - warning("Group %d column '%s': %s", i+1, CHAR(STRING_ELT(dtnames,INTEGER(lhs)[j]-1)), warn); + warning(_("Group %d column '%s': %s"), i+1, CHAR(STRING_ELT(dtnames,INTEGER(lhs)[j]-1)), warn); } UNPROTECT(1); // jval continue; @@ -416,7 +416,7 @@ SEXP dogroups(SEXP dt, SEXP dtcols, SEXP groups, SEXP grpcols, SEXP jiscols, SEX // including NULL and typed empty vectors, fill with NA // A NULL in the first group's jval isn't allowed; caught above after allocating ans if (!NullWarnDone && maxn>1) { // maxn==1 in tests 172,280,281,282,403,405 and 406 - warning("Item %d of j's result for group %d is zero length. This will be filled with %d NAs to match the longest column in this result. Later groups may have a similar problem but only the first is reported to save filling the warning buffer.", j+1, i+1, maxn); + warning(_("Item %d of j's result for group %d is zero length. This will be filled with %d NAs to match the longest column in this result. Later groups may have a similar problem but only the first is reported to save filling the warning buffer."), j+1, i+1, maxn); NullWarnDone = TRUE; } writeNA(target, thisansloc, maxn); diff --git a/src/fmelt.c b/src/fmelt.c index bbd616f81d..2311d54948 100644 --- a/src/fmelt.c +++ b/src/fmelt.c @@ -145,7 +145,7 @@ SEXP checkVars(SEXP DT, SEXP id, SEXP measure, Rboolean verbose) { } valuecols = PROTECT(allocVector(VECSXP, 1)); protecti++; SET_VECTOR_ELT(valuecols, 0, tmp); - warning("id.vars and measure.vars are internally guessed when both are 'NULL'. All non-numeric/integer/logical type columns are considered id.vars, which in this case are columns [%s]. Consider providing at least one of 'id' or 'measure' vars in future.", CHAR(STRING_ELT(concat(dtnames, idcols), 0))); + warning(_("id.vars and measure.vars are internally guessed when both are 'NULL'. All non-numeric/integer/logical type columns are considered id.vars, which in this case are columns [%s]. Consider providing at least one of 'id' or 'measure' vars in future."), CHAR(STRING_ELT(concat(dtnames, idcols), 0))); } else if (!isNull(id) && isNull(measure)) { switch(TYPEOF(id)) { case STRSXP : PROTECT(tmp = chmatch(id, dtnames, 0)); protecti++; break; @@ -382,7 +382,7 @@ SEXP getvaluecols(SEXP DT, SEXP dtnames, Rboolean valfactor, Rboolean verbose, s for (int i=0; ilvalues; ++i) { SEXP thisvaluecols = VECTOR_ELT(data->valuecols, i); if (!data->isidentical[i]) - warning("'measure.vars' [%s] are not all of the same type. By order of hierarchy, the molten data value column will be of type '%s'. All measure variables not of type '%s' will be coerced too. Check DETAILS in ?melt.data.table for more on coercion.\n", CHAR(STRING_ELT(concat(dtnames, thisvaluecols), 0)), type2char(data->maxtype[i]), type2char(data->maxtype[i])); + warning(_("'measure.vars' [%s] are not all of the same type. By order of hierarchy, the molten data value column will be of type '%s'. All measure variables not of type '%s' will be coerced too. Check DETAILS in ?melt.data.table for more on coercion.\n"), CHAR(STRING_ELT(concat(dtnames, thisvaluecols), 0)), type2char(data->maxtype[i]), type2char(data->maxtype[i])); if (data->maxtype[i] == VECSXP && data->narm) { if (verbose) Rprintf("The molten data value type is a list at item %d. 'na.rm=TRUE' is ignored.\n", i+1); data->narm = FALSE; diff --git a/src/fread.c b/src/fread.c index bb885eb088..d46fe2f5aa 100644 --- a/src/fread.c +++ b/src/fread.c @@ -188,7 +188,7 @@ static inline int64_t clamp_szt(int64_t x, int64_t lower, int64_t upper) { * Parameter `limit` cannot exceed 500. * The data might contain % characters. Therefore, careful to ensure that if the msg * is constructed manually (using say snprintf) that warning(), stop() - * and Rprintf() are all called as warning("%s", msg) and not warning(msg). + * and Rprintf() are all called as warning(_("%s"), msg) and not warning(msg). */ static const char* strlim(const char *ch, size_t limit) { static char buf[1002]; diff --git a/src/freadR.c b/src/freadR.c index 6b832fc710..8e3b1b8d4b 100644 --- a/src/freadR.c +++ b/src/freadR.c @@ -654,7 +654,7 @@ void __halt(bool warn, const char *format, ...) { vsnprintf(msg, 2000, format, args); va_end(args); freadCleanup(); // this closes mmp hence why we just copied substrings from mmp to msg[] first since mmp is now invalid - // if (warn) warning("%s", msg); + // if (warn) warning(_("%s"), msg); // this warning() call doesn't seem to honor warn=2 straight away in R 3.6, so now always call error() directly to be sure // we were going via warning() before to get the (converted from warning) prefix in the message (which we could mimic in future) error(_("%s"), msg); // include "%s" because data in msg might include '%' diff --git a/src/fwriteR.c b/src/fwriteR.c index 75b4510709..c3644dc048 100644 --- a/src/fwriteR.c +++ b/src/fwriteR.c @@ -176,7 +176,7 @@ SEXP fwriteR( args.filename = CHAR(STRING_ELT(filename_Arg, 0)); args.ncol = length(DF); if (args.ncol==0) { - warning("fwrite was passed an empty list of no columns. Nothing to write."); + warning(_("fwrite was passed an empty list of no columns. Nothing to write.")); return R_NilValue; } args.nrow = length(VECTOR_ELT(DF, 0)); diff --git a/src/gsumm.c b/src/gsumm.c index 29a43c4d95..3cd17d685d 100644 --- a/src/gsumm.c +++ b/src/gsumm.c @@ -401,7 +401,7 @@ SEXP gsum(SEXP x, SEXP narmArg, SEXP warnOverflowArg) //Rprintf("gsum int took %.3f\n", wallclock()-started); if (overflow) { UNPROTECT(1); // discard the result with overflow - if (warnOverflow) warning("The sum of an integer column for a group was more than type 'integer' can hold so the result has been coerced to 'numeric' automatically for convenience."); + if (warnOverflow) warning(_("The sum of an integer column for a group was more than type 'integer' can hold so the result has been coerced to 'numeric' automatically for convenience.")); ans = PROTECT(allocVector(REALSXP, ngrp)); double *restrict ansp = REAL(ans); memset(ansp, 0, ngrp*sizeof(double)); @@ -714,7 +714,7 @@ SEXP gmin(SEXP x, SEXP narm) } for (i=0; iINT_MAX) { - warning("Ignoring invalid %s==\"%s\". Not an integer >= 1. Please remove any characters that are not a digit [0-9]. See ?data.table::setDTthreads.", name, val); + warning(_("Ignoring invalid %s==\")%s\". Not an integer >= 1. Please remove any characters that are not a digit [0-9]. See ?data.table::setDTthreads.", name, val); return def; } return (int)ans; @@ -37,7 +37,7 @@ void initDTthreads() { int perc = getIntEnv("R_DATATABLE_NUM_PROCS_PERCENT", 50); // use "NUM_PROCS" to use the same name as the OpenMP function this uses // 50% of logical CPUs by default; half of 8 is 4 on laptop with 4 cores. Leaves plenty of room for other processes: #3395 & #3298 if (perc<=1 || perc>100) { - warning("Ignoring invalid R_DATATABLE_NUM_PROCS_PERCENT==%d. If used it must be an integer between 2 and 100. Default is 50. See ?setDTtheads.", perc); + warning(_("Ignoring invalid R_DATATABLE_NUM_PROCS_PERCENT==%d. If used it must be an integer between 2 and 100. Default is 50. See ?setDTtheads."), perc); // not allowing 1 is to catch attempts to use 1 or 1.0 to represent 100%. perc = 50; } diff --git a/src/rbindlist.c b/src/rbindlist.c index e12d1df8e5..ee9bf56388 100644 --- a/src/rbindlist.c +++ b/src/rbindlist.c @@ -13,7 +13,7 @@ SEXP rbindlist(SEXP l, SEXP usenamesArg, SEXP fillArg, SEXP idcolArg) Rboolean usenames = LOGICAL(usenamesArg)[0]; const bool fill = LOGICAL(fillArg)[0]; if (fill && usenames!=TRUE) { - if (usenames==FALSE) warning("use.names= cannot be FALSE when fill is TRUE. Setting use.names=TRUE."); // else no warning if usenames==NA (default) + if (usenames==FALSE) warning(_("use.names= cannot be FALSE when fill is TRUE. Setting use.names=TRUE.")); // else no warning if usenames==NA (default) usenames=TRUE; } const bool idcol = !isNull(idcolArg); @@ -55,7 +55,7 @@ SEXP rbindlist(SEXP l, SEXP usenamesArg, SEXP fillArg, SEXP idcolArg) if (numZero) { // #1871 SEXP names = getAttrib(VECTOR_ELT(l, firstZeroItem), R_NamesSymbol); const char *ch = names==R_NilValue ? "" : CHAR(STRING_ELT(names, firstZeroCol)); - warning("Column %d ['%s'] of item %d is length 0. This (and %d other%s like it) has been filled with NA (NULL for list columns) to make each item uniform.", + warning(_("Column %d ['%s'] of item %d is length 0. This (and %d other%s like it) has been filled with NA (NULL for list columns) to make each item uniform."), firstZeroCol+1, ch, firstZeroItem+1, numZero-1, numZero==2?"":"s"); } if (nrow==0 && ncol==0) return(R_NilValue); @@ -207,7 +207,7 @@ SEXP rbindlist(SEXP l, SEXP usenamesArg, SEXP fillArg, SEXP idcolArg) SEXP s = getAttrib(VECTOR_ELT(l, i), R_NamesSymbol); int w2 = colMap[i*ncol + j]; const char *str = isString(s) ? CHAR(STRING_ELT(s,w2)) : ""; - snprintf(buff, 1000, "Column %d ['%s'] of item %d is missing in item %d. Use fill=TRUE to fill with NA (NULL for list columns), or use.names=FALSE to ignore column names.%s", + snprintf(buff, 1000, _("Column %d ['%s'] of item %d is missing in item %d. Use fill=TRUE to fill with NA (NULL for list columns), or use.names=FALSE to ignore column names.%s"), w2+1, str, i+1, missi+1, extra ); if (usenames==TRUE) error(buff); i = LENGTH(l); // break from outer i loop @@ -216,7 +216,7 @@ SEXP rbindlist(SEXP l, SEXP usenamesArg, SEXP fillArg, SEXP idcolArg) if (w!=j && usenames==NA_LOGICAL) { SEXP s = getAttrib(VECTOR_ELT(l, i), R_NamesSymbol); if (!isString(s) || i==0) error(_("Internal error: usenames==NA but an out-of-order name has been found in an item with no names or the first item. [%d]"), i); - snprintf(buff, 1000, "Column %d ['%s'] of item %d appears in position %d in item %d. Set use.names=TRUE to match by column name, or use.names=FALSE to ignore column names.%s", + snprintf(buff, 1000, _("Column %d ['%s'] of item %d appears in position %d in item %d. Set use.names=TRUE to match by column name, or use.names=FALSE to ignore column names.%s"), w+1, CHAR(STRING_ELT(s,w)), i+1, j+1, i, extra); i = LENGTH(l); break; @@ -225,14 +225,14 @@ SEXP rbindlist(SEXP l, SEXP usenamesArg, SEXP fillArg, SEXP idcolArg) if (buff[0]) { SEXP opt = GetOption(install("datatable.rbindlist.check"), R_NilValue); if (!isNull(opt) && !(isString(opt) && length(opt)==1)) { - warning("options()$datatable.rbindlist.check is set but is not a single string. See news item 5 in v1.12.2."); + warning(_("options()$datatable.rbindlist.check is set but is not a single string. See news item 5 in v1.12.2.")); opt = R_NilValue; } const char *o = isNull(opt) ? "message" : CHAR(STRING_ELT(opt,0)); if (strcmp(o,"message")==0) { eval(PROTECT(lang2(install("message"),PROTECT(ScalarString(mkChar(buff))))), R_GlobalEnv); UNPROTECT(2); } else if (strcmp(o,"warning")==0) warning(buff); else if (strcmp(o,"error")==0) error(buff); - else if (strcmp(o,"none")!=0) warning("options()$datatable.rbindlist.check=='%s' which is not 'message'|'warning'|'error'|'none'. See news item 5 in v1.12.2.", o); + else if (strcmp(o,"none")!=0) warning(_("options()$datatable.rbindlist.check=='%s' which is not 'message'|'warning'|'error'|'none'. See news item 5 in v1.12.2."), o); } } } @@ -328,7 +328,7 @@ SEXP rbindlist(SEXP l, SEXP usenamesArg, SEXP fillArg, SEXP idcolArg) if (!factor) copyMostAttrib(firstCol, target); // all but names,dim and dimnames; mainly for class. And if so, we want a copy here, not keepattr's SET_ATTRIB. if (factor && anyNotStringOrFactor) { - // in future warn, or use list column instead ... warning("Column %d contains a factor but not all items for the column are character or factor", idcol+j+1); + // in future warn, or use list column instead ... warning(_("Column %d contains a factor but not all items for the column are character or factor"), idcol+j+1); // some coercing from (likely) integer/numeric to character will be needed. But this coerce can feasibly fail with out-of-memory, so we have to do it up-front // before the savetl_init() because we have no hook to clean up tl if coerceVector fails. if (coercedForFactor==NULL) { coercedForFactor=PROTECT(allocVector(VECSXP, LENGTH(l))); nprotect++; } @@ -519,7 +519,7 @@ SEXP rbindlist(SEXP l, SEXP usenamesArg, SEXP fillArg, SEXP idcolArg) } // else coerces if needed within memrecycle; with a no-alloc direct coerce from 1.12.4 (PR #3909) const char *ret = memrecycle(target, R_NilValue, ansloc, thisnrow, thisCol, idcol+j+1, foundName); - if (ret) warning("Column %d of item %d: %s", w+1, i+1, ret); + if (ret) warning(_("Column %d of item %d: %s"), w+1, i+1, ret); // e.g. when precision is lost like assigning 3.4 to integer64; test 2007.2 // TODO: but maxType should handle that and this should never warn } @@ -530,4 +530,3 @@ SEXP rbindlist(SEXP l, SEXP usenamesArg, SEXP fillArg, SEXP idcolArg) UNPROTECT(nprotect); // ans, coercedForFactor, thisCol return(ans); } - diff --git a/src/subset.c b/src/subset.c index ca4a074cd3..f7bb6db9e6 100644 --- a/src/subset.c +++ b/src/subset.c @@ -204,9 +204,9 @@ SEXP convertNegAndZeroIdx(SEXP idx, SEXP maxArg, SEXP allowOverMax) } } if (countBeyond) - warning("Item %d of i is %d but there are only %d rows. Ignoring this and %d more like it out of %d.", firstBeyond, idxp[firstBeyond-1], max, countBeyond-1, n); + warning(_("Item %d of i is %d but there are only %d rows. Ignoring this and %d more like it out of %d."), firstBeyond, idxp[firstBeyond-1], max, countBeyond-1, n); if (countDup) - warning("Item %d of i is %d which removes that item but that has occurred before. Ignoring this dup and %d other dups.", firstDup, idxp[firstDup-1], countDup-1); + warning(_("Item %d of i is %d which removes that item but that has occurred before. Ignoring this dup and %d other dups."), firstDup, idxp[firstDup-1], countDup-1); int ansn = max-countRemoved; ans = PROTECT(allocVector(INTSXP, ansn)); int *ansp = INTEGER(ans); diff --git a/src/types.c b/src/types.c index 93742a7a0e..ce451e2bcc 100644 --- a/src/types.c +++ b/src/types.c @@ -18,7 +18,7 @@ void ansMsg(ans_t *ans, int n, bool verbose, const char *func) { if (ans[i].message[1][0] != '\0') REprintf("%s: %d:\n%s", func, i+1, ans[i].message[1]); if (ans[i].message[2][0] != '\0') - warning("%s: %d:\n%s", func, i+1, ans[i].message[2]); + warning(_("%s: %d:\n%s"), func, i+1, ans[i].message[2]); if (ans[i].status == 3) error(_("%s: %d:\n%s:"), func, i+1, ans[i].message[3]); } From b987a1da362a64e2da523f681243268958895e43 Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Wed, 16 Oct 2019 00:53:40 +0800 Subject: [PATCH 05/22] C messages with DTPRINT or Rprintf --- src/assign.c | 30 +++---- src/between.c | 10 +-- src/coalesce.c | 2 +- src/dogroups.c | 16 ++-- src/fmelt.c | 12 +-- src/forder.c | 26 +++--- src/fread.c | 196 ++++++++++++++++++++++----------------------- src/freadR.c | 4 +- src/froll.c | 8 +- src/frollR.c | 12 +-- src/fsort.c | 16 ++-- src/fwrite.c | 36 ++++----- src/fwriteR.c | 4 +- src/gsumm.c | 30 +++---- src/ijoin.c | 10 +-- src/inrange.c | 4 +- src/nafill.c | 2 +- src/openmp-utils.c | 20 ++--- src/rbindlist.c | 2 +- src/types.c | 4 +- src/utils.c | 2 +- 21 files changed, 223 insertions(+), 223 deletions(-) diff --git a/src/assign.c b/src/assign.c index 4595fa979f..8e1651fdca 100644 --- a/src/assign.c +++ b/src/assign.c @@ -120,7 +120,7 @@ static int _selfrefok(SEXP x, Rboolean checkNames, Rboolean verbose) { } p = R_ExternalPtrAddr(v); if (p==NULL) { - if (verbose) Rprintf(".internal.selfref ptr is NULL. This is expected and normal for a data.table loaded from disk. Please remember to always setDT() immediately after loading to prevent unexpected behavior. If this table was not loaded from disk or you've already run setDT(), please report to data.table issue tracker.\n"); + if (verbose) Rprintf(_(".internal.selfref ptr is NULL. This is expected and normal for a data.table loaded from disk. Please remember to always setDT() immediately after loading to prevent unexpected behavior. If this table was not loaded from disk or you've already run setDT(), please report to data.table issue tracker.\n")); return -1; } if (!isNull(p)) error(_("Internal error: .internal.selfref ptr is not NULL or R_NilValue")); // # nocov @@ -218,7 +218,7 @@ SEXP alloccol(SEXP dt, R_len_t n, Rboolean verbose) if (tl>0 && tll+10000) warning(_("tl (%d) is greater than 10,000 items over-allocated (l = %d). If you didn't set the datatable.alloccol option to be very large, please report to data.table issue tracker including the result of sessionInfo()."),tl,l); if (n>tl) return(shallow(dt,R_NilValue,n)); // usual case (increasing alloc) - if (n=1) numToDo++; } - if (verbose) Rprintf("Assigning to %d row subset of %d rows\n", numToDo, nrow); + if (verbose) Rprintf(_("Assigning to %d row subset of %d rows\n"), numToDo, nrow); // TODO: include in message if any rows are assigned several times (e.g. by=.EACHI with dups in i) if (numToDo==0) { if (!length(newcolnames)) { @@ -339,7 +339,7 @@ SEXP assign(SEXP dt, SEXP rows, SEXP cols, SEXP newcolnames, SEXP values) UNPROTECT(protecti); return(dt); // all items of rows either 0 or NA. !length(newcolnames) for #759 } - if (verbose) Rprintf("Added %d new column%s initialized with all-NA\n", + if (verbose) Rprintf(_("Added %d new column%s initialized with all-NA\n"), length(newcolnames), (length(newcolnames)>1)?"s":""); } } @@ -377,12 +377,12 @@ SEXP assign(SEXP dt, SEXP rows, SEXP cols, SEXP newcolnames, SEXP values) if (any_duplicated(cols,FALSE)) error(_("Can't assign to the same column twice in the same query (duplicates detected).")); if (!isNull(newcolnames) && !isString(newcolnames)) error(_("newcolnames is supplied but isn't a character vector")); bool RHS_list_of_columns = TYPEOF(values)==VECSXP && length(cols)>1; // initial value; may be revised below - if (verbose) Rprintf("RHS_list_of_columns == %s\n", RHS_list_of_columns ? "true" : "false"); + if (verbose) Rprintf(_("RHS_list_of_columns == %s\n"), RHS_list_of_columns ? "true" : "false"); if (TYPEOF(values)==VECSXP && length(cols)==1 && length(values)==1) { SEXP item = VECTOR_ELT(values,0); if (isNull(item) || length(item)==1 || length(item)==targetlen) { RHS_list_of_columns=true; - if (verbose) Rprintf("RHS_list_of_columns revised to true because RHS list has 1 item which is NULL, or whose length %d is either 1 or targetlen (%d). Please unwrap RHS.\n", length(item), targetlen); + if (verbose) Rprintf(_("RHS_list_of_columns revised to true because RHS list has 1 item which is NULL, or whose length %d is either 1 or targetlen (%d). Please unwrap RHS.\n"), length(item), targetlen); } } if (RHS_list_of_columns) { @@ -393,7 +393,7 @@ SEXP assign(SEXP dt, SEXP rows, SEXP cols, SEXP newcolnames, SEXP values) if (length(values)==1) { // test 351.1; c("colA","colB"):=list(13:15) uses 13:15 for both columns values = VECTOR_ELT(values,0); RHS_list_of_columns = false; - if (verbose) Rprintf("Recycling single RHS list item across %d columns. Please unwrap RHS.\n", length(cols)); + if (verbose) Rprintf(_("Recycling single RHS list item across %d columns. Please unwrap RHS.\n"), length(cols)); } else { error(_("Supplied %d columns to be assigned %d items. Please see NEWS for v1.12.2."), length(cols), length(values)); } @@ -481,12 +481,12 @@ SEXP assign(SEXP dt, SEXP rows, SEXP cols, SEXP newcolnames, SEXP values) (TYPEOF(values)!=VECSXP && i>0) // assigning the same values to a second column. Have to ensure a copy #2540 ) { if (verbose) { - Rprintf("RHS for item %d has been duplicated because NAMED==%d MAYBE_SHARED==%d, but then is being plonked. length(values)==%d; length(cols)==%d)\n", + Rprintf(_("RHS for item %d has been duplicated because NAMED==%d MAYBE_SHARED==%d, but then is being plonked. length(values)==%d; length(cols)==%d)\n"), i+1, NAMED(thisvalue), MAYBE_SHARED(thisvalue), length(values), length(cols)); } thisvalue = copyAsPlain(thisvalue); // PROTECT not needed as assigned as element to protected list below. } else { - if (verbose) Rprintf("Direct plonk of unnamed RHS, no copy. NAMED==%d, MAYBE_SHARED==%d\n", NAMED(thisvalue), MAYBE_SHARED(thisvalue)); // e.g. DT[,a:=as.character(a)] as tested by 754.5 + if (verbose) Rprintf(_("Direct plonk of unnamed RHS, no copy. NAMED==%d, MAYBE_SHARED==%d\n"), NAMED(thisvalue), MAYBE_SHARED(thisvalue)); // e.g. DT[,a:=as.character(a)] as tested by 754.5 } SET_VECTOR_ELT(dt, coln, thisvalue); // plonk new column in as it's already the correct length setAttrib(thisvalue, R_NamesSymbol, R_NilValue); // clear names such as DT[,a:=mapvector[a]] @@ -555,7 +555,7 @@ SEXP assign(SEXP dt, SEXP rows, SEXP cols, SEXP newcolnames, SEXP values) if (*tc1!='_' || *(tc1+1)!='_') { // fix for #1396 if (verbose) { - Rprintf("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", tc1); + Rprintf(_("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"), tc1); } setAttrib(index, a, R_NilValue); indexNo++; @@ -600,7 +600,7 @@ SEXP assign(SEXP dt, SEXP rows, SEXP cols, SEXP newcolnames, SEXP values) setAttrib(index, a, R_NilValue); SET_STRING_ELT(indexNames, indexNo, NA_STRING); if (verbose) { - Rprintf("Dropping index '%s' due to an update on a key column\n", c1+2); + Rprintf(_("Dropping index '%s' due to an update on a key column\n"), c1+2); } } else if(newKeyLength < strlen(c1)) { SEXP s4Str = PROTECT(mkString(s4)); @@ -609,14 +609,14 @@ SEXP assign(SEXP dt, SEXP rows, SEXP cols, SEXP newcolnames, SEXP values) SET_TAG(s, install(s4)); SET_STRING_ELT(indexNames, indexNo, mkChar(s4)); if (verbose) - Rprintf("Shortening index '%s' to '%s' due to an update on a key column\n", c1+2, s4 + 2); + Rprintf(_("Shortening index '%s' to '%s' due to an update on a key column\n"), c1+2, s4 + 2); } else { // indexLength > 0 || shortened name present already // indexLength > 0 indicates reordering. Drop it to avoid spurious reordering in non-indexed columns (#2372) // shortened anme already present indicates that index needs to be dropped to avoid duplicate indices. setAttrib(index, a, R_NilValue); SET_STRING_ELT(indexNames, indexNo, NA_STRING); if (verbose) - Rprintf("Dropping index '%s' due to an update on a key column\n", c1+2); + Rprintf(_("Dropping index '%s' due to an update on a key column\n"), c1+2); } UNPROTECT(1); // s4Str } //else: index is not affected by assign: nothing to be done @@ -847,7 +847,7 @@ const char *memrecycle(SEXP target, SEXP where, int start, int len, SEXP source, } else if ((TYPEOF(target)!=TYPEOF(source) || targetIsI64!=sourceIsI64) && !isNewList(target)) { if (GetVerbose()) { // only take the (small) cost of GetVerbose() (search of options() list) when types don't match - Rprintf("Zero-copy coerce when assigning '%s' to '%s' column %d named '%s'.\n", + Rprintf(_("Zero-copy coerce when assigning '%s' to '%s' column %d named '%s'.\n"), sourceIsI64 ? "integer64" : type2char(TYPEOF(source)), targetIsI64 ? "integer64" : type2char(TYPEOF(target)), colnum, colname); diff --git a/src/between.c b/src/between.c index 653a28c339..c1b6f14561 100644 --- a/src/between.c +++ b/src/between.c @@ -79,7 +79,7 @@ SEXP between(SEXP x, SEXP lower, SEXP upper, SEXP incbounds, SEXP NAboundsArg, S ansp[i] = (lok && uok) ? l+open<=elem && elem<=u-open : ((uok && elem>u-open) || (lok && elemu-open) || (lok && elem=u) || (lok && elem<=l)) ? FALSE : NA_LOGICAL; } } - if (verbose) Rprintf("between parallel processing of double with open bounds took %8.3fs\n", omp_get_wtime()-tic); + if (verbose) Rprintf(_("between parallel processing of double with open bounds took %8.3fs\n"), omp_get_wtime()-tic); } else { if (NAbounds) { #pragma omp parallel for num_threads(getDTthreads()) @@ -154,7 +154,7 @@ SEXP between(SEXP x, SEXP lower, SEXP upper, SEXP incbounds, SEXP NAboundsArg, S ansp[i] = (lok && uok) ? l<=elem && elem<=u : ((uok && elem>u) || (lok && elem0; - Rprintf("\n %s took %.3fs for %d groups\n", w ? "collecting discontiguous groups" : "memcpy contiguous groups", + Rprintf(_("\n %s took %.3fs for %d groups\n"), w ? "collecting discontiguous groups" : "memcpy contiguous groups", 1.0*tblock[w]/CLOCKS_PER_SEC, nblock[w]); - Rprintf(" eval(j) took %.3fs for %d calls\n", 1.0*tblock[2]/CLOCKS_PER_SEC, nblock[2]); + Rprintf(_(" eval(j) took %.3fs for %d calls\n"), 1.0*tblock[2]/CLOCKS_PER_SEC, nblock[2]); } UNPROTECT(nprotect); return(ans); @@ -495,7 +495,7 @@ SEXP growVector(SEXP x, R_len_t newlen) default : memcpy((char *)DATAPTR(newx), (char *)DATAPTR(x), len*SIZEOF(x)); // SIZEOF() returns size_t (just as sizeof()) so * shouldn't overflow // TODO remove DATAPTR } - // if (verbose) Rprintf("Growing vector from %d to %d items of type '%s'\n", len, newlen, type2char(TYPEOF(x))); + // if (verbose) Rprintf(_("Growing vector from %d to %d items of type '%s'\n"), len, newlen, type2char(TYPEOF(x))); // Would print for every column if here. Now just up in dogroups (one msg for each table grow). keepattr(newx,x); UNPROTECT(1); diff --git a/src/fmelt.c b/src/fmelt.c index 2311d54948..896f7e8b1c 100644 --- a/src/fmelt.c +++ b/src/fmelt.c @@ -172,8 +172,8 @@ SEXP checkVars(SEXP DT, SEXP id, SEXP measure, Rboolean verbose) { SET_VECTOR_ELT(valuecols, 0, tmp2); idcols = tmp; if (verbose) { - Rprintf("'measure.vars' is missing. Assigning all columns other than 'id.vars' columns as 'measure.vars'.\n"); - if (length(tmp2)) Rprintf("Assigned 'measure.vars' are [%s].\n", CHAR(STRING_ELT(concat(dtnames, tmp2), 0))); + Rprintf(_("'measure.vars' is missing. Assigning all columns other than 'id.vars' columns as 'measure.vars'.\n")); + if (length(tmp2)) Rprintf(_("Assigned 'measure.vars' are [%s].\n"), CHAR(STRING_ELT(concat(dtnames, tmp2), 0))); } } else if (isNull(id) && !isNull(measure)) { switch(TYPEOF(measure)) { @@ -208,8 +208,8 @@ SEXP checkVars(SEXP DT, SEXP id, SEXP measure, Rboolean verbose) { SET_VECTOR_ELT(valuecols, 0, tmp2); } if (verbose) { - Rprintf("'id.vars' is missing. Assigning all columns other than 'measure.vars' columns as 'id.vars'.\n"); - if (length(idcols)) Rprintf("Assigned 'id.vars' are [%s].\n", CHAR(STRING_ELT(concat(dtnames, idcols), 0))); + Rprintf(_("'id.vars' is missing. Assigning all columns other than 'measure.vars' columns as 'id.vars'.\n")); + if (length(idcols)) Rprintf(_("Assigned 'id.vars' are [%s].\n"), CHAR(STRING_ELT(concat(dtnames, idcols), 0))); } } else if (!isNull(id) && !isNull(measure)) { switch(TYPEOF(id)) { @@ -384,7 +384,7 @@ SEXP getvaluecols(SEXP DT, SEXP dtnames, Rboolean valfactor, Rboolean verbose, s if (!data->isidentical[i]) warning(_("'measure.vars' [%s] are not all of the same type. By order of hierarchy, the molten data value column will be of type '%s'. All measure variables not of type '%s' will be coerced too. Check DETAILS in ?melt.data.table for more on coercion.\n"), CHAR(STRING_ELT(concat(dtnames, thisvaluecols), 0)), type2char(data->maxtype[i]), type2char(data->maxtype[i])); if (data->maxtype[i] == VECSXP && data->narm) { - if (verbose) Rprintf("The molten data value type is a list at item %d. 'na.rm=TRUE' is ignored.\n", i+1); + if (verbose) Rprintf(_("The molten data value type is a list at item %d. 'na.rm=TRUE' is ignored.\n"), i+1); data->narm = FALSE; } } @@ -679,7 +679,7 @@ SEXP fmelt(SEXP DT, SEXP id, SEXP measure, SEXP varfactor, SEXP valfactor, SEXP if (!isLogical(verboseArg)) error(_("Argument 'verbose' should be logical TRUE/FALSE")); int ncol = LENGTH(DT); if (!ncol) { - if (verbose) Rprintf("ncol(data) is 0. Nothing to melt. Returning original data.table."); + if (verbose) Rprintf(_("ncol(data) is 0. Nothing to melt. Returning original data.table.")); return(DT); } int protecti=0; diff --git a/src/forder.c b/src/forder.c index 544ba7768d..59d5cd61c3 100644 --- a/src/forder.c +++ b/src/forder.c @@ -434,7 +434,7 @@ SEXP forder(SEXP DT, SEXP by, SEXP retGrpArg, SEXP sortGroupsArg, SEXP ascArg, S if (!isInteger(ascArg) || LENGTH(ascArg)!=1) error(_("Input is an atomic vector (not a list of columns) but order= is not a length 1 integer")); if (verbose) - Rprintf("forder.c received a vector type '%s' length %d\n", type2char(TYPEOF(DT)), length(DT)); + Rprintf(_("forder.c received a vector type '%s' length %d\n"), type2char(TYPEOF(DT)), length(DT)); SEXP tt = PROTECT(allocVector(VECSXP, 1)); n_protect++; SET_VECTOR_ELT(tt, 0, DT); DT = tt; @@ -442,7 +442,7 @@ SEXP forder(SEXP DT, SEXP by, SEXP retGrpArg, SEXP sortGroupsArg, SEXP ascArg, S INTEGER(by)[0] = 1; } else { if (verbose) - Rprintf("forder.c received %d rows and %d columns\n", length(VECTOR_ELT(DT,0)), length(DT)); + Rprintf(_("forder.c received %d rows and %d columns\n"), length(VECTOR_ELT(DT,0)), length(DT)); } if (!length(DT)) error(_("Internal error: DT is an empty list() of 0 columns")); // # nocov should have been caught be colnamesInt, test 2099.1 @@ -504,7 +504,7 @@ SEXP forder(SEXP DT, SEXP by, SEXP retGrpArg, SEXP sortGroupsArg, SEXP ascArg, S if (n_cplx) { CplxPart=PROTECT(allocVector(REALSXP, nrow)); n_protect++; } // one alloc is reused for each part TEND(2); for (int col=0; col>=1; } @@ -613,7 +613,7 @@ SEXP forder(SEXP DT, SEXP by, SEXP retGrpArg, SEXP sortGroupsArg, SEXP ascArg, S const uint64_t naval = ((nalast==1) == asc) ? max+1+isReal*2 : min-1-isReal*2; const uint64_t nanval = ((nalast==1) == asc) ? max+2 : min-2; // only used when isReal - // Rprintf("asc=%d min2=%llu max2=%llu naval==%llu nanval==%llu\n", asc, min2, max2, naval, nanval); + // Rprintf(_("asc=%d min2=%llu max2=%llu naval==%llu nanval==%llu\n"), asc, min2, max2, naval, nanval); // several columns could squash into 1 byte. due to this bit squashing is why we deal // with asc|desc here, otherwise it could be done in the ugrp sorting by reversing the ugrp insert sort @@ -706,11 +706,11 @@ SEXP forder(SEXP DT, SEXP by, SEXP retGrpArg, SEXP sortGroupsArg, SEXP ascArg, S } nradix += nbyte-1+(spare==0); TEND(4) - // Rprintf("Written key for column %d\n", col); + // Rprintf(_("Written key for column %d\n"), col); } if (key[nradix]!=NULL) nradix++; // nradix now number of bytes in key #ifdef TIMING_ON - Rprintf("nradix=%d\n", nradix); + Rprintf(_("nradix=%d\n"), nradix); #endif int nth = getDTthreads(); @@ -782,10 +782,10 @@ SEXP forder(SEXP DT, SEXP by, SEXP retGrpArg, SEXP sortGroupsArg, SEXP ascArg, S int last=NBLOCK-1; while (last>=0 && nblock[last]==0) last--; // remove unused timing slots for (int i=0; i<=last; i++) { - Rprintf("Timing block %2d%s = %8.3f %8d\n", i, (i>=17&&i<=19)?"(*)":" ", tblock[i], nblock[i]); + Rprintf(_("Timing block %2d%s = %8.3f %8d\n"), i, (i>=17&&i<=19)?"(*)":" ", tblock[i], nblock[i]); } for (int i=0; i<=256; i++) { - if (stat[i]) Rprintf("stat[%03d]==%10zd\n", i, stat[i]); + if (stat[i]) Rprintf(_("stat[%03d]==%10zd\n"), i, stat[i]); } } #endif @@ -821,7 +821,7 @@ void radix_r(const int from, const int to, const int radix) { } else if (my_n<=256) { // if (getDTthreads()==1) - // Rprintf("insert clause: radix=%d, my_n=%d, from=%d, to=%d\n", radix, my_n, from, to); + // Rprintf(_("insert clause: radix=%d, my_n=%d, from=%d, to=%d\n"), radix, my_n, from, to); // insert sort with some twists: // i) detects if grouped; if sortType==0 can then skip // ii) keeps group appearance order at byte level to minimize movement @@ -933,7 +933,7 @@ void radix_r(const int from, const int to, const int radix) { return; } else if (my_n<=UINT16_MAX) { // UINT16_MAX==65535 (important not 65536) - // if (getDTthreads()==1) Rprintf("counting clause: radix=%d, my_n=%d\n", radix, my_n); + // if (getDTthreads()==1) Rprintf(_("counting clause: radix=%d, my_n=%d\n"), radix, my_n); uint16_t my_counts[256] = {0}; // Needs to be all-0 on entry. This ={0} initialization should be fast as it's on stack. Otherwise, we have to manage // a stack of counts anyway since this is called recursively and these counts are needed to make the recursive calls. // This thread-private stack alloc has no chance of false sharing and gives omp and compiler best chance. diff --git a/src/fread.c b/src/fread.c index d46fe2f5aa..f18261f25d 100644 --- a/src/fread.c +++ b/src/fread.c @@ -146,10 +146,10 @@ bool freadCleanup(void) // may call freadCleanup(), thus resulting in an infinite loop. #ifdef WIN32 if (!UnmapViewOfFile(mmp)) - DTPRINT("System error %d unmapping view of file\n", GetLastError()); // # nocov + DTPRINT(_("System error %d unmapping view of file\n"), GetLastError()); // # nocov #else if (munmap(mmp, fileSize)) - DTPRINT("System errno %d unmapping file: %s\n", errno, strerror(errno)); // # nocov + DTPRINT(_("System errno %d unmapping file: %s\n"), errno, strerror(errno)); // # nocov #endif mmp = NULL; } @@ -439,8 +439,8 @@ void copyFile(size_t fileSize, const char *msg, bool verbose) // only called in sof = mmp_copy; eof = (char *)mmp_copy + fileSize; tt = wallclock()-tt; - if (tt>0.5) DTPRINT("Avoidable %.3f seconds. %s time to copy.\n", tt, msg); // not warning as that could feasibly cause CRAN tests to fail, say, if test machine is heavily loaded - if (verbose) DTPRINT(" File copy in RAM took %.3f seconds.\n", tt); + if (tt>0.5) DTPRINT(_("Avoidable %.3f seconds. %s time to copy.\n"), tt, msg); // not warning as that could feasibly cause CRAN tests to fail, say, if test machine is heavily loaded + if (verbose) DTPRINT(_(" File copy in RAM took %.3f seconds.\n"), tt); } @@ -1031,7 +1031,7 @@ static int detect_types( const char **pch, int8_t type[], int ncol, bool *bumped if (eol(&ch)) return 0; // empty line int field=0; while (field>(%d)", strlim(ch,20), quoteRule); + // DTPRINT(_("<<%s>>(%d)"), strlim(ch,20), quoteRule); skip_white(&ch); const char *fieldStart = ch; while (tmpType[field]<=CT_STRING) { @@ -1095,14 +1095,14 @@ int freadMain(freadMainArgs _args) { DTWARN("Previous fread() session was not cleaned up properly. Cleaned up ok at the beginning of this fread() call.\n"); // # nocov } - if (verbose) DTPRINT("[01] Check arguments\n"); + if (verbose) DTPRINT(_("[01] Check arguments\n")); int nth = args.nth; { int maxth = omp_get_max_threads(); if (nth > maxth) nth = maxth; if (nth <= 0) nth += maxth; if (nth <= 0) nth = 1; - if (verbose) DTPRINT(" Using %d threads (omp_get_max_threads()=%d, nth=%d)\n", nth, maxth, args.nth); + if (verbose) DTPRINT(_(" Using %d threads (omp_get_max_threads()=%d, nth=%d)\n"), nth, maxth, args.nth); } uint64_t ui64 = NA_FLOAT64_I64; @@ -1143,21 +1143,21 @@ int freadMain(freadMainArgs _args) { disabled_parsers[CT_BOOL8_N] = !args.logical01; if (verbose) { if (*NAstrings == NULL) { - DTPRINT(" No NAstrings provided.\n"); + DTPRINT(_(" No NAstrings provided.\n")); } else { - DTPRINT(" NAstrings = ["); + DTPRINT(_(" NAstrings = [")); const char * const* s = NAstrings; while (*s++) DTPRINT(*s? "<<%s>>, " : "<<%s>>", s[-1]); - DTPRINT("]\n"); + DTPRINT(_("]\n")); if (any_number_like_NAstrings) - DTPRINT(" One or more of the NAstrings looks like a number.\n"); + DTPRINT(_(" One or more of the NAstrings looks like a number.\n")); else - DTPRINT(" None of the NAstrings look like numbers.\n"); + DTPRINT(_(" None of the NAstrings look like numbers.\n")); } - if (args.skipNrow >= 0) DTPRINT(" skip num lines = %llu\n", (llu)args.skipNrow); - if (args.skipString) DTPRINT(" skip to string = <<%s>>\n", args.skipString); - DTPRINT(" show progress = %d\n", args.showProgress); - DTPRINT(" 0/1 column will be read as %s\n", args.logical01? "boolean" : "integer"); + if (args.skipNrow >= 0) DTPRINT(_(" skip num lines = %llu\n"), (llu)args.skipNrow); + if (args.skipString) DTPRINT(_(" skip to string = <<%s>>\n"), args.skipString); + DTPRINT(_(" show progress = %d\n"), args.showProgress); + DTPRINT(_(" 0/1 column will be read as %s\n"), args.logical01? "boolean" : "integer"); } stripWhite = args.stripWhite; @@ -1185,17 +1185,17 @@ int freadMain(freadMainArgs _args) { //********************************************************************************************* double tMap; // moment when memory-map step has finished { - if (verbose) DTPRINT("[02] Opening the file\n"); + if (verbose) DTPRINT(_("[02] Opening the file\n")); mmp = NULL; if (args.input) { - if (verbose) DTPRINT(" `input` argument is provided rather than a file name, interpreting as raw text to read\n"); + if (verbose) DTPRINT(_(" `input` argument is provided rather than a file name, interpreting as raw text to read\n")); sof = args.input; fileSize = strlen(sof); eof = sof+fileSize; if (*eof!='\0') STOP("Internal error: last byte of character input isn't \\0"); // # nocov } else if (args.filename) { - if (verbose) DTPRINT(" Opening file %s\n", args.filename); + if (verbose) DTPRINT(_(" Opening file %s\n"), args.filename); const char* fnam = args.filename; #ifndef WIN32 int fd = open(fnam, O_RDONLY); @@ -1207,7 +1207,7 @@ int freadMain(freadMainArgs _args) { } fileSize = (size_t) stat_buf.st_size; if (fileSize == 0) {close(fd); STOP("File is empty: %s", fnam);} - if (verbose) DTPRINT(" File opened, size = %s.\n", filesize_to_str(fileSize)); + if (verbose) DTPRINT(_(" File opened, size = %s.\n"), filesize_to_str(fileSize)); // No MAP_POPULATE for faster nrows=10 and to make possible earlier progress bar in row count stage // Mac doesn't appear to support MAP_POPULATE anyway (failed on CRAN when I tried). @@ -1235,7 +1235,7 @@ int freadMain(freadMainArgs _args) { if (GetFileSizeEx(hFile,&liFileSize)==0) { CloseHandle(hFile); STOP("GetFileSizeEx failed (returned 0) on file: %s", fnam); } fileSize = (size_t)liFileSize.QuadPart; if (fileSize<=0) { CloseHandle(hFile); STOP("File is empty: %s", fnam); } - if (verbose) DTPRINT(" File opened, size = %s.\n", filesize_to_str(fileSize)); + if (verbose) DTPRINT(_(" File opened, size = %s.\n"), filesize_to_str(fileSize)); HANDLE hMap=CreateFileMapping(hFile, NULL, PAGE_WRITECOPY, 0, 0, NULL); if (hMap==NULL) { CloseHandle(hFile); STOP("This is Windows, CreateFileMapping returned error %d for file %s", GetLastError(), fnam); } mmp = MapViewOfFile(hMap,FILE_MAP_COPY,0,0,fileSize); // fileSize must be <= hilo passed to CreateFileMapping above. @@ -1248,7 +1248,7 @@ int freadMain(freadMainArgs _args) { nbit<=32 ? "Please upgrade to 64bit" : "There is probably not enough contiguous virtual memory available"); // # nocov } sof = (const char*) mmp; - if (verbose) DTPRINT(" Memory mapped ok\n"); + if (verbose) DTPRINT(_(" Memory mapped ok\n")); } else { STOP("Internal error: Neither `input` nor `filename` are given, nothing to read."); // # nocov } @@ -1267,11 +1267,11 @@ int freadMain(freadMainArgs _args) { // See: issues #1087, #1465 and #1612 //********************************************************************************************* { - if (verbose) DTPRINT("[03] Detect and skip BOM\n"); + if (verbose) DTPRINT(_("[03] Detect and skip BOM\n")); if (fileSize >= 3 && memcmp(sof, "\xEF\xBB\xBF", 3) == 0) { sof += 3; // ienc = CE_UTF8; - if (verbose) DTPRINT(" UTF-8 byte order mark EF BB BF found at the start of the file and skipped.\n"); + if (verbose) DTPRINT(_(" UTF-8 byte order mark EF BB BF found at the start of the file and skipped.\n")); } else if (fileSize >= 4 && memcmp(sof, "\x84\x31\x95\x33", 4) == 0) { sof += 4; @@ -1284,7 +1284,7 @@ int freadMain(freadMainArgs _args) { if (eof>sof && (eof[-1]=='\x1A' || eof[-1]=='\0')) { char c = eof[-1]; while (eof>sof && eof[-1]==c) eof--; - if (verbose) DTPRINT(" Last byte(s) of input found to be %s and removed.\n", + if (verbose) DTPRINT(_(" Last byte(s) of input found to be %s and removed.\n"), c ? "0x1A (Ctrl+Z)" : "0x00 (NUL)"); } if (eof<=sof) STOP("Input is empty or only contains BOM or terminal control characters"); @@ -1294,7 +1294,7 @@ int freadMain(freadMainArgs _args) { //********************************************************************************************* // [4] Terminate mmap with \0 //********************************************************************************************* - if (verbose) DTPRINT("[04] Arrange mmap to be \\0 terminated\n"); + if (verbose) DTPRINT(_("[04] Arrange mmap to be \\0 terminated\n")); // First, set 'eol_one_r' for use by eol() to know if \r-only line ending is allowed, #2371 ch = sof; @@ -1326,14 +1326,14 @@ int freadMain(freadMainArgs _args) { if (!lastEOLreplaced) { // very unusual branch because properly formed csv will have final eol if (fileSize%4096!=0) { - if (verbose) DTPRINT(" File ends abruptly with '%c'. Final end-of-line is missing. Using cow page to write 0 to the last byte.\n", eof[-1]); + if (verbose) DTPRINT(_(" File ends abruptly with '%c'. Final end-of-line is missing. Using cow page to write 0 to the last byte.\n"), eof[-1]); // We could do this routinely (i.e. when there is a final newline too) but we desire to run all tests through the harder // branch above that replaces the final newline with \0 to test that logic (e.g. test 893 which causes a type bump in the last // field) since we rely on that logic to avoid the copy below when fileSize$4096==0 but there is a final eol ok. // TODO: portable way to discover relevant page size. 4096 is lowest common denominator, though, and should suffice. } else { const char *msg = "This file is very unusual: it ends abruptly without a final newline, and also its size is a multiple of 4096 bytes. Please properly end the last row with a newline using for example 'echo >> file' to avoid this "; - if (verbose) DTPRINT(" File ends abruptly with '%c'. Copying file in RAM. %s copy.\n", eof[-1], msg); + if (verbose) DTPRINT(_(" File ends abruptly with '%c'. Copying file in RAM. %s copy.\n"), eof[-1], msg); // In future, we may discover a way to mmap fileSize+1 on all OS when fileSize%4096==0, reliably. If and when, this clause can be updated with no code impact elsewhere. copyFile(fileSize, msg, verbose); } @@ -1367,7 +1367,7 @@ int freadMain(freadMainArgs _args) { int row1line = 1; // The line number where the data starts. Normally row 1 is column names and row1line ends up == 2. { ch = pos; - if (verbose) DTPRINT("[05] Skipping initial rows if needed\n"); + if (verbose) DTPRINT(_("[05] Skipping initial rows if needed\n")); // line is for error and warning messages so considers raw \n whether inside quoted fields or not, just // like wc -l, head -n and tail -n @@ -1379,7 +1379,7 @@ int freadMain(freadMainArgs _args) { pos = ch; ch = sof; while (ch sof && verbose) DTPRINT(" Skipped to line %llu in the file", (llu)row1line); + if (ch > sof && verbose) DTPRINT(_(" Skipped to line %llu in the file"), (llu)row1line); if (ch>=eof) STOP("skip=%llu but the input only has %llu line%s", (llu)args.skipNrow, (llu)row1line, row1line>1?"s":""); pos = ch; } @@ -1404,8 +1404,8 @@ int freadMain(freadMainArgs _args) { } if (ch>=eof) STOP("Input is either empty, fully whitespace, or skip has been set after the last non-whitespace."); if (verbose) { - if (lineStart>ch) DTPRINT(" Moved forward to first non-blank line (%d)\n", row1line); - DTPRINT(" Positioned on line %d starting: <<%s>>\n", row1line, strlim(lineStart, 30)); + if (lineStart>ch) DTPRINT(_(" Moved forward to first non-blank line (%d)\n"), row1line); + DTPRINT(_(" Positioned on line %d starting: <<%s>>\n"), row1line, strlim(lineStart, 30)); } ch = pos = lineStart; } @@ -1423,11 +1423,11 @@ int freadMain(freadMainArgs _args) { const char *prevStart = NULL; // the start of the non-empty line before the first not-ignored row (for warning message later, or taking as column names) int jumpLines = (int)umin(100,nrowLimit); // how many lines from each jump point to use. If nrowLimit is supplied, nJumps is later set to 1 as well. { - if (verbose) DTPRINT("[06] Detect separator, quoting rule, and ncolumns\n"); + if (verbose) DTPRINT(_("[06] Detect separator, quoting rule, and ncolumns\n")); if (args.sep == '\n') { // '\n' because '\0' is taken already to mean 'auto' // unusual - if (verbose) DTPRINT(" sep='\\n' passed in meaning read lines as single character column\n"); + if (verbose) DTPRINT(_(" sep='\\n' passed in meaning read lines as single character column\n")); sep = 127; // ASCII DEL: a character different from \r, \n and \0 that isn't in the data whiteChar = 0; quoteRule = 3; // Ignore quoting @@ -1446,14 +1446,14 @@ int freadMain(freadMainArgs _args) { // seps[] not *seps for writeability (http://stackoverflow.com/a/164258/403310) char topSep=127; // which sep 'wins' top place (see top* below). By default 127 (ascii del) means no sep i.e. single-column input (1 field) if (args.sep == '\0') { - if (verbose) DTPRINT(" Detecting sep automatically ...\n"); + if (verbose) DTPRINT(_(" Detecting sep automatically ...\n")); nseps = (int) strlen(seps); } else { seps[0] = args.sep; seps[1] = '\0'; nseps = 1; //topSep = args.sep; - if (verbose) DTPRINT(" Using supplied sep '%s'\n", args.sep=='\t' ? "\\t" : seps); + if (verbose) DTPRINT(_(" Using supplied sep '%s'\n"), args.sep=='\t' ? "\\t" : seps); } int topNumLines=0; // the most number of lines with the same number of fields, so far int topNumFields=1; // how many fields that was, to resolve ties @@ -1468,7 +1468,7 @@ int freadMain(freadMainArgs _args) { sep = seps[s]; whiteChar = (sep==' ' ? '\t' : (sep=='\t' ? ' ' : 0)); // 0 means both ' ' and '\t' to be skipped ch = pos; - // if (verbose) DTPRINT(" Trying sep='%c' with quoteRule %d ...\n", sep, quoteRule); + // if (verbose) DTPRINT(_(" Trying sep='%c' with quoteRule %d ...\n"), sep, quoteRule); if (fill) { if (quoteRule>1 && quote) continue; // turn off self-healing quote rule when filling @@ -1487,7 +1487,7 @@ int freadMain(freadMainArgs _args) { firstJumpEnd = ch; // to know how many bytes jump 0 is, for nrow estimate later (a less-good estimate when fill=true since line lengths vary more) if (verbose) { DTPRINT((unsigned)sep<32 ? " sep=%#02x" : " sep='%c'", sep); - DTPRINT(" with %d fields using quote rule %d\n", topNumFields, quoteRule); + DTPRINT(_(" with %d fields using quote rule %d\n"), topNumFields, quoteRule); } } } else { @@ -1537,14 +1537,14 @@ int freadMain(freadMainArgs _args) { if (topSkip<0) topSkip=0; // inelegant but will do for now to pass single row input such as test 890 if (verbose) { DTPRINT((unsigned)sep<32 ? " sep=%#02x" : " sep='%c'", sep); - DTPRINT(" with %d lines of %d fields using quote rule %d\n", topNumLines, topNumFields, topQuoteRule); + DTPRINT(_(" with %d lines of %d fields using quote rule %d\n"), topNumLines, topNumFields, topQuoteRule); } } } } } if (!firstJumpEnd) { - if (verbose) DTPRINT(" No sep and quote rule found a block of 2x2 or greater. Single column input.\n"); + if (verbose) DTPRINT(_(" No sep and quote rule found a block of 2x2 or greater. Single column input.\n")); topNumFields = 1; ASSERT(topSep==127, "Single column input has topSep=%d", topSep); sep = topSep; @@ -1586,24 +1586,24 @@ int freadMain(freadMainArgs _args) { ch = pos; // move back to start of line since countfields() moved to next if (!fill && tt!=ncol) STOP("Internal error: first line has field count %d but expecting %d", tt, ncol); // # nocov if (verbose) { - DTPRINT(" Detected %d columns on line %d. This line is either column " + DTPRINT(_(" Detected %d columns on line %d. This line is either column ") "names or first data row. Line starts as: <<%s>>\n", tt, row1line, strlim(pos, 30)); - DTPRINT(" Quote rule picked = %d\n", quoteRule); - DTPRINT(" fill=%s and the most number of columns found is %d\n", fill?"true":"false", ncol); + DTPRINT(_(" Quote rule picked = %d\n"), quoteRule); + DTPRINT(_(" fill=%s and the most number of columns found is %d\n"), fill?"true":"false", ncol); } if (ncol==1 && lastEOLreplaced && (eof[-1]=='\n' || eof[-1]=='\r')) { // Multiple newlines at the end are significant in the case of 1-column files only (multiple NA at the end) if (fileSize%4096==0) { const char *msg = "This file is very unusual: it's one single column, ends with 2 or more end-of-line (representing several NA at the end), and is a multiple of 4096, too."; - if (verbose) DTPRINT(" Copying file in RAM. %s\n", msg); + if (verbose) DTPRINT(_(" Copying file in RAM. %s\n"), msg); ASSERT(mmp_copy==NULL, "Internal error: mmp has already been copied due to abrupt non-eol ending, so it does not end with 2 or more eol.", 1/*dummy arg for macro*/); // #nocov copyFile(fileSize, msg, verbose); pos = sof + (pos-(const char *)mmp); firstJumpEnd = sof + (firstJumpEnd-(const char *)mmp); } else { - if (verbose) DTPRINT(" 1-column file ends with 2 or more end-of-line. Restoring last eol using extra byte in cow page.\n"); + if (verbose) DTPRINT(_(" 1-column file ends with 2 or more end-of-line. Restoring last eol using extra byte in cow page.\n")); eof++; } *_const_cast(eof-1) = eol_one_r ? '\r' : '\n'; @@ -1622,8 +1622,8 @@ int freadMain(freadMainArgs _args) { double meanLineLen=0.0; // Average length (in bytes) of a single line in the input file size_t bytesRead=0; // Bytes in the data section (i.e. excluding column names, header and footer, if any) { - if (verbose) DTPRINT("[07] Detect column types, good nrow estimate and whether first row is column names\n"); - if (verbose && args.header!=NA_BOOL8) DTPRINT(" 'header' changed by user from 'auto' to %s\n", args.header?"true":"false"); + if (verbose) DTPRINT(_("[07] Detect column types, good nrow estimate and whether first row is column names\n")); + if (verbose && args.header!=NA_BOOL8) DTPRINT(_(" 'header' changed by user from 'auto' to %s\n"), args.header?"true":"false"); type = (int8_t *)malloc((size_t)ncol * sizeof(int8_t)); tmpType = (int8_t *)malloc((size_t)ncol * sizeof(int8_t)); // used i) in sampling to not stop on errors when bad jump point and ii) when accepting user overrides @@ -1648,10 +1648,10 @@ int freadMain(freadMainArgs _args) { // *2 to get a good spacing. We don't want overlaps resulting in double counting. } if (verbose) { - DTPRINT(" Number of sampling jump points = %d because ", nJumps); - if (nrowLimit1 && !fill) || (!eol(&ch) && ch!=eof) ) { - if (verbose) DTPRINT(" A line with too-%s fields (%d/%d) was found on line %d of sample jump %d. %s\n", + if (verbose) DTPRINT(_(" A line with too-%s fields (%d/%d) was found on line %d of sample jump %d. %s\n"), thisNcol0 ? "Most likely this jump landed awkwardly so type bumps here will be skipped." : ""); bumped = false; if (jump==0) lastRowEnd=eof; // to prevent the end from being tested; e.g. a short file with blank line within first 100 like test 976 @@ -1716,7 +1716,7 @@ int freadMain(freadMainArgs _args) { memcpy(type, tmpType, (size_t)ncol); } if (verbose && (bumped || jump==0 || jump==nJumps-1)) { - DTPRINT(" Type codes (jump %03d) : %s Quote rule %d\n", jump, typesAsString(ncol), quoteRule); + DTPRINT(_(" Type codes (jump %03d) : %s Quote rule %d\n"), jump, typesAsString(ncol), quoteRule); } } @@ -1729,7 +1729,7 @@ int freadMain(freadMainArgs _args) { if (tmpType[j]==CT_STRING && type[j] allocnrow) STOP("Internal error: sampleLines(%llu) > allocnrow(%llu)", (llu)sampleLines, (llu)allocnrow); // # nocov } } if (nrowLimit < allocnrow) { - if (verbose) DTPRINT(" Alloc limited to lower nrows=%llu passed in.\n", (llu)nrowLimit); + if (verbose) DTPRINT(_(" Alloc limited to lower nrows=%llu passed in.\n"), (llu)nrowLimit); estnrow = allocnrow = nrowLimit; } } @@ -1841,7 +1841,7 @@ int freadMain(freadMainArgs _args) { double tLayout; // Timer for assigning column names const char *colNamesAnchor = pos; { - if (verbose) DTPRINT("[08] Assign column names\n"); + if (verbose) DTPRINT(_("[08] Assign column names\n")); ch = pos; // back to start of first row (column names if header==true) @@ -1889,11 +1889,11 @@ int freadMain(freadMainArgs _args) { size_t rowSize4; // Total bytesize of all fields having sizeof==4 size_t rowSize8; // Total bytesize of all fields having sizeof==8 { - if (verbose) DTPRINT("[09] Apply user overrides on column types\n"); + if (verbose) DTPRINT(_("[09] Apply user overrides on column types\n")); ch = pos; memcpy(tmpType, type, (size_t)ncol) ; if (!userOverride(type, colNames, colNamesAnchor, ncol)) { // colNames must not be changed but type[] can be - if (verbose) DTPRINT(" Cancelled by user: userOverride() returned false."); // # nocov + if (verbose) DTPRINT(_(" Cancelled by user: userOverride() returned false.")); // # nocov freadCleanup(); // # nocov return 1; // # nocov } @@ -1925,7 +1925,7 @@ int freadMain(freadMainArgs _args) { rowSize8 += (size[j] & 8); if (type[j] == CT_STRING) nStringCols++; else nNonStringCols++; } - if (verbose) DTPRINT(" After %d type and %d drop user overrides : %s\n", nUserBumped, ndrop, typesAsString(ncol)); + if (verbose) DTPRINT(_(" After %d type and %d drop user overrides : %s\n"), nUserBumped, ndrop, typesAsString(ncol)); tColType = wallclock(); } @@ -1933,8 +1933,8 @@ int freadMain(freadMainArgs _args) { // [10] Allocate the result columns //********************************************************************************************* if (verbose) { - DTPRINT("[10] Allocate memory for the datatable\n"); - DTPRINT(" Allocating %d column slots (%d - %d dropped) with %llu rows\n", + DTPRINT(_("[10] Allocate memory for the datatable\n")); + DTPRINT(_(" Allocating %d column slots (%d - %d dropped) with %llu rows\n"), ncol-ndrop, ncol, ndrop, (llu)allocnrow); } size_t DTbytes = allocateDT(type, size, ncol, ndrop, allocnrow); @@ -1991,10 +1991,10 @@ int freadMain(freadMainArgs _args) { if (initialBuffRows > INT32_MAX) STOP("Buffer size %lld is too large\n", initialBuffRows); nth = imin(nJumps, nth); - if (verbose) DTPRINT("[11] Read the data\n"); + if (verbose) DTPRINT(_("[11] Read the data\n")); read: // we'll return here to reread any columns with out-of-sample type exceptions, or dirty jumps restartTeam = false; - if (verbose) DTPRINT(" jumps=[%d..%d), chunk_size=%llu, total_size=%llu\n", + if (verbose) DTPRINT(_(" jumps=[%d..%d), chunk_size=%llu, total_size=%llu\n"), jump0, nJumps, (llu)chunkBytes, (llu)(eof-pos)); ASSERT(allocnrow <= nrowLimit, "allocnrow(%llu) <= nrowLimit(%llu)", (llu)allocnrow, (llu)nrowLimit); #pragma omp parallel num_threads(nth) @@ -2111,7 +2111,7 @@ int freadMain(freadMainArgs _args) { if (sep!=' ' && !any_number_like_NAstrings) { // TODO: can this 'if' be dropped somehow? Can numeric NAstrings be dealt with afterwards in one go as numeric comparison? // Try most common and fastest branch first: no whitespace, no quoted numeric, ",," means NA while (j < ncol) { - // DTPRINT("Field %d: '%.10s' as type %d (tch=%p)\n", j+1, tch, type[j], tch); + // DTPRINT(_("Field %d: '%.10s' as type %d (tch=%p)\n"), j+1, tch, type[j], tch); fieldStart = tch; int8_t thisType = type[j]; // fetch shared type once. Cannot read half-written byte is one reason type's type is single byte to avoid atomic read here. int8_t thisSize = size[j]; @@ -2336,14 +2336,14 @@ int freadMain(freadMainArgs _args) { if (extraAllocRows) { allocnrow += extraAllocRows; if (allocnrow > nrowLimit) allocnrow = nrowLimit; - if (verbose) DTPRINT(" Too few rows allocated. Allocating additional %llu rows (now nrows=%llu) and continue reading from jump %d\n", + if (verbose) DTPRINT(_(" Too few rows allocated. Allocating additional %llu rows (now nrows=%llu) and continue reading from jump %d\n"), (llu)extraAllocRows, (llu)allocnrow, jump0); allocateDT(type, size, ncol, ncol - nStringCols - nNonStringCols, allocnrow); extraAllocRows = 0; goto read; } if (restartTeam) { - if (verbose) DTPRINT(" Restarting team from jump %d. nSwept==%d quoteRule==%d\n", jump0, nSwept, quoteRule); + if (verbose) DTPRINT(_(" Restarting team from jump %d. nSwept==%d quoteRule==%d\n"), jump0, nSwept, quoteRule); ASSERT(nSwept>0 || quoteRuleBumpedCh!=NULL, "Internal error: team restart but nSwept==%d and quoteRuleBumpedCh==%p", nSwept, quoteRuleBumpedCh); // # nocov goto read; } @@ -2363,7 +2363,7 @@ int freadMain(freadMainArgs _args) { for (int i=0; idbl_v[i] = fill; } @@ -432,7 +432,7 @@ void frollapply(double *x, int64_t nx, double *w, int k, ans_t *ans, int align, } else { if (teval0==INTSXP || teval0==LGLSXP) { if (verbose) - Rprintf("%s: results from provided FUN are not of type double, coercion from integer or logical will be applied on each iteration\n", __func__); + Rprintf(_("%s: results from provided FUN are not of type double, coercion from integer or logical will be applied on each iteration\n"), __func__); ans->dbl_v[k-1] = REAL(coerceVector(eval0, REALSXP))[0]; } else { error(_("%s: results from provided FUN are not of type double"), __func__); @@ -457,12 +457,12 @@ void frollapply(double *x, int64_t nx, double *w, int k, ans_t *ans, int align, if (ans->status < 3 && align < 1) { int k_ = align==-1 ? k-1 : floor(k/2); if (verbose) - Rprintf("%s: align %d, shift answer by %d\n", __func__, align, -k_); + Rprintf(_("%s: align %d, shift answer by %d\n"), __func__, align, -k_); memmove((char *)ans->dbl_v, (char *)ans->dbl_v + (k_*sizeof(double)), (nx-k_)*sizeof(double)); for (int64_t i=nx-k_; idbl_v[i] = fill; } } if (verbose) - Rprintf("%s: took %.3fs\n", __func__, omp_get_wtime()-tic); + Rprintf(_("%s: took %.3fs\n"), __func__, omp_get_wtime()-tic); } diff --git a/src/frollR.c b/src/frollR.c index 5985f4a46f..3cc5bbcf31 100644 --- a/src/frollR.c +++ b/src/frollR.c @@ -123,7 +123,7 @@ SEXP frollfunR(SEXP fun, SEXP obj, SEXP k, SEXP fill, SEXP algo, SEXP align, SEX SEXP ans = PROTECT(allocVector(VECSXP, nk * nx)); protecti++; // allocate list to keep results if (verbose) - Rprintf("%s: allocating memory for results %dx%d\n", __func__, nx, nk); + Rprintf(_("%s: allocating memory for results %dx%d\n"), __func__, nx, nk); ans_t *dans = (ans_t *)R_alloc(nx*nk, sizeof(ans_t)); // answer columns as array of ans_t struct double* dx[nx]; // pointers to source columns uint64_t inx[nx]; // to not recalculate `length(x[[i]])` we store it in extra array @@ -195,9 +195,9 @@ SEXP frollfunR(SEXP fun, SEXP obj, SEXP k, SEXP fill, SEXP algo, SEXP align, SEX if (verbose) { if (ialgo==0) - Rprintf("%s: %d column(s) and %d window(s), if product > 1 then entering parallel execution\n", __func__, nx, nk); + Rprintf(_("%s: %d column(s) and %d window(s), if product > 1 then entering parallel execution\n"), __func__, nx, nk); else if (ialgo==1) - Rprintf("%s: %d column(s) and %d window(s), not entering parallel execution here because algo='exact' will compute results in parallel\n", __func__, nx, nk); + Rprintf(_("%s: %d column(s) and %d window(s), not entering parallel execution here because algo='exact' will compute results in parallel\n"), __func__, nx, nk); } #pragma omp parallel for if (ialgo==0 && nx*nk>1) schedule(auto) collapse(2) num_threads(getDTthreads()) for (R_len_t i=0; imax) max=maxs[i]; } - if (verbose) Rprintf("Range = [%g,%g]\n", min, max); + if (verbose) Rprintf(_("Range = [%g,%g]\n"), min, max); if (min < 0.0) error(_("Cannot yet handle negatives.")); // TODO: -0ULL should allow negatives // avoid twiddle function call as expensive in recent tests (0.34 vs 2.7) @@ -167,14 +167,14 @@ SEXP fsort(SEXP x, SEXP verboseArg) { int MSBNbits = maxBit > 15 ? 16 : maxBit+1; // how many bits make up the MSB int shift = maxBit + 1 - MSBNbits; // the right shift to leave the MSB bits remaining size_t MSBsize = 1LL< 65,536) - if (verbose) Rprintf("maxBit=%d; MSBNbits=%d; shift=%d; MSBsize=%d\n", maxBit, MSBNbits, shift, MSBsize); + if (verbose) Rprintf(_("maxBit=%d; MSBNbits=%d; shift=%d; MSBsize=%d\n"), maxBit, MSBNbits, shift, MSBsize); R_xlen_t *counts = calloc(nBatch*MSBsize, sizeof(R_xlen_t)); if (counts==NULL) error(_("Unable to allocate working memory")); // provided MSBsize>=9, each batch is a multiple of at least one 4k page, so no page overlap // TODO: change all calloc, malloc and free to Calloc and Free to be robust to error() and catch ooms. - if (verbose) Rprintf("counts is %dMB (%d pages per nBatch=%d, batchSize=%lld, lastBatchSize=%lld)\n", + if (verbose) Rprintf(_("counts is %dMB (%d pages per nBatch=%d, batchSize=%lld, lastBatchSize=%lld)\n"), nBatch*MSBsize*sizeof(R_xlen_t)/(1024*1024), nBatch*MSBsize*sizeof(R_xlen_t)/(4*1024*nBatch), nBatch, batchSize, lastBatchSize); t[3] = wallclock(); @@ -243,12 +243,12 @@ SEXP fsort(SEXP x, SEXP verboseArg) { // TODO: time this qsort but likely insignificant. if (verbose) { - Rprintf("Top 5 MSB counts: "); for(int i=0; i<5; i++) Rprintf("%lld ", msbCounts[order[i]]); Rprintf("\n"); - Rprintf("Reduced MSBsize from %d to ", MSBsize); + Rprintf(_("Top 5 MSB counts: ")); for(int i=0; i<5; i++) Rprintf(_("%lld "), msbCounts[order[i]]); Rprintf(_("\n")); + Rprintf(_("Reduced MSBsize from %d to "), MSBsize); } while (MSBsize>0 && msbCounts[order[MSBsize-1]] < 2) MSBsize--; if (verbose) { - Rprintf("%d by excluding 0 and 1 counts\n", MSBsize); + Rprintf(_("%d by excluding 0 and 1 counts\n"), MSBsize); } t[6] = wallclock(); @@ -305,7 +305,7 @@ SEXP fsort(SEXP x, SEXP verboseArg) { double tot = t[7]-t[0]; if (verbose) for (int i=1; i<=7; i++) { - Rprintf("%d: %.3f (%4.1f%%)\n", i, t[i]-t[i-1], 100.*(t[i]-t[i-1])/tot); + Rprintf(_("%d: %.3f (%4.1f%%)\n"), i, t[i]-t[i-1], 100.*(t[i]-t[i-1])/tot); } UNPROTECT(nprotect); diff --git a/src/fwrite.c b/src/fwrite.c index 0ed9f2184a..af7ad3dd31 100644 --- a/src/fwrite.c +++ b/src/fwrite.c @@ -227,7 +227,7 @@ void writeFloat64(double *col, int64_t row, char **pch) uint64_t l = y * SIZE_SF; // low magnitude mult 10^NUM_SF // l now contains NUM_SF+1 digits as integer where repeated /10 below is accurate - // if (verbose) Rprintf("\nTRACE: acc=%.20Le ; y=%.20Le ; l=%llu ; e=%d ", acc, y, l, exp); + // if (verbose) Rprintf(_("\nTRACE: acc=%.20Le ; y=%.20Le ; l=%llu ; e=%d "), acc, y, l, exp); if (l%10 >= 5) l+=10; // use the last digit to round l /= 10; @@ -610,15 +610,15 @@ void fwriteMain(fwriteMainArgs args) if (eolLen<=0) STOP("eol must be 1 or more bytes (usually either \\n or \\r\\n) but is length %d", eolLen); if (args.verbose) { - DTPRINT("Column writers: "); + DTPRINT(_("Column writers: ")); if (args.ncol<=50) { - for (int j=0; j= 2) { - if (args.verbose && !hasPrinted) DTPRINT("\n"); - DTPRINT("\rWritten %.1f%% of %d rows in %d secs using %d thread%s. " + if (args.verbose && !hasPrinted) DTPRINT(_("\n")); + DTPRINT(_("\rWritten %.1f%% of %d rows in %d secs using %d thread%s. ") "maxBuffUsed=%d%%. ETA %d secs. ", (100.0*end)/args.nrow, args.nrow, (int)(now-startTime), nth, nth==1?"":"s", maxBuffUsedPC, ETA); @@ -929,10 +929,10 @@ void fwriteMain(fwriteMainArgs args) if (hasPrinted) { // # nocov start if (!failed) { // clear the progress meter - DTPRINT("\r " + DTPRINT(_("\r ") " \r"); } else { // don't clear any potentially helpful output before error - DTPRINT("\n"); + DTPRINT(_("\n")); } // # nocov end } diff --git a/src/fwriteR.c b/src/fwriteR.c index c3644dc048..2170ddcdbb 100644 --- a/src/fwriteR.c +++ b/src/fwriteR.c @@ -259,11 +259,11 @@ SEXP fwriteR( args.dec = *CHAR(STRING_ELT(dec_Arg,0)); if (!firstListColumn) { - if (args.verbose) Rprintf("No list columns are present. Setting sep2='' otherwise quote='auto' would quote fields containing sep2.\n"); + if (args.verbose) Rprintf(_("No list columns are present. Setting sep2='' otherwise quote='auto' would quote fields containing sep2.\n")); args.sep2 = sep2 = '\0'; } else { if (args.verbose) { - Rprintf("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", + Rprintf(_("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"), args.sep, args.sep2, firstListColumn ); } if (args.dec==args.sep || args.dec==args.sep2 || args.sep==args.sep2) { diff --git a/src/gsumm.c b/src/gsumm.c index 3cd17d685d..685aafa977 100644 --- a/src/gsumm.c +++ b/src/gsumm.c @@ -95,7 +95,7 @@ SEXP gforce(SEXP env, SEXP jsub, SEXP o, SEXP f, SEXP l, SEXP irowsArg) { int *elem = grp + fp[g]-1; for (int j=0; j>shift) + 1; - //Rprintf("When assigning grp[o] = g, highSize=%d nb=%d shift=%d nBatch=%d\n", highSize, nb, shift, nBatch); + //Rprintf(_("When assigning grp[o] = g, highSize=%d nb=%d shift=%d nBatch=%d\n"), highSize, nb, shift, nBatch); int *counts = calloc(nBatch*highSize, sizeof(int)); // TODO: cache-line align and make highSize a multiple of 64 int *TMP = malloc(nrow*2*sizeof(int)); if (!counts || !TMP ) error(_("Internal error: Failed to allocate counts or TMP when assigning g in gforce")); @@ -137,7 +137,7 @@ SEXP gforce(SEXP env, SEXP jsub, SEXP o, SEXP f, SEXP l, SEXP irowsArg) { *p = my_g[i]; } } - //Rprintf("gforce assign TMP (o,g) pairs took %.3f\n", wallclock()-started); started=wallclock(); + //Rprintf(_("gforce assign TMP (o,g) pairs took %.3f\n"), wallclock()-started); started=wallclock(); #pragma omp parallel for num_threads(getDTthreads()) for (int h=0; h= ss[i] due to ordering from R-side // // if ee[i] >= ss[i+1], then there's overlap, pick largest of ee[i], ee[i+1] // while(++i < n && ee >= (new_ss = starts[i]-1)) { // new_ee = new_ss + len[i]-1; // ee = ee > new_ee ? ee : new_ee; // } - // // Rprintf("Moved to %d, start=%d, end=%d\n", i, ss, ee); + // // Rprintf(_("Moved to %d, start=%d, end=%d\n"), i, ss, ee); // for (j=ss; j<=ee; j++) ans[nxo ? xo[j]-1 : j] = 1; // } return (R_NilValue); diff --git a/src/nafill.c b/src/nafill.c index 6236504425..75b3e1356e 100644 --- a/src/nafill.c +++ b/src/nafill.c @@ -174,7 +174,7 @@ SEXP nafillR(SEXP obj, SEXP type, SEXP fill, SEXP inplace, SEXP cols, SEXP verbo ansMsg(vans, nx, bverbose, __func__); if (bverbose) - Rprintf("%s: parallel processing of %d column(s) took %.3fs\n", __func__, nx, toc-tic); + Rprintf(_("%s: parallel processing of %d column(s) took %.3fs\n"), __func__, nx, toc-tic); UNPROTECT(protecti); if (binplace) { diff --git a/src/openmp-utils.c b/src/openmp-utils.c index 29d643f5a4..f1d732459f 100644 --- a/src/openmp-utils.c +++ b/src/openmp-utils.c @@ -67,20 +67,20 @@ SEXP getDTthreads_R(SEXP verbose) { if (!isLogical(verbose) || LENGTH(verbose)!=1 || INTEGER(verbose)[0]==NA_LOGICAL) error(_("'verbose' must be TRUE or FALSE")); if (LOGICAL(verbose)[0]) { #ifndef _OPENMP - Rprintf("This installation of data.table has not been compiled with OpenMP support.\n"); + Rprintf(_("This installation of data.table has not been compiled with OpenMP support.\n")); #endif // this output is captured, paste0(collapse="; ")'d, and placed at the end of test.data.table() for display in the last 13 lines of CRAN check logs // it is also printed at the start of test.data.table() so that we can trace any Killed events on CRAN before the end is reached // this is printed verbatim (e.g. without using data.table to format the output) in case there is a problem even with simple data.table creation/printing - Rprintf(" omp_get_num_procs() %d\n", omp_get_num_procs()); - Rprintf(" R_DATATABLE_NUM_PROCS_PERCENT %s\n", mygetenv("R_DATATABLE_NUM_PROCS_PERCENT", "unset (default 50)")); - Rprintf(" R_DATATABLE_NUM_THREADS %s\n", mygetenv("R_DATATABLE_NUM_THREADS", "unset")); - Rprintf(" omp_get_thread_limit() %d\n", omp_get_thread_limit()); - Rprintf(" omp_get_max_threads() %d\n", omp_get_max_threads()); - Rprintf(" OMP_THREAD_LIMIT %s\n", mygetenv("OMP_THREAD_LIMIT", "unset")); // CRAN sets to 2 - Rprintf(" OMP_NUM_THREADS %s\n", mygetenv("OMP_NUM_THREADS", "unset")); - Rprintf(" RestoreAfterFork %s\n", RestoreAfterFork ? "true" : "false"); - Rprintf(" data.table is using %d threads. See ?setDTthreads.\n", getDTthreads()); + Rprintf(_(" omp_get_num_procs() %d\n"), omp_get_num_procs()); + Rprintf(_(" R_DATATABLE_NUM_PROCS_PERCENT %s\n"), mygetenv("R_DATATABLE_NUM_PROCS_PERCENT", "unset (default 50)")); + Rprintf(_(" R_DATATABLE_NUM_THREADS %s\n"), mygetenv("R_DATATABLE_NUM_THREADS", "unset")); + Rprintf(_(" omp_get_thread_limit() %d\n"), omp_get_thread_limit()); + Rprintf(_(" omp_get_max_threads() %d\n"), omp_get_max_threads()); + Rprintf(_(" OMP_THREAD_LIMIT %s\n"), mygetenv("OMP_THREAD_LIMIT", "unset")); // CRAN sets to 2 + Rprintf(_(" OMP_NUM_THREADS %s\n"), mygetenv("OMP_NUM_THREADS", "unset")); + Rprintf(_(" RestoreAfterFork %s\n"), RestoreAfterFork ? "true" : "false"); + Rprintf(_(" data.table is using %d threads. See ?setDTthreads.\n"), getDTthreads()); } return ScalarInteger(getDTthreads()); } diff --git a/src/rbindlist.c b/src/rbindlist.c index ee9bf56388..4b0d0e0f42 100644 --- a/src/rbindlist.c +++ b/src/rbindlist.c @@ -185,7 +185,7 @@ SEXP rbindlist(SEXP l, SEXP usenamesArg, SEXP fillArg, SEXP idcolArg) free(colMapRaw); // local scope in this branch to ensure can't be used below // to view map when debugging ... - // for (int i=0; i1?"s":""); + if (GetVerbose()) Rprintf(_("Found and copied %d column%s with a shared memory address\n"), nShared, nShared>1?"s":""); // GetVerbose() (slightly expensive call of all options) called here only when needed } } From 4d950a2c998d23067b038f2c42c260d3956af046 Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Wed, 16 Oct 2019 01:04:20 +0800 Subject: [PATCH 06/22] adding STOP messages --- src/fread.c | 80 +++++++++++++++++++++++++-------------------------- src/freadR.c | 42 +++++++++++++-------------- src/fwrite.c | 26 ++++++++--------- src/fwriteR.c | 2 +- 4 files changed, 75 insertions(+), 75 deletions(-) diff --git a/src/fread.c b/src/fread.c index f18261f25d..f84f87ff28 100644 --- a/src/fread.c +++ b/src/fread.c @@ -103,7 +103,7 @@ typedef struct FieldParseContext { static void Field(FieldParseContext *ctx); #define ASSERT(cond, msg, ...) \ - if (!(cond)) STOP("Internal error in line %d of fread.c, please report on data.table GitHub: " msg, __LINE__, __VA_ARGS__) // # nocov + if (!(cond)) STOP(_("Internal error in line %d of fread.c, please report on data.table GitHub: ") msg, __LINE__, __VA_ARGS__) // # nocov @@ -209,7 +209,7 @@ static char *typeLetter = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopq static char *typesAsString(int ncol) { int nLetters = strlen(typeLetter); - if (NUMTYPE>nLetters) STOP("Internal error: NUMTYPE(%d) > nLetters(%d)", NUMTYPE, nLetters); // # nocov + if (NUMTYPE>nLetters) STOP(_("Internal error: NUMTYPE(%d) > nLetters(%d)"), NUMTYPE, nLetters); // # nocov static char str[101]; int i=0; if (ncol<=100) { @@ -434,7 +434,7 @@ void copyFile(size_t fileSize, const char *msg, bool verbose) // only called in { double tt = wallclock(); mmp_copy = (char *)malloc((size_t)fileSize + 1/* extra \0 */); - if (!mmp_copy) STOP("Unable to allocate %s of contiguous virtual RAM. %s allocation.", filesize_to_str(fileSize), msg); + if (!mmp_copy) STOP(_("Unable to allocate %s of contiguous virtual RAM. %s allocation."), filesize_to_str(fileSize), msg); memcpy(mmp_copy, mmp, fileSize); sof = mmp_copy; eof = (char *)mmp_copy + fileSize; @@ -1110,7 +1110,7 @@ int freadMain(freadMainArgs _args) { int64_t nrowLimit = args.nrowLimit; NAstrings = args.NAstrings; - if (NAstrings==NULL) STOP("Internal error: NAstrings is itself NULL. When empty it should be pointer to NULL."); // # nocov + if (NAstrings==NULL) STOP(_("Internal error: NAstrings is itself NULL. When empty it should be pointer to NULL.")); // # nocov any_number_like_NAstrings = false; blank_is_a_NAstring = false; // if we know there are no nastrings which are numbers (like -999999) then in the number @@ -1128,12 +1128,12 @@ int freadMain(freadMainArgs _args) { const char *ch = *nastr; size_t nchar = strlen(ch); if (isspace(ch[0]) || isspace(ch[nchar-1])) - STOP("freadMain: NAstring <<%s>> has whitespace at the beginning or end", ch); + STOP(_("freadMain: NAstring <<%s>> has whitespace at the beginning or end"), ch); if (strcmp(ch,"T")==0 || strcmp(ch,"F")==0 || strcmp(ch,"TRUE")==0 || strcmp(ch,"FALSE")==0 || strcmp(ch,"True")==0 || strcmp(ch,"False")==0 || strcmp(ch,"1")==0 || strcmp(ch,"0")==0) - STOP("freadMain: NAstring <<%s>> is recognized as type boolean, this is not permitted.", ch); + STOP(_("freadMain: NAstring <<%s>> is recognized as type boolean, this is not permitted."), ch); char *end; errno = 0; strtod(ch, &end); // careful not to let "" get to here (see continue above) as strtod considers "" numeric @@ -1165,10 +1165,10 @@ int freadMain(freadMainArgs _args) { fill = args.fill; dec = args.dec; quote = args.quote; - if (args.sep == quote && quote!='\0') STOP("sep == quote ('%c') is not allowed", quote); - if (dec=='\0') STOP("dec='' not allowed. Should be '.' or ','"); - if (args.sep == dec) STOP("sep == dec ('%c') is not allowed", dec); - if (quote == dec) STOP("quote == dec ('%c') is not allowed", dec); + if (args.sep == quote && quote!='\0') STOP(_("sep == quote ('%c') is not allowed"), quote); + if (dec=='\0') STOP(_("dec='' not allowed. Should be '.' or ','")); + if (args.sep == dec) STOP(_("sep == dec ('%c') is not allowed"), dec); + if (quote == dec) STOP(_("quote == dec ('%c') is not allowed"), dec); // since quote=='\0' when user passed quote="", the logic in this file uses '*ch==quote && quote' otherwise // the ending \0 at eof could be treated as a quote (test xxx) @@ -1192,21 +1192,21 @@ int freadMain(freadMainArgs _args) { sof = args.input; fileSize = strlen(sof); eof = sof+fileSize; - if (*eof!='\0') STOP("Internal error: last byte of character input isn't \\0"); // # nocov + if (*eof!='\0') STOP(_("Internal error: last byte of character input isn't \\0")); // # nocov } else if (args.filename) { if (verbose) DTPRINT(_(" Opening file %s\n"), args.filename); const char* fnam = args.filename; #ifndef WIN32 int fd = open(fnam, O_RDONLY); - if (fd==-1) STOP("file not found: %s",fnam); + if (fd==-1) STOP(_("file not found: %s"),fnam); struct stat stat_buf; if (fstat(fd, &stat_buf) == -1) { close(fd); // # nocov - STOP("Opened file ok but couldn't obtain its size: %s", fnam); // # nocov + STOP(_("Opened file ok but couldn't obtain its size: %s"), fnam); // # nocov } fileSize = (size_t) stat_buf.st_size; - if (fileSize == 0) {close(fd); STOP("File is empty: %s", fnam);} + if (fileSize == 0) {close(fd); STOP(_("File is empty: %s"), fnam);} if (verbose) DTPRINT(_(" File opened, size = %s.\n"), filesize_to_str(fileSize)); // No MAP_POPULATE for faster nrows=10 and to make possible earlier progress bar in row count stage @@ -1224,33 +1224,33 @@ int freadMain(freadMainArgs _args) { hFile = CreateFile(fnam, GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); // FILE_SHARE_WRITE is required otherwise if the file is open in Excel, CreateFile fails. Should be ok now. if (hFile==INVALID_HANDLE_VALUE) { - if (GetLastError()==ERROR_FILE_NOT_FOUND) STOP("File not found: %s",fnam); + if (GetLastError()==ERROR_FILE_NOT_FOUND) STOP(_("File not found: %s"),fnam); if (attempts<4) Sleep(250); // 250ms } attempts++; // Looped retry to avoid ephemeral locks by system utilities as recommended here : http://support.microsoft.com/kb/316609 } - if (hFile==INVALID_HANDLE_VALUE) STOP("Unable to open file after %d attempts (error %d): %s", attempts, GetLastError(), fnam); + if (hFile==INVALID_HANDLE_VALUE) STOP(_("Unable to open file after %d attempts (error %d): %s"), attempts, GetLastError(), fnam); LARGE_INTEGER liFileSize; - if (GetFileSizeEx(hFile,&liFileSize)==0) { CloseHandle(hFile); STOP("GetFileSizeEx failed (returned 0) on file: %s", fnam); } + if (GetFileSizeEx(hFile,&liFileSize)==0) { CloseHandle(hFile); STOP(_("GetFileSizeEx failed (returned 0) on file: %s"), fnam); } fileSize = (size_t)liFileSize.QuadPart; - if (fileSize<=0) { CloseHandle(hFile); STOP("File is empty: %s", fnam); } + if (fileSize<=0) { CloseHandle(hFile); STOP(_("File is empty: %s"), fnam); } if (verbose) DTPRINT(_(" File opened, size = %s.\n"), filesize_to_str(fileSize)); HANDLE hMap=CreateFileMapping(hFile, NULL, PAGE_WRITECOPY, 0, 0, NULL); - if (hMap==NULL) { CloseHandle(hFile); STOP("This is Windows, CreateFileMapping returned error %d for file %s", GetLastError(), fnam); } + if (hMap==NULL) { CloseHandle(hFile); STOP(_("This is Windows, CreateFileMapping returned error %d for file %s"), GetLastError(), fnam); } mmp = MapViewOfFile(hMap,FILE_MAP_COPY,0,0,fileSize); // fileSize must be <= hilo passed to CreateFileMapping above. CloseHandle(hMap); // we don't need to keep the file open; the MapView keeps an internal reference; CloseHandle(hFile); // see https://msdn.microsoft.com/en-us/library/windows/desktop/aa366537(v=vs.85).aspx if (mmp == NULL) { #endif int nbit = 8*sizeof(char *); // #nocov - STOP("Opened %s file ok but could not memory map it. This is a %dbit process. %s.", filesize_to_str(fileSize), nbit, + STOP(_("Opened %s file ok but could not memory map it. This is a %dbit process. %s."), filesize_to_str(fileSize), nbit, nbit<=32 ? "Please upgrade to 64bit" : "There is probably not enough contiguous virtual memory available"); // # nocov } sof = (const char*) mmp; if (verbose) DTPRINT(_(" Memory mapped ok\n")); } else { - STOP("Internal error: Neither `input` nor `filename` are given, nothing to read."); // # nocov + STOP(_("Internal error: Neither `input` nor `filename` are given, nothing to read.")); // # nocov } eof = sof + fileSize; tMap = wallclock(); @@ -1279,7 +1279,7 @@ int freadMain(freadMainArgs _args) { DTWARN("GB-18030 encoding detected, however fread() is unable to decode it. Some character fields may be garbled.\n"); } else if (fileSize >= 2 && sof[0] + sof[1] == '\xFE' + '\xFF') { // either 0xFE 0xFF or 0xFF 0xFE - STOP("File is encoded in UTF-16, this encoding is not supported by fread(). Please recode the file to UTF-8."); + STOP(_("File is encoded in UTF-16, this encoding is not supported by fread(). Please recode the file to UTF-8.")); } if (eof>sof && (eof[-1]=='\x1A' || eof[-1]=='\0')) { char c = eof[-1]; @@ -1287,7 +1287,7 @@ int freadMain(freadMainArgs _args) { if (verbose) DTPRINT(_(" Last byte(s) of input found to be %s and removed.\n"), c ? "0x1A (Ctrl+Z)" : "0x00 (NUL)"); } - if (eof<=sof) STOP("Input is empty or only contains BOM or terminal control characters"); + if (eof<=sof) STOP(_("Input is empty or only contains BOM or terminal control characters")); } @@ -1373,7 +1373,7 @@ int freadMain(freadMainArgs _args) { // like wc -l, head -n and tail -n if (args.skipString) { ch = strstr(sof, args.skipString); // as there is now a \0 at the end, this is safely bounded - if (!ch) STOP("skip='%s' not found in input (it is case sensitive and literal; i.e., no patterns, wildcards or regex)", + if (!ch) STOP(_("skip='%s' not found in input (it is case sensitive and literal; i.e., no patterns, wildcards or regex)"), args.skipString); while (ch>sof && ch[-1]!='\n') ch--; // move to beginning of line pos = ch; @@ -1393,7 +1393,7 @@ int freadMain(freadMainArgs _args) { } } if (ch > sof && verbose) DTPRINT(_(" Skipped to line %llu in the file"), (llu)row1line); - if (ch>=eof) STOP("skip=%llu but the input only has %llu line%s", (llu)args.skipNrow, (llu)row1line, row1line>1?"s":""); + if (ch>=eof) STOP(_("skip=%llu but the input only has %llu line%s"), (llu)args.skipNrow, (llu)row1line, row1line>1?"s":""); pos = ch; } @@ -1402,7 +1402,7 @@ int freadMain(freadMainArgs _args) { while (ch=eof) STOP("Input is either empty, fully whitespace, or skip has been set after the last non-whitespace."); + if (ch>=eof) STOP(_("Input is either empty, fully whitespace, or skip has been set after the last non-whitespace.")); if (verbose) { if (lineStart>ch) DTPRINT(_(" Moved forward to first non-blank line (%d)\n"), row1line); DTPRINT(_(" Positioned on line %d starting: <<%s>>\n"), row1line, strlim(lineStart, 30)); @@ -1560,7 +1560,7 @@ int freadMain(freadMainArgs _args) { topQuoteRule = quoteRule; } } - if (!firstJumpEnd) STOP("Single column input contains invalid quotes. Self healing only effective when ncol>1"); + if (!firstJumpEnd) STOP(_("Single column input contains invalid quotes. Self healing only effective when ncol>1")); } quoteRule = topQuoteRule; @@ -1581,10 +1581,10 @@ int freadMain(freadMainArgs _args) { } } - if (ncol<1 || row1line<1) STOP("Internal error: ncol==%d line==%d after detecting sep, ncol and first line", ncol, row1line); // # nocov + if (ncol<1 || row1line<1) STOP(_("Internal error: ncol==%d line==%d after detecting sep, ncol and first line"), ncol, row1line); // # nocov int tt = countfields(&ch); ch = pos; // move back to start of line since countfields() moved to next - if (!fill && tt!=ncol) STOP("Internal error: first line has field count %d but expecting %d", tt, ncol); // # nocov + if (!fill && tt!=ncol) STOP(_("Internal error: first line has field count %d but expecting %d"), tt, ncol); // # nocov if (verbose) { DTPRINT(_(" Detected %d columns on line %d. This line is either column ") "names or first data row. Line starts as: <<%s>>\n", @@ -1627,7 +1627,7 @@ int freadMain(freadMainArgs _args) { type = (int8_t *)malloc((size_t)ncol * sizeof(int8_t)); tmpType = (int8_t *)malloc((size_t)ncol * sizeof(int8_t)); // used i) in sampling to not stop on errors when bad jump point and ii) when accepting user overrides - if (!type || !tmpType) STOP("Failed to allocate 2 x %d bytes for type and tmpType: %s", ncol, strerror(errno)); + if (!type || !tmpType) STOP(_("Failed to allocate 2 x %d bytes for type and tmpType: %s"), ncol, strerror(errno)); int8_t type0 = 1; while (disabled_parsers[type0]) type0++; @@ -1741,20 +1741,20 @@ int freadMain(freadMainArgs _args) { // Maybe previous line (if there is one, prevStart!=NULL) contains column names but there are too few (which is why it didn't become the first data row). ch = prevStart; int tt = countfields(&ch); - if (tt==ncol) STOP("Internal error: row before first data row has the same number of fields but we're not using it."); // # nocov - if (ch!=pos) STOP("Internal error: ch!=pos after counting fields in the line before the first data row."); // # nocov + if (tt==ncol) STOP(_("Internal error: row before first data row has the same number of fields but we're not using it.")); // # nocov + if (ch!=pos) STOP(_("Internal error: ch!=pos after counting fields in the line before the first data row.")); // # nocov if (verbose) DTPRINT(_("Types in 1st data row match types in 2nd data row but previous row has %d fields. Taking previous row as column names."), tt); if (ttncol) { - if (fill) STOP("Internal error: fill=true but there is a previous row which should already have been filled."); // # nocov + if (fill) STOP(_("Internal error: fill=true but there is a previous row which should already have been filled.")); // # nocov DTWARN("Detected %d column names but the data has %d columns. Filling rows automatically. Set fill=TRUE explicitly to avoid this warning.\n", tt, ncol); fill = true; type = (int8_t *)realloc(type, (size_t)tt * sizeof(int8_t)); tmpType = (int8_t *)realloc(tmpType, (size_t)tt * sizeof(int8_t)); - if (!type || !tmpType) STOP("Failed to realloc 2 x %d bytes for type and tmpType: %s", tt, strerror(errno)); + if (!type || !tmpType) STOP(_("Failed to realloc 2 x %d bytes for type and tmpType: %s"), tt, strerror(errno)); for (int j=ncol; j allocnrow) STOP("Internal error: sampleLines(%llu) > allocnrow(%llu)", (llu)sampleLines, (llu)allocnrow); // # nocov + if (sampleLines > allocnrow) STOP(_("Internal error: sampleLines(%llu) > allocnrow(%llu)"), (llu)sampleLines, (llu)allocnrow); // # nocov } } if (nrowLimit < allocnrow) { @@ -1849,7 +1849,7 @@ int freadMain(freadMainArgs _args) { colNames = NULL; // userOverride will assign V1, V2, etc } else { colNames = (lenOff*) calloc((size_t)ncol, sizeof(lenOff)); - if (!colNames) STOP("Unable to allocate %d*%d bytes for column name pointers: %s", ncol, sizeof(lenOff), strerror(errno)); + if (!colNames) STOP(_("Unable to allocate %d*%d bytes for column name pointers: %s"), ncol, sizeof(lenOff), strerror(errno)); if (sep==' ') while (*ch==' ') ch++; void *targets[9] = {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, colNames + autoFirstColName}; FieldParseContext fctx = { @@ -1871,7 +1871,7 @@ int freadMain(freadMainArgs _args) { } if (eol(&ch)) pos = ++ch; else if (*ch=='\0') pos = ch; - else STOP("Internal error: reading colnames ending on '%c'", *ch); // # nocov + else STOP(_("Internal error: reading colnames ending on '%c'"), *ch); // # nocov // now on first data row (row after column names) // when fill=TRUE and column names shorter (test 1635.2), leave calloc initialized lenOff.len==0 } @@ -1903,7 +1903,7 @@ int freadMain(freadMainArgs _args) { rowSize4 = 0; rowSize8 = 0; size = (int8_t *)malloc((size_t)ncol * sizeof(int8_t)); // TODO: remove size[] when we implement Pasha's idea to += size inside processor - if (!size) STOP("Failed to allocate %d bytes for size array: %s", ncol, strerror(errno)); + if (!size) STOP(_("Failed to allocate %d bytes for size array: %s"), ncol, strerror(errno)); nStringCols = 0; nNonStringCols = 0; for (int j=0; j INT32_MAX) STOP("Buffer size %lld is too large\n", initialBuffRows); + if (initialBuffRows > INT32_MAX) STOP(_("Buffer size %lld is too large\n"), initialBuffRows); nth = imin(nJumps, nth); if (verbose) DTPRINT(_("[11] Read the data\n")); @@ -2329,7 +2329,7 @@ int freadMain(freadMainArgs _args) { if (stopTeam) { if (internalErr[0]!='\0') { - STOP("%s", internalErr); // # nocov + STOP(_("%s"), internalErr); // # nocov } stopTeam = false; diff --git a/src/freadR.c b/src/freadR.c index d4c332e0d0..6d79b2a150 100644 --- a/src/freadR.c +++ b/src/freadR.c @@ -165,7 +165,7 @@ SEXP freadR( readInt64As = CT_STRING; } else if (strcmp(tt,"double")==0 || strcmp(tt,"numeric")==0) { readInt64As = CT_FLOAT64; - } else STOP("Invalid value integer64='%s'. Must be 'integer64', 'character', 'double' or 'numeric'", tt); + } else STOP(_("Invalid value integer64='%s'. Must be 'integer64', 'character', 'double' or 'numeric'"), tt); colClassesSxp = colClassesArg; @@ -173,19 +173,19 @@ SEXP freadR( dropSxp = dropArg; selectColClasses = false; if (!isNull(selectSxp)) { - if (!isNull(dropSxp)) STOP("Use either select= or drop= but not both."); + if (!isNull(dropSxp)) STOP(_("Use either select= or drop= but not both.")); if (isNewList(selectArg)) { if (!isNull(colClassesSxp)) - STOP("select= is type list for specifying types in select=, but colClasses= has been provided as well. Please remove colClasses=."); + STOP(_("select= is type list for specifying types in select=, but colClasses= has been provided as well. Please remove colClasses=.")); if (!length(getAttrib(selectArg, R_NamesSymbol))) - STOP("select= is type list but has no names; expecting list(type1=cols1, type2=cols2, ...)"); + STOP(_("select= is type list but has no names; expecting list(type1=cols1, type2=cols2, ...)")); colClassesSxp = selectArg; selectColClasses = true; selectSxp = R_NilValue; } else { if (!isNull(getAttrib(selectArg, R_NamesSymbol))) { if (!isNull(colClassesSxp)) - STOP("select= is a named vector specifying the columns to select and their types, but colClasses= has been provided as well. Please remove colClasses=."); + STOP(_("select= is a named vector specifying the columns to select and their types, but colClasses= has been provided as well. Please remove colClasses=.")); colClassesSxp = selectArg; selectSxp = getAttrib(selectArg, R_NamesSymbol); selectColClasses = true; @@ -193,7 +193,7 @@ SEXP freadR( } } else { if (TYPEOF(colClassesSxp)==VECSXP && !length(getAttrib(colClassesSxp, R_NamesSymbol))) - STOP("colClasses is type list but has no names"); + STOP(_("colClasses is type list but has no names")); } // Encoding, #563: Borrowed from do_setencoding from base R @@ -203,7 +203,7 @@ SEXP freadR( if (strcmp(tt, "unknown")==0) ienc = CE_NATIVE; else if (strcmp(tt, "Latin-1")==0) ienc = CE_LATIN1; else if (strcmp(tt, "UTF-8")==0) ienc = CE_UTF8; - else STOP("encoding='%s' invalid. Must be 'unknown', 'Latin-1' or 'UTF-8'", tt); // # nocov + else STOP(_("encoding='%s' invalid. Must be 'unknown', 'Latin-1' or 'UTF-8'"), tt); // # nocov // === end extras === RCHK = PROTECT(allocVector(VECSXP, 4)); @@ -244,8 +244,8 @@ static void applyDrop(SEXP items, int8_t *type, int ncol, int dropSource) { bool userOverride(int8_t *type, lenOff *colNames, const char *anchor, int ncol) { // use typeSize superfluously to avoid not-used warning; otherwise could move typeSize from fread.h into fread.c - if (typeSize[CT_BOOL8_N]!=1) STOP("Internal error: typeSize[CT_BOOL8_N] != 1"); // # nocov - if (typeSize[CT_STRING]!=8) STOP("Internal error: typeSize[CT_STRING] != 1"); // # nocov + if (typeSize[CT_BOOL8_N]!=1) STOP(_("Internal error: typeSize[CT_BOOL8_N] != 1")); // # nocov + if (typeSize[CT_STRING]!=8) STOP(_("Internal error: typeSize[CT_STRING] != 1")); // # nocov colNamesSxp = R_NilValue; SET_VECTOR_ELT(RCHK, 1, colNamesSxp=allocVector(STRSXP, ncol)); for (int i=0; incol) STOP("Column number %d (select[%d]) is too large for this table, which only has %d columns.",k,i+1,ncol); - if (type[k-1]<0) STOP("Column number %d ('%s') has been selected twice by select=", k, CHAR(STRING_ELT(colNamesSxp,k-1))); + if (k<0) STOP(_("Column number %d (select[%d]) is negative but should be in the range [1,ncol=%d]. Consider drop= for column exclusion."),k,i+1,ncol); + if (k==0) STOP(_("select = 0 (select[%d]) has no meaning. All values of select should be in the range [1,ncol=%d]."),i+1,ncol); + if (k>ncol) STOP(_("Column number %d (select[%d]) is too large for this table, which only has %d columns."),k,i+1,ncol); + if (type[k-1]<0) STOP(_("Column number %d ('%s') has been selected twice by select="), k, CHAR(STRING_ELT(colNamesSxp,k-1))); type[k-1] *= -1; // detect and error on duplicates on all types without calling duplicated() at all selectRankD[k-1] = rank++; // rank not i to skip missing column names } @@ -310,12 +310,12 @@ bool userOverride(int8_t *type, lenOff *colNames, const char *anchor, int ncol) SEXP typeEnum_idx = PROTECT(chmatch(colClassesSxp, typeRName_sxp, NUT)); if (LENGTH(colClassesSxp)==1) { signed char newType = typeEnum[INTEGER(typeEnum_idx)[0]-1]; - if (newType == CT_DROP) STOP("colClasses='NULL' is not permitted; i.e. to drop all columns and load nothing"); + if (newType == CT_DROP) STOP(_("colClasses='NULL' is not permitted; i.e. to drop all columns and load nothing")); for (int i=0; i CT_BOOL8_L) STOP("Field size is 1 but the field is of type %d\n", type[j]); + if (type[j] > CT_BOOL8_L) STOP(_("Field size is 1 but the field is of type %d\n"), type[j]); Rboolean *dest = (Rboolean *)((char *)DATAPTR(VECTOR_ELT(DT, resj)) + DTi*sizeof(Rboolean)); char *src1 = (char*)buff1 + off1; for (int i=0; i1024) STOP("buffMB=%d outside [1,1024]", args.buffMB); + if (args.buffMB<1 || args.buffMB>1024) STOP(_("buffMB=%d outside [1,1024]"), args.buffMB); size_t buffSize = (size_t)1024*1024*args.buffMB; int eolLen=strlen(args.eol), naLen=strlen(args.na); // Aside: codacy wants strnlen but strnlen is not in C99 (neither is strlen_s). To pass `gcc -std=c99 -Wall -pedantic` // we'd need `#define _POSIX_C_SOURCE 200809L` before #include but that seems a step too far // and platform specific. We prefer to be pure C99. - if (eolLen<=0) STOP("eol must be 1 or more bytes (usually either \\n or \\r\\n) but is length %d", eolLen); + if (eolLen<=0) STOP(_("eol must be 1 or more bytes (usually either \\n or \\r\\n) but is length %d"), eolLen); if (args.verbose) { DTPRINT(_("Column writers: ")); @@ -651,7 +651,7 @@ void fwriteMain(fwriteMainArgs args) width = getMaxListItemLen(args.columns[j], args.nrow); break; default: - STOP("Internal error: type %d has no max length method implemented", args.whichFun[j]); // # nocov + STOP(_("Internal error: type %d has no max length method implemented"), args.whichFun[j]); // # nocov } } if (args.whichFun[j]==WF_Float64 && args.scipen>0) width+=MIN(args.scipen,350); // clamp width to IEEE754 max to avoid scipen=99999 allocating buffer larger than can ever be written @@ -700,7 +700,7 @@ void fwriteMain(fwriteMainArgs args) } if (headerLen) { char *buff = malloc(headerLen); - if (!buff) STOP("Unable to allocate %d MiB for header: %s", headerLen / 1024 / 1024, strerror(errno)); + if (!buff) STOP(_("Unable to allocate %d MiB for header: %s"), headerLen / 1024 / 1024, strerror(errno)); char *ch = buff; if (args.bom) {*ch++=(char)0xEF; *ch++=(char)0xBB; *ch++=(char)0xBF; } // 3 appears above (search for "bom") memcpy(ch, args.yaml, yamlLen); @@ -728,13 +728,13 @@ void fwriteMain(fwriteMainArgs args) z_stream stream; if(init_stream(&stream)) { free(buff); // # nocov - STOP("Can't allocate gzip stream structure"); // # nocov + STOP(_("Can't allocate gzip stream structure")); // # nocov } size_t zbuffSize = deflateBound(&stream, headerLen); char *zbuff = malloc(zbuffSize); if (!zbuff) { free(buff); // # nocov - STOP("Unable to allocate %d MiB for zbuffer: %s", zbuffSize / 1024 / 1024, strerror(errno)); // # nocov + STOP(_("Unable to allocate %d MiB for zbuffer: %s"), zbuffSize / 1024 / 1024, strerror(errno)); // # nocov } size_t zbuffUsed = zbuffSize; ret1 = compressbuff(&stream, zbuff, &zbuffUsed, buff, (int)(ch-buff)); @@ -749,8 +749,8 @@ void fwriteMain(fwriteMainArgs args) // # nocov start int errwrite = errno; // capture write errno now incase close fails with a different errno CLOSE(f); - if (ret1) STOP("Compress gzip error: %d", ret1); - else STOP("%s: '%s'", strerror(errwrite), args.filename); + if (ret1) STOP(_("Compress gzip error: %d"), ret1); + else STOP(_("%s: '%s'"), strerror(errwrite), args.filename); // # nocov end } } @@ -758,7 +758,7 @@ void fwriteMain(fwriteMainArgs args) if (args.verbose) DTPRINT(_("done in %.3fs\n"), 1.0*(wallclock()-t0)); if (args.nrow == 0) { if (args.verbose) DTPRINT(_("No data rows present (nrow==0)\n")); - if (f!=-1 && CLOSE(f)) STOP("%s: '%s'", strerror(errno), args.filename); + if (f!=-1 && CLOSE(f)) STOP(_("%s: '%s'"), strerror(errno), args.filename); return; } @@ -790,7 +790,7 @@ void fwriteMain(fwriteMainArgs args) if(args.is_gzip){ z_stream stream; if(init_stream(&stream)) - STOP("Can't allocate gzip stream structure"); // # nocov + STOP(_("Can't allocate gzip stream structure")); // # nocov zbuffSize = deflateBound(&stream, buffSize); deflateEnd(&stream); } @@ -938,16 +938,16 @@ void fwriteMain(fwriteMainArgs args) } if (f!=-1 && CLOSE(f) && !failed) - STOP("%s: '%s'", strerror(errno), args.filename); // # nocov + STOP(_("%s: '%s'"), strerror(errno), args.filename); // # nocov // quoted '%s' in case of trailing spaces in the filename // If a write failed, the line above tries close() to clean up, but that might fail as well. So the // '&& !failed' is to not report the error as just 'closing file' but the next line for more detail // from the original error. if (failed<0) { - STOP("Error %d: one or more threads failed to allocate buffers or there was a compression error." // # nocov + STOP(_("Error %d: one or more threads failed to allocate buffers or there was a compression error.") // # nocov " Please try again with verbose=TRUE and try searching online for this error message.\n", failed); // # nocov } else if (failed>0) { - STOP("%s: '%s'", strerror(failed), args.filename); // # nocov + STOP(_("%s: '%s'"), strerror(failed), args.filename); // # nocov } return; } diff --git a/src/fwriteR.c b/src/fwriteR.c index 2170ddcdbb..96352837c3 100644 --- a/src/fwriteR.c +++ b/src/fwriteR.c @@ -100,7 +100,7 @@ const int getMaxListItemLen(const SEXP *col, const int64_t n) { } int width = writerMaxLen[wf]; if (width==0) { - if (wf!=WF_String) STOP("Internal error: row %d of list column has no max length method implemented", i+1); // # nocov + if (wf!=WF_String) STOP(_("Internal error: row %d of list column has no max length method implemented"), i+1); // # nocov const int l = LENGTH(this); for (int j=0; j Date: Wed, 16 Oct 2019 01:09:16 +0800 Subject: [PATCH 07/22] DTWARN messages --- src/fread.c | 18 +++++++++--------- src/freadR.c | 16 ++++++++-------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/fread.c b/src/fread.c index f84f87ff28..afc778d5fc 100644 --- a/src/fread.c +++ b/src/fread.c @@ -1092,7 +1092,7 @@ int freadMain(freadMainArgs _args) { bool warningsAreErrors = args.warningsAreErrors; if (freadCleanup()) { - DTWARN("Previous fread() session was not cleaned up properly. Cleaned up ok at the beginning of this fread() call.\n"); // # nocov + DTWARN(_("Previous fread() session was not cleaned up properly. Cleaned up ok at the beginning of this fread() call.\n")); // # nocov } if (verbose) DTPRINT(_("[01] Check arguments\n")); @@ -1276,7 +1276,7 @@ int freadMain(freadMainArgs _args) { else if (fileSize >= 4 && memcmp(sof, "\x84\x31\x95\x33", 4) == 0) { sof += 4; // ienc = CE_GB18030; - DTWARN("GB-18030 encoding detected, however fread() is unable to decode it. Some character fields may be garbled.\n"); + DTWARN(_("GB-18030 encoding detected, however fread() is unable to decode it. Some character fields may be garbled.\n")); } else if (fileSize >= 2 && sof[0] + sof[1] == '\xFE' + '\xFF') { // either 0xFE 0xFF or 0xFF 0xFE STOP(_("File is encoded in UTF-16, this encoding is not supported by fread(). Please recode the file to UTF-8.")); @@ -1565,7 +1565,7 @@ int freadMain(freadMainArgs _args) { quoteRule = topQuoteRule; if (quoteRule>1 && quote) { - DTWARN("Found and resolved improper quoting in first %d rows. If the fields are not quoted (e.g. field separator does not appear within any field), try quote=\"\" to avoid this warning.", jumpLines); + DTWARN(_("Found and resolved improper quoting in first %d rows. If the fields are not quoted (e.g. field separator does not appear within any field), try quote=\")\" to avoid this warning.", jumpLines); // TODO: include line number and text in warning. Could loop again with the standard quote rule to find the line that fails. } sep = topSep; @@ -1746,11 +1746,11 @@ int freadMain(freadMainArgs _args) { if (verbose) DTPRINT(_("Types in 1st data row match types in 2nd data row but previous row has %d fields. Taking previous row as column names."), tt); if (ttncol) { if (fill) STOP(_("Internal error: fill=true but there is a previous row which should already have been filled.")); // # nocov - DTWARN("Detected %d column names but the data has %d columns. Filling rows automatically. Set fill=TRUE explicitly to avoid this warning.\n", tt, ncol); + DTWARN(_("Detected %d column names but the data has %d columns. Filling rows automatically. Set fill=TRUE explicitly to avoid this warning.\n"), tt, ncol); fill = true; type = (int8_t *)realloc(type, (size_t)tt * sizeof(int8_t)); tmpType = (int8_t *)realloc(tmpType, (size_t)tt * sizeof(int8_t)); @@ -1910,7 +1910,7 @@ int freadMain(freadMainArgs _args) { if (type[j]==CT_DROP) { size[j]=0; ndrop++; continue; } if (type[j]> of inherent type '%s' down to '%s' ignored. Only overrides to a higher type are currently supported. " \ + DTWARN(_("Attempt to override column %d <<%.*s>> of inherent type '%s' down to '%s' ignored. Only overrides to a higher type are currently supported. ") \ "If this was intended, please coerce to the lower type afterwards.", j+1, colNames[j].len, colNamesAnchor+colNames[j].off, typeName[tmpType[j]], typeName[type[j]]); } @@ -2425,18 +2425,18 @@ int freadMain(freadMainArgs _args) { while (ch>", strlim(skippedFooter,500)); + DTWARN(_("Discarded single-line footer: <<%s>>"), strlim(skippedFooter,500)); } else { ch = headPos; int tt = countfields(&ch); - DTWARN("Stopped early on line %llu. Expected %d fields but found %d. Consider fill=TRUE and comment.char=. First discarded non-empty line: <<%s>>", + DTWARN(_("Stopped early on line %llu. Expected %d fields but found %d. Consider fill=TRUE and comment.char=. First discarded non-empty line: <<%s>>"), (llu)DTi+row1line, ncol, tt, strlim(skippedFooter,500)); } } } if (quoteRuleBumpedCh!=NULL && quoteRuleBumpedCh>. If the fields are not quoted (e.g. field separator does not appear within any field), try quote=\"\" to avoid this warning.", (llu)quoteRuleBumpedLine, strlim(quoteRuleBumpedCh, 500)); + DTWARN(_("Found and resolved improper quoting out-of-sample. First healed line %llu: <<%s>>. If the fields are not quoted (e.g. field separator does not appear within any field), try quote=\")\" to avoid this warning.", (llu)quoteRuleBumpedLine, strlim(quoteRuleBumpedCh, 500)); } if (verbose) { diff --git a/src/freadR.c b/src/freadR.c index 6d79b2a150..d8897801b1 100644 --- a/src/freadR.c +++ b/src/freadR.c @@ -226,11 +226,11 @@ static void applyDrop(SEXP items, int8_t *type, int ncol, int dropSource) { else snprintf(buff, 50, "colClasses[[%d]][%d]", dropSource+1, j+1); if (k==NA_INTEGER) { if (isString(items)) - DTWARN("Column name '%s' (%s) not found", CHAR(STRING_ELT(items, j)), buff); + DTWARN(_("Column name '%s' (%s) not found"), CHAR(STRING_ELT(items, j)), buff); else - DTWARN("%s is NA", buff); + DTWARN(_("%s is NA"), buff); } else { - DTWARN("%s is %d which is out of range [1,ncol=%d]", buff, k, ncol); + DTWARN(_("%s is %d which is out of range [1,ncol=%d]"), buff, k, ncol); } } else { type[k-1] = CT_DROP; @@ -279,7 +279,7 @@ bool userOverride(int8_t *type, lenOff *colNames, const char *anchor, int ncol) if (isString(selectSxp)) { selectInts = INTEGER(PROTECT(chmatch(selectSxp, colNamesSxp, NA_INTEGER))); nprotect++; for (int i=0; i=1 && k<=ncol) { if (type[k-1]<0) - DTWARN("Column %d ('%s') appears more than once in colClasses. The second time is colClasses[[%d]][%d].", k, CHAR(STRING_ELT(colNamesSxp,k-1)), i+1, j+1); + DTWARN(_("Column %d ('%s') appears more than once in colClasses. The second time is colClasses[[%d]][%d]."), k, CHAR(STRING_ELT(colNamesSxp,k-1)), i+1, j+1); else if (type[k-1]!=CT_DROP) { type[k-1] = -thisType; // freadMain checks bump up only not down. Deliberately don't catch here to test freadMain; e.g. test 959 if (w==NUT) SET_STRING_ELT(colClassesAs, k-1, STRING_ELT(listNames,i)); if (selectRankD) selectRankD[k-1] = rank++; } } else { - DTWARN("Column number %d (colClasses[[%d]][%d]) is out of range [1,ncol=%d]", k, i+1, j+1, ncol); + DTWARN(_("Column number %d (colClasses[[%d]][%d]) is out of range [1,ncol=%d]"), k, i+1, j+1, ncol); } } } From a30930dde690db36f6a41b4bf6933cbc1edea576 Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Wed, 16 Oct 2019 01:13:01 +0800 Subject: [PATCH 08/22] Error in forder --- src/forder.c | 42 +++++++++++++++++++++--------------------- src/fwrite.c | 5 ++--- 2 files changed, 23 insertions(+), 24 deletions(-) diff --git a/src/forder.c b/src/forder.c index 59d5cd61c3..e3af8c602a 100644 --- a/src/forder.c +++ b/src/forder.c @@ -61,7 +61,7 @@ static bool notFirst=false; * We have to trap on exit anyway to call savetl_end(). * NB: R_alloc() would be more convenient (fails within) and robust (auto free) but there is no R_realloc(). Implementing R_realloc() would be an alloc and copy, iiuc. * Calloc/Realloc needs to be Free'd, even before error() [R-exts$6.1.2]. An oom within Calloc causes a previous Calloc to leak so Calloc would still needs to be trapped anyway. - * Therefore, using <> approach to cleanup() on error. + * Therefore, using <> approach to cleanup() on error. */ static void free_ustr() { @@ -100,7 +100,7 @@ static void push(const int *x, const int n) { if (gs_thread_alloc[me] < newn) { gs_thread_alloc[me] = (newn < nrow/3) ? (1+(newn*2)/4096)*4096 : nrow; // [2|3] to not overflow and 3 not 2 to avoid allocating close to nrow (nrow groups occurs when all size 1 groups) gs_thread[me] = realloc(gs_thread[me], gs_thread_alloc[me]*sizeof(int)); - if (gs_thread[me]==NULL) Error("Failed to realloc thread private group size buffer to %d*4bytes", (int)gs_thread_alloc[me]); + if (gs_thread[me]==NULL) Error(_("Failed to realloc thread private group size buffer to %d*4bytes"), (int)gs_thread_alloc[me]); } memcpy(gs_thread[me]+gs_thread_n[me], x, n*sizeof(int)); gs_thread_n[me] += n; @@ -114,7 +114,7 @@ static void flush() { if (gs_alloc < newn) { gs_alloc = (newn < nrow/3) ? (1+(newn*2)/4096)*4096 : nrow; gs = realloc(gs, gs_alloc*sizeof(int)); - if (gs==NULL) Error("Failed to realloc group size result to %d*4bytes", (int)gs_alloc); + if (gs==NULL) Error(_("Failed to realloc group size result to %d*4bytes"), (int)gs_alloc); } memcpy(gs+gs_n, gs_thread[me], n*sizeof(int)); gs_n += n; @@ -257,7 +257,7 @@ static void cradix_r(SEXP *xsub, int n, int radix) memset(thiscounts, 0, 256*sizeof(int)); return; } - if (thiscounts[0] != 0) Error("Logical error. counts[0]=%d in cradix but should have been decremented to 0. radix=%d", thiscounts[0], radix); + if (thiscounts[0] != 0) Error(_("Logical error. counts[0]=%d in cradix but should have been decremented to 0. radix=%d"), thiscounts[0], radix); itmp = 0; for (int i=1; i<256; i++) { if (thiscounts[i] == 0) continue; @@ -272,9 +272,9 @@ static void cradix_r(SEXP *xsub, int n, int radix) static void cradix(SEXP *x, int n) { cradix_counts = (int *)calloc(ustr_maxlen*256, sizeof(int)); // counts for the letters of left-aligned strings - if (!cradix_counts) Error("Failed to alloc cradix_counts"); + if (!cradix_counts) Error(_("Failed to alloc cradix_counts")); cradix_xtmp = (SEXP *)malloc(ustr_n*sizeof(SEXP)); - if (!cradix_xtmp) Error("Failed to alloc cradix_tmp"); + if (!cradix_xtmp) Error(_("Failed to alloc cradix_tmp")); cradix_r(x, n, 0); free(cradix_counts); cradix_counts=NULL; free(cradix_xtmp); cradix_xtmp=NULL; @@ -285,8 +285,8 @@ static void range_str(SEXP *x, int n, uint64_t *out_min, uint64_t *out_max, int { int na_count=0; bool anyneedutf8=false; - if (ustr_n!=0) Error("Internal error: ustr isn't empty when starting range_str: ustr_n=%d, ustr_alloc=%d", ustr_n, ustr_alloc); // # nocov - if (ustr_maxlen!=0) Error("Internal error: ustr_maxlen isn't 0 when starting range_str"); // # nocov + if (ustr_n!=0) Error(_("Internal error: ustr isn't empty when starting range_str: ustr_n=%d, ustr_alloc=%d"), ustr_n, ustr_alloc); // # nocov + if (ustr_maxlen!=0) Error(_("Internal error: ustr_maxlen isn't 0 when starting range_str")); // # nocov // savetl_init() has already been called at the start of forder #pragma omp parallel for num_threads(getDTthreads()) for(int i=0; in) ustr_alloc = n; // clamp at n. Reaches n when fully unique (no dups) ustr = realloc(ustr, ustr_alloc * sizeof(SEXP)); - if (ustr==NULL) Error("Unable to realloc %d * %d bytes in range_str", ustr_alloc, sizeof(SEXP)); // # nocov + if (ustr==NULL) Error(_("Unable to realloc %d * %d bytes in range_str"), ustr_alloc, sizeof(SEXP)); // # nocov } ustr[ustr_n++] = s; SET_TRUELENGTH(s, -ustr_n); // unique in any order is fine. first-appearance order is achieved later in count_group @@ -324,7 +324,7 @@ static void range_str(SEXP *x, int n, uint64_t *out_min, uint64_t *out_max, int SEXP ustr2 = PROTECT(allocVector(STRSXP, ustr_n)); for (int i=0; i>(dround*8)) /*+Inf*/; - Error("Unknown non-finite value; not NA, NaN, -Inf or +Inf"); // # nocov + Error(_("Unknown non-finite value; not NA, NaN, -Inf or +Inf")); // # nocov } void radix_r(const int from, const int to, const int radix); @@ -511,7 +511,7 @@ SEXP forder(SEXP DT, SEXP by, SEXP retGrpArg, SEXP sortGroupsArg, SEXP ascArg, S if (sortType) { sortType=INTEGER(ascArg)[col]; // if sortType!=0 (not first-appearance) then +1/-1 comes from ascArg. if (sortType!=1 && sortType!=-1) - Error("Item %d of order (ascending/descending) is %d. Must be +1 or -1.", col+1, sortType); + Error(_("Item %d of order (ascending/descending) is %d. Must be +1 or -1."), col+1, sortType); } //Rprintf(_("sortType = %d\n"), sortType); switch(TYPEOF(x)) { @@ -553,7 +553,7 @@ SEXP forder(SEXP DT, SEXP by, SEXP retGrpArg, SEXP sortGroupsArg, SEXP ascArg, S range_str(STRING_PTR(x), nrow, &min, &max, &na_count); break; default: - Error("Column %d passed to [f]order is type '%s', not yet supported.", col+1, type2char(TYPEOF(x))); + Error(_("Column %d passed to [f]order is type '%s', not yet supported."), col+1, type2char(TYPEOF(x))); } TEND(3); if (na_count==nrow || (min>0 && min==max && na_count==0 && infnan_count==0)) { @@ -702,7 +702,7 @@ SEXP forder(SEXP DT, SEXP by, SEXP retGrpArg, SEXP sortGroupsArg, SEXP ascArg, S free_ustr(); // ustr could be left allocated and reused, but free now in case large and we're tight on ram break; default: - Error("Internal error: column not supported not caught earlier"); // # nocov + Error(_("Internal error: column not supported not caught earlier")); // # nocov } nradix += nbyte-1+(spare==0); TEND(4) @@ -716,12 +716,12 @@ SEXP forder(SEXP DT, SEXP by, SEXP retGrpArg, SEXP sortGroupsArg, SEXP ascArg, S int nth = getDTthreads(); TMP = (int *)malloc(nth*UINT16_MAX*sizeof(int)); // used by counting sort (my_n<=65536) in radix_r() UGRP = (uint8_t *)malloc(nth*256); // TODO: align TMP and UGRP to cache lines (and do the same for stack allocations too) - if (!TMP || !UGRP /*|| TMP%64 || UGRP%64*/) Error("Failed to allocate TMP or UGRP or they weren't cache line aligned: nth=%d", nth); + if (!TMP || !UGRP /*|| TMP%64 || UGRP%64*/) Error(_("Failed to allocate TMP or UGRP or they weren't cache line aligned: nth=%d"), nth); if (retgrp) { gs_thread = calloc(nth, sizeof(int *)); // thread private group size buffers gs_thread_alloc = calloc(nth, sizeof(int)); gs_thread_n = calloc(nth, sizeof(int)); - if (!gs_thread || !gs_thread_alloc || !gs_thread_n) Error("Could not allocate (very tiny) group size thread buffers"); + if (!gs_thread || !gs_thread_alloc || !gs_thread_n) Error(_("Could not allocate (very tiny) group size thread buffers")); } if (nradix) { radix_r(0, nrow-1, 0); // top level recursive call: (from, to, radix) @@ -1041,7 +1041,7 @@ void radix_r(const int from, const int to, const int radix) { uint16_t *counts = calloc(nBatch*256,sizeof(uint16_t)); uint8_t *ugrps = malloc(nBatch*256*sizeof(uint8_t)); int *ngrps = calloc(nBatch ,sizeof(int)); - if (!counts || !ugrps || !ngrps) Error("Failed to allocate parallel counts. my_n=%d, nBatch=%d", my_n, nBatch); + if (!counts || !ugrps || !ngrps) Error(_("Failed to allocate parallel counts. my_n=%d, nBatch=%d"), my_n, nBatch); bool skip=true; const int n_rem = nradix-radix-1; // how many radix are remaining after this one @@ -1150,7 +1150,7 @@ void radix_r(const int from, const int to, const int radix) { TEND(18 + notFirst*3) if (!skip) { int *TMP = malloc(my_n * sizeof(int)); - if (!TMP) Error("Unable to allocate TMP for my_n=%d items in parallel batch counting", my_n); + if (!TMP) Error(_("Unable to allocate TMP for my_n=%d items in parallel batch counting"), my_n); #pragma omp parallel for num_threads(getDTthreads()) for (int batch=0; batch= 2) { if (args.verbose && !hasPrinted) DTPRINT(_("\n")); DTPRINT(_("\rWritten %.1f%% of %d rows in %d secs using %d thread%s. ") - "maxBuffUsed=%d%%. ETA %d secs. ", + _("maxBuffUsed=%d%%. ETA %d secs. "), (100.0*end)/args.nrow, args.nrow, (int)(now-startTime), nth, nth==1?"":"s", maxBuffUsedPC, ETA); // TODO: use progress() as in fread @@ -945,10 +945,9 @@ void fwriteMain(fwriteMainArgs args) // from the original error. if (failed<0) { STOP(_("Error %d: one or more threads failed to allocate buffers or there was a compression error.") // # nocov - " Please try again with verbose=TRUE and try searching online for this error message.\n", failed); // # nocov + _(" Please try again with verbose=TRUE and try searching online for this error message.\n"), failed); // # nocov } else if (failed>0) { STOP(_("%s: '%s'"), strerror(failed), args.filename); // # nocov } return; } - From 57eeaced6d959a98b1cd351e94bc1f7b96fa84bf Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Wed, 16 Oct 2019 01:38:22 +0800 Subject: [PATCH 09/22] odds&ends more messages --- src/assign.c | 7 ++----- src/fread.c | 16 +++++++-------- src/freadR.c | 3 +-- src/froll.c | 48 ++++++++++++++++++++++----------------------- src/frolladaptive.c | 40 ++++++++++++++++++------------------- src/fwrite.c | 7 +++---- src/fwriteR.c | 5 ++--- src/gsumm.c | 3 +-- src/rbindlist.c | 12 ++++++------ 9 files changed, 66 insertions(+), 75 deletions(-) diff --git a/src/assign.c b/src/assign.c index 8e1651fdca..11dfbb51e9 100644 --- a/src/assign.c +++ b/src/assign.c @@ -387,8 +387,7 @@ SEXP assign(SEXP dt, SEXP rows, SEXP cols, SEXP newcolnames, SEXP values) } if (RHS_list_of_columns) { if (length(values)==0) - error(_("Supplied %d columns to be assigned an empty list (which may be an empty data.table or data.frame since they are lists too). ") - "To delete multiple columns use NULL instead. To add multiple empty list columns, use list(list()).", length(cols)); + error(_("Supplied %d columns to be assigned an empty list (which may be an empty data.table or data.frame since they are lists too). To delete multiple columns use NULL instead. To add multiple empty list columns, use list(list())."), length(cols)); if (length(values)!=length(cols)) { if (length(values)==1) { // test 351.1; c("colA","colB"):=list(13:15) uses 13:15 for both columns values = VECTOR_ELT(values,0); @@ -437,8 +436,7 @@ SEXP assign(SEXP dt, SEXP rows, SEXP cols, SEXP newcolnames, SEXP values) } if (nrow>0 && targetlen>0 && vlen>1 && vlen!=targetlen && (TYPEOF(existing)!=VECSXP || TYPEOF(thisvalue)==VECSXP)) { // note that isNewList(R_NilValue) is true so it needs to be TYPEOF(existing)!=VECSXP above - error(_("Supplied %d items to be assigned to %d items of column '%s'. If you wish to 'recycle' the RHS please ") - "use rep() to make this intent clear to readers of your code.", vlen, targetlen, CHAR(colnam)); + error(_("Supplied %d items to be assigned to %d items of column '%s'. If you wish to 'recycle' the RHS please use rep() to make this intent clear to readers of your code."), vlen, targetlen, CHAR(colnam)); } } // having now checked the inputs, from this point there should be no errors so we can now proceed to @@ -1246,4 +1244,3 @@ SEXP setcolorder(SEXP x, SEXP o) Free(tmp); return(R_NilValue); } - diff --git a/src/fread.c b/src/fread.c index afc778d5fc..296bb7c336 100644 --- a/src/fread.c +++ b/src/fread.c @@ -1245,7 +1245,7 @@ int freadMain(freadMainArgs _args) { #endif int nbit = 8*sizeof(char *); // #nocov STOP(_("Opened %s file ok but could not memory map it. This is a %dbit process. %s."), filesize_to_str(fileSize), nbit, - nbit<=32 ? "Please upgrade to 64bit" : "There is probably not enough contiguous virtual memory available"); // # nocov + nbit<=32 ? _("Please upgrade to 64bit") : _("There is probably not enough contiguous virtual memory available")); // # nocov } sof = (const char*) mmp; if (verbose) DTPRINT(_(" Memory mapped ok\n")); @@ -1301,8 +1301,8 @@ int freadMain(freadMainArgs _args) { while (ch>\n", + DTPRINT(_(" Detected %d columns on line %d. This line is either column names or first data row. Line starts as: <<%s>>\n"), tt, row1line, strlim(pos, 30)); DTPRINT(_(" Quote rule picked = %d\n"), quoteRule); DTPRINT(_(" fill=%s and the most number of columns found is %d\n"), fill?"true":"false", ncol); @@ -1596,7 +1595,7 @@ int freadMain(freadMainArgs _args) { if (ncol==1 && lastEOLreplaced && (eof[-1]=='\n' || eof[-1]=='\r')) { // Multiple newlines at the end are significant in the case of 1-column files only (multiple NA at the end) if (fileSize%4096==0) { - const char *msg = "This file is very unusual: it's one single column, ends with 2 or more end-of-line (representing several NA at the end), and is a multiple of 4096, too."; + const char *msg = _("This file is very unusual: it's one single column, ends with 2 or more end-of-line (representing several NA at the end), and is a multiple of 4096, too."); if (verbose) DTPRINT(_(" Copying file in RAM. %s\n"), msg); ASSERT(mmp_copy==NULL, "Internal error: mmp has already been copied due to abrupt non-eol ending, so it does not end with 2 or more eol.", 1/*dummy arg for macro*/); // #nocov copyFile(fileSize, msg, verbose); @@ -1910,8 +1909,7 @@ int freadMain(freadMainArgs _args) { if (type[j]==CT_DROP) { size[j]=0; ndrop++; continue; } if (type[j]> of inherent type '%s' down to '%s' ignored. Only overrides to a higher type are currently supported. ") \ - "If this was intended, please coerce to the lower type afterwards.", + DTWARN(_("Attempt to override column %d <<%.*s>> of inherent type '%s' down to '%s' ignored. Only overrides to a higher type are currently supported. If this was intended, please coerce to the lower type afterwards."), j+1, colNames[j].len, colNamesAnchor+colNames[j].off, typeName[tmpType[j]], typeName[type[j]]); } type[j] = tmpType[j]; @@ -2214,7 +2212,7 @@ int freadMain(freadMainArgs _args) { if (verbose) { char temp[1001]; int len = snprintf(temp, 1000, - "Column %d (\"%.*s\") bumped from '%s' to '%s' due to <<%.*s>> on row %llu\n", + _("Column %d (\"%.*s\") bumped from '%s' to '%s' due to <<%.*s>> on row %llu\n"), j+1, colNames[j].len, colNamesAnchor + colNames[j].off, typeName[abs(joldType)], typeName[abs(thisType)], (int)(tch-fieldStart), fieldStart, (llu)(ctx.DTi+myNrow)); diff --git a/src/freadR.c b/src/freadR.c index d8897801b1..2834010074 100644 --- a/src/freadR.c +++ b/src/freadR.c @@ -316,7 +316,7 @@ bool userOverride(int8_t *type, lenOff *colNames, const char *anchor, int ncol) } else if (selectColClasses==false) { if (LENGTH(colClassesSxp)!=ncol) STOP(_("colClasses= is an unnamed vector of types, length %d, but there are %d columns in the input. To specify types for a subset of columns, you can use ") - "a named vector, list format, or specify types using select= instead of colClasses=. Please see examples in ?fread.", LENGTH(colClassesSxp), ncol); + _("a named vector, list format, or specify types using select= instead of colClasses=. Please see examples in ?fread."), LENGTH(colClassesSxp), ncol); for (int i=0; imessage[0]), 500, "%s: window width longer than input vector, returning all NA vector\n", __func__); + snprintf(end(ans->message[0]), 500, _("%s: window width longer than input vector, returning all NA vector\n"), __func__); // implicit n_message limit discussed here: https://github.com/Rdatatable/data.table/issues/3423#issuecomment-487722586 for (int i=0; idbl_v[i] = fill; @@ -33,14 +33,14 @@ void frollmean(unsigned int algo, double *x, uint64_t nx, ans_t *ans, int k, int if (ans->status < 3 && align < 1) { // align center or left, only when no errors occurred int k_ = align==-1 ? k-1 : floor(k/2); // offset to shift if (verbose) - snprintf(end(ans->message[0]), 500, "%s: align %d, shift answer by %d\n", __func__, align, -k_); + snprintf(end(ans->message[0]), 500, _("%s: align %d, shift answer by %d\n"), __func__, align, -k_); memmove((char *)ans->dbl_v, (char *)ans->dbl_v + (k_*sizeof(double)), (nx-k_)*sizeof(double)); // apply shift to achieve expected align for (uint64_t i=nx-k_; idbl_v[i] = fill; } } if (verbose) - snprintf(end(ans->message[0]), 500, "%s: processing algo %u took %.3fs\n", __func__, algo, omp_get_wtime()-tic); + snprintf(end(ans->message[0]), 500, _("%s: processing algo %u took %.3fs\n"), __func__, algo, omp_get_wtime()-tic); } /* fast rolling mean - fast * when no info on NA (hasNA argument) then assume no NAs run faster version @@ -49,7 +49,7 @@ void frollmean(unsigned int algo, double *x, uint64_t nx, ans_t *ans, int k, int */ void frollmeanFast(double *x, uint64_t nx, ans_t *ans, int k, double fill, bool narm, int hasna, bool verbose) { if (verbose) - snprintf(end(ans->message[0]), 500, "%s: running for input length %llu, window %d, hasna %d, narm %d\n", __func__, (unsigned long long int)nx, k, hasna, (int)narm); + snprintf(end(ans->message[0]), 500, _("%s: running for input length %llu, window %d, hasna %d, narm %d\n"), __func__, (unsigned long long int)nx, k, hasna, (int)narm); long double w = 0.0; // sliding window aggregate bool truehasna = hasna>0; // flag to re-run with NA support if NAs detected if (!truehasna) { @@ -69,20 +69,20 @@ void frollmeanFast(double *x, uint64_t nx, ans_t *ans, int k, double fill, bool if (!R_FINITE((double) w)) { // mark to re-run with NA care if (hasna==-1) { // raise warning ans->status = 2; - snprintf(end(ans->message[2]), 500, "%s: hasNA=FALSE used but NA (or other non-finite) value(s) are present in input, use default hasNA=NA to avoid this warning", __func__); + snprintf(end(ans->message[2]), 500, _("%s: hasNA=FALSE used but NA (or other non-finite) value(s) are present in input, use default hasNA=NA to avoid this warning"), __func__); } if (verbose) - snprintf(end(ans->message[0]), 500, "%s: NA (or other non-finite) value(s) are present in input, re-running with extra care for NAs\n", __func__); + snprintf(end(ans->message[0]), 500, _("%s: NA (or other non-finite) value(s) are present in input, re-running with extra care for NAs\n"), __func__); w = 0.0; truehasna = true; } } else { // early stopping branch when NAs detected in first k obs if (hasna==-1) { // raise warning ans->status = 2; - snprintf(end(ans->message[2]), 500, "%s: hasNA=FALSE used but NA (or other non-finite) value(s) are present in input, use default hasNA=NA to avoid this warning", __func__); + snprintf(end(ans->message[2]), 500, _("%s: hasNA=FALSE used but NA (or other non-finite) value(s) are present in input, use default hasNA=NA to avoid this warning"), __func__); } if (verbose) - snprintf(end(ans->message[0]), 500, "%s: NA (or other non-finite) value(s) are present in input, skip non-NA attempt and run with extra care for NAs\n", __func__); + snprintf(end(ans->message[0]), 500, _("%s: NA (or other non-finite) value(s) are present in input, skip non-NA attempt and run with extra care for NAs\n"), __func__); w = 0.0; truehasna = true; } @@ -138,7 +138,7 @@ void frollmeanFast(double *x, uint64_t nx, ans_t *ans, int k, double fill, bool */ void frollmeanExact(double *x, uint64_t nx, ans_t *ans, int k, double fill, bool narm, int hasna, bool verbose) { if (verbose) - snprintf(end(ans->message[0]), 500, "%s: running in parallel for input length %llu, window %d, hasna %d, narm %d\n", __func__, (unsigned long long int)nx, k, hasna, (int)narm); + snprintf(end(ans->message[0]), 500, _("%s: running in parallel for input length %llu, window %d, hasna %d, narm %d\n"), __func__, (unsigned long long int)nx, k, hasna, (int)narm); for (int i=0; idbl_v[i] = fill; } @@ -170,13 +170,13 @@ void frollmeanExact(double *x, uint64_t nx, ans_t *ans, int k, double fill, bool if (truehasna) { if (hasna==-1) { // raise warning ans->status = 2; - snprintf(end(ans->message[2]), 500, "%s: hasNA=FALSE used but NA (or other non-finite) value(s) are present in input, use default hasNA=NA to avoid this warning", __func__); + snprintf(end(ans->message[2]), 500, _("%s: hasNA=FALSE used but NA (or other non-finite) value(s) are present in input, use default hasNA=NA to avoid this warning"), __func__); } if (verbose) { if (narm) { - snprintf(end(ans->message[0]), 500, "%s: NA (or other non-finite) value(s) are present in input, re-running with extra care for NAs\n", __func__); + snprintf(end(ans->message[0]), 500, _("%s: NA (or other non-finite) value(s) are present in input, re-running with extra care for NAs\n"), __func__); } else { - snprintf(end(ans->message[0]), 500, "%s: NA (or other non-finite) value(s) are present in input, na.rm was FALSE so in 'exact' implementation NAs were handled already, no need to re-run\n", __func__); + snprintf(end(ans->message[0]), 500, _("%s: NA (or other non-finite) value(s) are present in input, na.rm was FALSE so in 'exact' implementation NAs were handled already, no need to re-run\n"), __func__); } } } @@ -224,7 +224,7 @@ void frollmeanExact(double *x, uint64_t nx, ans_t *ans, int k, double fill, bool void frollsum(unsigned int algo, double *x, uint64_t nx, ans_t *ans, int k, int align, double fill, bool narm, int hasna, bool verbose) { if (nx < k) { if (verbose) - snprintf(end(ans->message[0]), 500, "%s: window width longer than input vector, returning all NA vector\n", __func__); + snprintf(end(ans->message[0]), 500, _("%s: window width longer than input vector, returning all NA vector\n"), __func__); for (int i=0; idbl_v[i] = fill; } @@ -241,18 +241,18 @@ void frollsum(unsigned int algo, double *x, uint64_t nx, ans_t *ans, int k, int if (ans->status < 3 && align < 1) { int k_ = align==-1 ? k-1 : floor(k/2); if (verbose) - snprintf(end(ans->message[0]), 500, "%s: align %d, shift answer by %d\n", __func__, align, -k_); + snprintf(end(ans->message[0]), 500, _("%s: align %d, shift answer by %d\n"), __func__, align, -k_); memmove((char *)ans->dbl_v, (char *)ans->dbl_v + (k_*sizeof(double)), (nx-k_)*sizeof(double)); for (uint64_t i=nx-k_; idbl_v[i] = fill; } } if (verbose) - snprintf(end(ans->message[0]), 500, "%s: processing algo %u took %.3fs\n", __func__, algo, omp_get_wtime()-tic); + snprintf(end(ans->message[0]), 500, _("%s: processing algo %u took %.3fs\n"), __func__, algo, omp_get_wtime()-tic); } void frollsumFast(double *x, uint64_t nx, ans_t *ans, int k, double fill, bool narm, int hasna, bool verbose) { if (verbose) - snprintf(end(ans->message[0]), 500, "%s: running for input length %llu, window %d, hasna %d, narm %d\n", __func__, (unsigned long long int)nx, k, hasna, (int)narm); + snprintf(end(ans->message[0]), 500, _("%s: running for input length %llu, window %d, hasna %d, narm %d\n"), __func__, (unsigned long long int)nx, k, hasna, (int)narm); long double w = 0.0; bool truehasna = hasna>0; if (!truehasna) { @@ -272,20 +272,20 @@ void frollsumFast(double *x, uint64_t nx, ans_t *ans, int k, double fill, bool n if (!R_FINITE((double) w)) { if (hasna==-1) { ans->status = 2; - snprintf(end(ans->message[2]), 500, "%s: hasNA=FALSE used but NA (or other non-finite) value(s) are present in input, use default hasNA=NA to avoid this warning", __func__); + snprintf(end(ans->message[2]), 500, _("%s: hasNA=FALSE used but NA (or other non-finite) value(s) are present in input, use default hasNA=NA to avoid this warning"), __func__); } if (verbose) - snprintf(end(ans->message[0]), 500, "%s: NA (or other non-finite) value(s) are present in input, re-running with extra care for NAs\n", __func__); + snprintf(end(ans->message[0]), 500, _("%s: NA (or other non-finite) value(s) are present in input, re-running with extra care for NAs\n"), __func__); w = 0.0; truehasna = true; } } else { if (hasna==-1) { ans->status = 2; - snprintf(end(ans->message[2]), 500, "%s: hasNA=FALSE used but NA (or other non-finite) value(s) are present in input, use default hasNA=NA to avoid this warning", __func__); + snprintf(end(ans->message[2]), 500, _("%s: hasNA=FALSE used but NA (or other non-finite) value(s) are present in input, use default hasNA=NA to avoid this warning"), __func__); } if (verbose) - snprintf(end(ans->message[0]), 500, "%s: NA (or other non-finite) value(s) are present in input, skip non-NA attempt and run with extra care for NAs\n", __func__); + snprintf(end(ans->message[0]), 500, _("%s: NA (or other non-finite) value(s) are present in input, skip non-NA attempt and run with extra care for NAs\n"), __func__); w = 0.0; truehasna = true; } @@ -336,7 +336,7 @@ void frollsumFast(double *x, uint64_t nx, ans_t *ans, int k, double fill, bool n } void frollsumExact(double *x, uint64_t nx, ans_t *ans, int k, double fill, bool narm, int hasna, bool verbose) { if (verbose) - snprintf(end(ans->message[0]), 500, "%s: running in parallel for input length %llu, window %d, hasna %d, narm %d\n", __func__, (unsigned long long int)nx, k, hasna, (int)narm); + snprintf(end(ans->message[0]), 500, _("%s: running in parallel for input length %llu, window %d, hasna %d, narm %d\n"), __func__, (unsigned long long int)nx, k, hasna, (int)narm); for (int i=0; idbl_v[i] = fill; } @@ -363,13 +363,13 @@ void frollsumExact(double *x, uint64_t nx, ans_t *ans, int k, double fill, bool if (truehasna) { if (hasna==-1) { ans->status = 2; - snprintf(end(ans->message[2]), 500, "%s: hasNA=FALSE used but NA (or other non-finite) value(s) are present in input, use default hasNA=NA to avoid this warning", __func__); + snprintf(end(ans->message[2]), 500, _("%s: hasNA=FALSE used but NA (or other non-finite) value(s) are present in input, use default hasNA=NA to avoid this warning"), __func__); } if (verbose) { if (narm) { - snprintf(end(ans->message[0]), 500, "%s: NA (or other non-finite) value(s) are present in input, re-running with extra care for NAs\n", __func__); + snprintf(end(ans->message[0]), 500, _("%s: NA (or other non-finite) value(s) are present in input, re-running with extra care for NAs\n"), __func__); } else { - snprintf(end(ans->message[0]), 500, "%s: NA (or other non-finite) value(s) are present in input, na.rm was FALSE so in 'exact' implementation NAs were handled already, no need to re-run\n", __func__); + snprintf(end(ans->message[0]), 500, _("%s: NA (or other non-finite) value(s) are present in input, na.rm was FALSE so in 'exact' implementation NAs were handled already, no need to re-run\n"), __func__); } } } diff --git a/src/frolladaptive.c b/src/frolladaptive.c index 9dc5581a83..2da77343d4 100644 --- a/src/frolladaptive.c +++ b/src/frolladaptive.c @@ -20,7 +20,7 @@ void fadaptiverollmean(unsigned int algo, double *x, uint64_t nx, ans_t *ans, in fadaptiverollmeanExact(x, nx, ans, k, fill, narm, hasna, verbose); } if (verbose) - snprintf(end(ans->message[0]), 500, "%s: processing algo %u took %.3fs\n", __func__, algo, omp_get_wtime()-tic); + snprintf(end(ans->message[0]), 500, _("%s: processing algo %u took %.3fs\n"), __func__, algo, omp_get_wtime()-tic); // implicit n_message limit discussed here: https://github.com/Rdatatable/data.table/issues/3423#issuecomment-487722586 } /* fast adaptive rolling mean - fast @@ -30,13 +30,13 @@ void fadaptiverollmean(unsigned int algo, double *x, uint64_t nx, ans_t *ans, in */ void fadaptiverollmeanFast(double *x, uint64_t nx, ans_t *ans, int *k, double fill, bool narm, int hasna, bool verbose) { if (verbose) - snprintf(end(ans->message[0]), 500, "%s: running for input length %llu, hasna %d, narm %d\n", __func__, (unsigned long long int)nx, hasna, (int) narm); + snprintf(end(ans->message[0]), 500, _("%s: running for input length %llu, hasna %d, narm %d\n"), __func__, (unsigned long long int)nx, hasna, (int) narm); bool truehasna = hasna>0; // flag to re-run if NAs detected long double w = 0.0; double *cs = malloc(nx*sizeof(double)); // cumsum vector, same as double cs[nx] but no segfault if (!cs) { // # nocov start ans->status = 3; // raise error - snprintf(ans->message[3], 500, "%s: Unable to allocate memory for cumsum", __func__); + snprintf(ans->message[3], 500, _("%s: Unable to allocate memory for cumsum"), __func__); free(cs); return; } // # nocov end @@ -59,10 +59,10 @@ void fadaptiverollmeanFast(double *x, uint64_t nx, ans_t *ans, int *k, double fi } else { // update truehasna flag if NAs detected if (hasna==-1) { // raise warning ans->status = 2; - snprintf(end(ans->message[2]), 500, "%s: hasNA=FALSE used but NA (or other non-finite) value(s) are present in input, use default hasNA=NA to avoid this warning", __func__); + snprintf(end(ans->message[2]), 500, _("%s: hasNA=FALSE used but NA (or other non-finite) value(s) are present in input, use default hasNA=NA to avoid this warning"), __func__); } if (verbose) - snprintf(end(ans->message[0]), 500, "%s: NA (or other non-finite) value(s) are present in input, re-running with extra care for NAs\n", __func__); + snprintf(end(ans->message[0]), 500, _("%s: NA (or other non-finite) value(s) are present in input, re-running with extra care for NAs\n"), __func__); w = 0.0; truehasna = true; } @@ -72,7 +72,7 @@ void fadaptiverollmeanFast(double *x, uint64_t nx, ans_t *ans, int *k, double fi uint64_t *cn = malloc(nx*sizeof(uint64_t)); // cumulative NA counter, used the same way as cumsum, same as uint64_t cn[nx] but no segfault if (!cn) { // # nocov start ans->status = 3; // raise error - snprintf(ans->message[3], 500, "%s: Unable to allocate memory for cum NA counter", __func__); + snprintf(ans->message[3], 500, _("%s: Unable to allocate memory for cum NA counter"), __func__); free(cs); free(cn); return; @@ -115,7 +115,7 @@ void fadaptiverollmeanFast(double *x, uint64_t nx, ans_t *ans, int *k, double fi */ void fadaptiverollmeanExact(double *x, uint64_t nx, ans_t *ans, int *k, double fill, bool narm, int hasna, bool verbose) { if (verbose) - snprintf(end(ans->message[0]), 500, "%s: running in parallel for input length %llu, hasna %d, narm %d\n", __func__, (unsigned long long int)nx, hasna, (int) narm); + snprintf(end(ans->message[0]), 500, _("%s: running in parallel for input length %llu, hasna %d, narm %d\n"), __func__, (unsigned long long int)nx, hasna, (int) narm); bool truehasna = hasna>0; // flag to re-run if NAs detected if (!truehasna || !narm) { // narm=FALSE handled here as NAs properly propagated in exact algo #pragma omp parallel for num_threads(getDTthreads()) @@ -148,13 +148,13 @@ void fadaptiverollmeanExact(double *x, uint64_t nx, ans_t *ans, int *k, double f if (truehasna) { if (hasna==-1) { // raise warning ans->status = 2; - snprintf(end(ans->message[2]), 500, "%s: hasNA=FALSE used but NA (or other non-finite) value(s) are present in input, use default hasNA=NA to avoid this warning", __func__); + snprintf(end(ans->message[2]), 500, _("%s: hasNA=FALSE used but NA (or other non-finite) value(s) are present in input, use default hasNA=NA to avoid this warning"), __func__); } if (verbose) { if (narm) { - snprintf(end(ans->message[0]), 500, "%s: NA (or other non-finite) value(s) are present in input, re-running with extra care for NAs\n", __func__); + snprintf(end(ans->message[0]), 500, _("%s: NA (or other non-finite) value(s) are present in input, re-running with extra care for NAs\n"), __func__); } else { - snprintf(end(ans->message[0]), 500, "%s: NA (or other non-finite) value(s) are present in input, na.rm was FALSE so in 'exact' implementation NAs were handled already, no need to re-run\n", __func__); + snprintf(end(ans->message[0]), 500, _("%s: NA (or other non-finite) value(s) are present in input, na.rm was FALSE so in 'exact' implementation NAs were handled already, no need to re-run\n"), __func__); } } } @@ -215,17 +215,17 @@ void fadaptiverollsum(unsigned int algo, double *x, uint64_t nx, ans_t *ans, int fadaptiverollsumExact(x, nx, ans, k, fill, narm, hasna, verbose); } if (verbose) - snprintf(end(ans->message[0]), 500, "%s: processing algo %u took %.3fs\n", __func__, algo, omp_get_wtime()-tic); + snprintf(end(ans->message[0]), 500, _("%s: processing algo %u took %.3fs\n"), __func__, algo, omp_get_wtime()-tic); } void fadaptiverollsumFast(double *x, uint64_t nx, ans_t *ans, int *k, double fill, bool narm, int hasna, bool verbose) { if (verbose) - snprintf(end(ans->message[0]), 500, "%s: running for input length %llu, hasna %d, narm %d\n", __func__, (unsigned long long int)nx, hasna, (int) narm); + snprintf(end(ans->message[0]), 500, _("%s: running for input length %llu, hasna %d, narm %d\n"), __func__, (unsigned long long int)nx, hasna, (int) narm); bool truehasna = hasna>0; long double w = 0.0; double *cs = malloc(nx*sizeof(double)); if (!cs) { // # nocov start ans->status = 3; - snprintf(ans->message[3], 500, "%s: Unable to allocate memory for cumsum", __func__); + snprintf(ans->message[3], 500, _("%s: Unable to allocate memory for cumsum"), __func__); free(cs); return; } // # nocov end @@ -248,10 +248,10 @@ void fadaptiverollsumFast(double *x, uint64_t nx, ans_t *ans, int *k, double fil } else { if (hasna==-1) { ans->status = 2; - snprintf(end(ans->message[2]), 500, "%s: hasNA=FALSE used but NA (or other non-finite) value(s) are present in input, use default hasNA=NA to avoid this warning", __func__); + snprintf(end(ans->message[2]), 500, _("%s: hasNA=FALSE used but NA (or other non-finite) value(s) are present in input, use default hasNA=NA to avoid this warning"), __func__); } if (verbose) - snprintf(end(ans->message[0]), 500, "%s: NA (or other non-finite) value(s) are present in input, re-running with extra care for NAs\n", __func__); + snprintf(end(ans->message[0]), 500, _("%s: NA (or other non-finite) value(s) are present in input, re-running with extra care for NAs\n"), __func__); w = 0.0; truehasna = true; } @@ -261,7 +261,7 @@ void fadaptiverollsumFast(double *x, uint64_t nx, ans_t *ans, int *k, double fil uint64_t *cn = malloc(nx*sizeof(uint64_t)); if (!cn) { // # nocov start ans->status = 3; - snprintf(ans->message[3], 500, "%s: Unable to allocate memory for cum NA counter", __func__); + snprintf(ans->message[3], 500, _("%s: Unable to allocate memory for cum NA counter"), __func__); free(cs); free(cn); return; @@ -299,7 +299,7 @@ void fadaptiverollsumFast(double *x, uint64_t nx, ans_t *ans, int *k, double fil } void fadaptiverollsumExact(double *x, uint64_t nx, ans_t *ans, int *k, double fill, bool narm, int hasna, bool verbose) { if (verbose) - snprintf(end(ans->message[0]), 500, "%s: running in parallel for input length %llu, hasna %d, narm %d\n", __func__, (unsigned long long int)nx, hasna, (int) narm); + snprintf(end(ans->message[0]), 500, _("%s: running in parallel for input length %llu, hasna %d, narm %d\n"), __func__, (unsigned long long int)nx, hasna, (int) narm); bool truehasna = hasna>0; if (!truehasna || !narm) { #pragma omp parallel for num_threads(getDTthreads()) @@ -327,13 +327,13 @@ void fadaptiverollsumExact(double *x, uint64_t nx, ans_t *ans, int *k, double fi if (truehasna) { if (hasna==-1) { ans->status = 2; - snprintf(end(ans->message[2]), 500, "%s: hasNA=FALSE used but NA (or other non-finite) value(s) are present in input, use default hasNA=NA to avoid this warning", __func__); + snprintf(end(ans->message[2]), 500, _("%s: hasNA=FALSE used but NA (or other non-finite) value(s) are present in input, use default hasNA=NA to avoid this warning"), __func__); } if (verbose) { if (narm) { - snprintf(end(ans->message[0]), 500, "%s: NA (or other non-finite) value(s) are present in input, re-running with extra care for NAs\n", __func__); + snprintf(end(ans->message[0]), 500, _("%s: NA (or other non-finite) value(s) are present in input, re-running with extra care for NAs\n"), __func__); } else { - snprintf(end(ans->message[0]), 500, "%s: NA (or other non-finite) value(s) are present in input, na.rm was FALSE so in 'exact' implementation NAs were handled already, no need to re-run\n", __func__); + snprintf(end(ans->message[0]), 500, _("%s: NA (or other non-finite) value(s) are present in input, na.rm was FALSE so in 'exact' implementation NAs were handled already, no need to re-run\n"), __func__); } } } diff --git a/src/fwrite.c b/src/fwrite.c index a12cc65059..bd1185dee2 100644 --- a/src/fwrite.c +++ b/src/fwrite.c @@ -678,8 +678,8 @@ void fwriteMain(fwriteMainArgs args) // # nocov start int erropen = errno; STOP(access( args.filename, F_OK ) != -1 ? - "%s: '%s'. Failed to open existing file for writing. Do you have write permission to it? Is this Windows and does another process such as Excel have it open?" : - "%s: '%s'. Unable to create new file for writing (it does not exist already). Do you have permission to write here, is there space on the disk and does the path exist?", + _("%s: '%s'. Failed to open existing file for writing. Do you have write permission to it? Is this Windows and does another process such as Excel have it open?") : + _("%s: '%s'. Unable to create new file for writing (it does not exist already). Do you have permission to write here, is there space on the disk and does the path exist?"), strerror(erropen), args.filename); // # nocov end } @@ -888,8 +888,7 @@ void fwriteMain(fwriteMainArgs args) int ETA = (int)((args.nrow-end)*((now-startTime)/end)); if (hasPrinted || ETA >= 2) { if (args.verbose && !hasPrinted) DTPRINT(_("\n")); - DTPRINT(_("\rWritten %.1f%% of %d rows in %d secs using %d thread%s. ") - _("maxBuffUsed=%d%%. ETA %d secs. "), + DTPRINT(_("\rWritten %.1f%% of %d rows in %d secs using %d thread%s. maxBuffUsed=%d%%. ETA %d secs. "), (100.0*end)/args.nrow, args.nrow, (int)(now-startTime), nth, nth==1?"":"s", maxBuffUsedPC, ETA); // TODO: use progress() as in fread diff --git a/src/fwriteR.c b/src/fwriteR.c index 96352837c3..115f2a761b 100644 --- a/src/fwriteR.c +++ b/src/fwriteR.c @@ -95,8 +95,8 @@ const int getMaxListItemLen(const SEXP *col, const int64_t n) { if (this==last) continue; // no point calling LENGTH() again on the same string; LENGTH is unlikely as fast as single pointer compare int32_t wf = whichWriter(this); if (TYPEOF(this)==VECSXP || wf==INT32_MIN || isFactor(this)) { - error(_("Row %d of list column is type '%s' - not yet implemented. fwrite() can write list columns containing items which are atomic vectors of") \ - " type logical, integer, integer64, double, complex and character.", i+1, isFactor(this) ? "factor" : type2char(TYPEOF(this))); + error(_("Row %d of list column is type '%s' - not yet implemented. fwrite() can write list columns containing items which are atomic vectors of type logical, integer, integer64, double, complex and character."), + i+1, isFactor(this) ? "factor" : type2char(TYPEOF(this))); } int width = writerMaxLen[wf]; if (width==0) { @@ -290,4 +290,3 @@ SEXP fwriteR( UNPROTECT(protecti); return(R_NilValue); } - diff --git a/src/gsumm.c b/src/gsumm.c index 685aafa977..e106ddc336 100644 --- a/src/gsumm.c +++ b/src/gsumm.c @@ -989,8 +989,7 @@ SEXP gmedian(SEXP x, SEXP narmArg) { }} break; default: - error(_("Type '%s' not supported by GForce median (gmedian). Either add the prefix stats::median(.) or turn ") - "off GForce optimization using options(datatable.optimize=1)", type2char(TYPEOF(x))); + error(_("Type '%s' not supported by GForce median (gmedian). Either add the prefix stats::median(.) or turn off GForce optimization using options(datatable.optimize=1)"), type2char(TYPEOF(x))); } if (!isInt64) copyMostAttrib(x, ans); // else the integer64 class needs to be dropped since double is always returned by gmedian diff --git a/src/rbindlist.c b/src/rbindlist.c index 4b0d0e0f42..a882648305 100644 --- a/src/rbindlist.c +++ b/src/rbindlist.c @@ -193,8 +193,8 @@ SEXP rbindlist(SEXP l, SEXP usenamesArg, SEXP fillArg, SEXP idcolArg) // Ensure no missings in both cases, and (when usenames==NA) all columns in same order too // We proceeded earlier as if fill was true, so varying ncol items will have missings here char buff[1001] = ""; - const char *extra = usenames==TRUE?"":" use.names='check' (default from v1.12.2) emits this message and proceeds as if use.names=FALSE for "\ - " backwards compatibility. See news item 5 in v1.12.2 for options to control this message."; + const char *extra = usenames==TRUE?"":_(" use.names='check' (default from v1.12.2) emits this message and proceeds as if use.names=FALSE for "\ + " backwards compatibility. See news item 5 in v1.12.2 for options to control this message."); for (int i=0; i=last) { // if tl>=0 then also tl>=last because last<=0 if (tl>=0) { sprintf(warnStr, // not direct warning as we're inside tl region - "Column %d of item %d is an ordered factor but level %d ['%s'] is missing from the ordered levels from column %d of item %d. " \ - "Each set of ordered factor levels should be an ordered subset of the first longest. A regular factor will be created for this column.", + _("Column %d of item %d is an ordered factor but level %d ['%s'] is missing from the ordered levels from column %d of item %d. " \ + "Each set of ordered factor levels should be an ordered subset of the first longest. A regular factor will be created for this column."), w+1, i+1, k+1, CHAR(s), longestW+1, longestI+1); } else { sprintf(warnStr, - "Column %d of item %d is an ordered factor with '%s'<'%s' in its levels. But '%s'<'%s' in the ordered levels from column %d of item %d. " \ - "A regular factor will be created for this column due to this ambiguity.", + _("Column %d of item %d is an ordered factor with '%s'<'%s' in its levels. But '%s'<'%s' in the ordered levels from column %d of item %d. " \ + "A regular factor will be created for this column due to this ambiguity."), w+1, i+1, CHAR(levelsD[k-1]), CHAR(s), CHAR(s), CHAR(levelsD[k-1]), longestW+1, longestI+1); // k>=1 (so k-1 is ok) because when k==0 last==0 and this branch wouldn't happen } From 9d596ac9717c6edc5a20c20c5ee4a8fc87f2bf48 Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Wed, 16 Oct 2019 01:43:05 +0800 Subject: [PATCH 10/22] cannot use _() with \r --- src/fwrite.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/fwrite.c b/src/fwrite.c index bd1185dee2..7099f8bf83 100644 --- a/src/fwrite.c +++ b/src/fwrite.c @@ -888,9 +888,9 @@ void fwriteMain(fwriteMainArgs args) int ETA = (int)((args.nrow-end)*((now-startTime)/end)); if (hasPrinted || ETA >= 2) { if (args.verbose && !hasPrinted) DTPRINT(_("\n")); - DTPRINT(_("\rWritten %.1f%% of %d rows in %d secs using %d thread%s. maxBuffUsed=%d%%. ETA %d secs. "), - (100.0*end)/args.nrow, args.nrow, (int)(now-startTime), nth, nth==1?"":"s", - maxBuffUsedPC, ETA); + DTPRINT("\rWritten %.1f%% of %d rows in %d secs using %d thread%s. maxBuffUsed=%d%%. ETA %d secs. ", + (100.0*end)/args.nrow, args.nrow, (int)(now-startTime), nth, nth==1?"":"s", + maxBuffUsedPC, ETA); // TODO: use progress() as in fread nextTime = now+1; hasPrinted = true; @@ -928,7 +928,7 @@ void fwriteMain(fwriteMainArgs args) if (hasPrinted) { // # nocov start if (!failed) { // clear the progress meter - DTPRINT(_("\r ") + DTPRINT("\r " " \r"); } else { // don't clear any potentially helpful output before error DTPRINT(_("\n")); From 710400a45c7998a19417bf899474eb7208e7f2f0 Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Wed, 16 Oct 2019 01:43:23 +0800 Subject: [PATCH 11/22] update .pot for src files --- src/data.table.pot | 2226 ++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 2064 insertions(+), 162 deletions(-) diff --git a/src/data.table.pot b/src/data.table.pot index eef36dc413..1bb137587e 100644 --- a/src/data.table.pot +++ b/src/data.table.pot @@ -1,5 +1,5 @@ # SOME DESCRIPTIVE TITLE. -# Copyright (C) 2019 +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-10-13 16:58+0800\n" +"POT-Creation-Date: 2019-10-16 01:42+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -30,6 +30,15 @@ msgstr "" msgid "Internal error: finalizer sees l=%d, tl=%d" msgstr "" +#: assign.c:123 +msgid "" +".internal.selfref ptr is NULL. This is expected and normal for a data.table " +"loaded from disk. Please remember to always setDT() immediately after " +"loading to prevent unexpected behavior. If this table was not loaded from " +"disk or you've already run setDT(), please report to data.table issue " +"tracker.\n" +msgstr "" + #: assign.c:126 msgid "Internal error: .internal.selfref ptr is not NULL or R_NilValue" msgstr "" @@ -72,6 +81,22 @@ msgid "" "table issue tracker: tl (%d) < l (%d) but tl of class is marked." msgstr "" +#: assign.c:219 +#, c-format +msgid "" +"tl (%d) is greater than 10,000 items over-allocated (l = %d). If you didn't " +"set the datatable.alloccol option to be very large, please report to data." +"table issue tracker including the result of sessionInfo()." +msgstr "" + +#: assign.c:221 +#, c-format +msgid "" +"Attempt to reduce allocation from %d to %d ignored. Can only increase " +"allocation via shallow copy. Please do not use DT[...]<- or DT$someCol<-. " +"Use := inside DT[...] instead." +msgstr "" + #: assign.c:229 msgid "" "Has getOption('datatable.alloccol') somehow become unset? It should be a " @@ -135,6 +160,17 @@ msgid "" "typeof() should always return 'list' for data.table." msgstr "" +#: assign.c:317 +#, c-format +msgid "Assigning to all %d rows\n" +msgstr "" + +#: assign.c:322 +msgid "" +"Coerced i from numeric to integer. Please pass integer for efficiency; e.g., " +"2L rather than 2" +msgstr "" + #: assign.c:325 #, c-format msgid "" @@ -148,6 +184,20 @@ msgstr "" msgid "i[%d] is %d which is out of range [1,nrow=%d]." msgstr "" +#: assign.c:334 +#, c-format +msgid "Assigning to %d row subset of %d rows\n" +msgstr "" + +#: assign.c:342 +#, c-format +msgid "Added %d new column%s initialized with all-NA\n" +msgstr "" + +#: assign.c:347 +msgid "length(LHS)==0; no columns to delete or assign RHS to." +msgstr "" + #: assign.c:361 msgid "" "set() on a data.frame is for changing existing columns, not adding new ones. " @@ -155,6 +205,12 @@ msgid "" "shallow copy." msgstr "" +#: assign.c:372 +msgid "" +"Coerced j from numeric to integer. Please pass integer for efficiency; e.g., " +"2L rather than 2" +msgstr "" + #: assign.c:375 #, c-format msgid "" @@ -172,20 +228,38 @@ msgstr "" msgid "newcolnames is supplied but isn't a character vector" msgstr "" +#: assign.c:380 +#, c-format +msgid "RHS_list_of_columns == %s\n" +msgstr "" + +#: assign.c:385 +#, c-format +msgid "" +"RHS_list_of_columns revised to true because RHS list has 1 item which is " +"NULL, or whose length %d is either 1 or targetlen (%d). Please unwrap RHS.\n" +msgstr "" + #: assign.c:390 #, c-format msgid "" "Supplied %d columns to be assigned an empty list (which may be an empty data." -"table or data.frame since they are lists too). " +"table or data.frame since they are lists too). To delete multiple columns " +"use NULL instead. To add multiple empty list columns, use list(list())." +msgstr "" + +#: assign.c:395 +#, c-format +msgid "Recycling single RHS list item across %d columns. Please unwrap RHS.\n" msgstr "" -#: assign.c:398 +#: assign.c:397 #, c-format msgid "" "Supplied %d columns to be assigned %d items. Please see NEWS for v1.12.2." msgstr "" -#: assign.c:406 +#: assign.c:405 #, c-format msgid "" "Item %d of column numbers in j is %d which is outside range [1,ncol=%d]. " @@ -193,18 +267,18 @@ msgid "" "Please use a data.table for that." msgstr "" -#: assign.c:407 +#: assign.c:406 #, c-format msgid "" "Item %d of column numbers in j is %d which is outside range [1,ncol=%d]. Use " "column names instead in j to add new columns." msgstr "" -#: assign.c:412 +#: assign.c:411 msgid "When deleting columns, i should not be provided" msgstr "" -#: assign.c:418 +#: assign.c:417 #, c-format msgid "" "RHS of assignment to existing column '%s' is zero length but not NULL. If " @@ -215,27 +289,38 @@ msgid "" "new column." msgstr "" -#: assign.c:423 +#: assign.c:422 #, c-format msgid "" "Internal error in assign.c: length(newcolnames)=%d, length(names)=%d, coln=%d" msgstr "" -#: assign.c:435 +#: assign.c:424 +#, c-format +msgid "Column '%s' does not exist to remove" +msgstr "" + +#: assign.c:430 +#, c-format +msgid "%d column matrix RHS of := will be treated as one vector" +msgstr "" + +#: assign.c:434 #, c-format msgid "" "Can't assign to column '%s' (type 'factor') a value of type '%s' (not " "character, factor, integer or numeric)" msgstr "" -#: assign.c:440 +#: assign.c:439 #, c-format msgid "" "Supplied %d items to be assigned to %d items of column '%s'. If you wish to " -"'recycle' the RHS please " +"'recycle' the RHS please use rep() to make this intent clear to readers of " +"your code." msgstr "" -#: assign.c:451 +#: assign.c:449 msgid "" "This data.table has either been loaded from disk (e.g. using readRDS()/" "load()) or constructed manually (e.g. using structure()). Please run setDT() " @@ -243,197 +328,254 @@ msgid "" "assigning by reference to it." msgstr "" -#: assign.c:452 +#: assign.c:450 #, c-format msgid "" "Internal error: oldtncol(%d) < oldncol(%d). Please report to data.table " "issue tracker, including result of sessionInfo()." msgstr "" -#: assign.c:456 +#: assign.c:452 +#, c-format +msgid "" +"truelength (%d) is greater than 10,000 items over-allocated (length = %d). " +"See ?truelength. If you didn't set the datatable.alloccol option very large, " +"please report to data.table issue tracker including the result of " +"sessionInfo()." +msgstr "" + +#: assign.c:454 #, c-format msgid "" "Internal error: DT passed to assign has not been allocated enough column " "slots. l=%d, tl=%d, adding %d" msgstr "" -#: assign.c:458 +#: assign.c:456 msgid "" "It appears that at some earlier point, names of this data.table have been " "reassigned. Please ensure to use setnames() rather than names<- or " "colnames<-. Otherwise, please report to data.table issue tracker." msgstr "" -#: assign.c:462 +#: assign.c:460 #, c-format msgid "Internal error: selfrefnames is ok but tl names [%d] != tl [%d]" msgstr "" -#: assign.c:473 +#: assign.c:471 msgid "" "Internal error: earlier error 'When deleting columns, i should not be " "provided' did not happen." msgstr "" -#: assign.c:566 +#: assign.c:482 +#, c-format +msgid "" +"RHS for item %d has been duplicated because NAMED==%d MAYBE_SHARED==%d, but " +"then is being plonked. length(values)==%d; length(cols)==%d)\n" +msgstr "" + +#: assign.c:487 +#, c-format +msgid "Direct plonk of unnamed RHS, no copy. NAMED==%d, MAYBE_SHARED==%d\n" +msgstr "" + +#: assign.c:556 +#, c-format +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 "" + +#: assign.c:564 msgid "Internal error: index name ends with trailing __" msgstr "" -#: assign.c:571 +#: assign.c:569 msgid "Internal error: Couldn't allocate memory for s4." msgstr "" -#: assign.c:582 +#: assign.c:580 msgid "Internal error: Couldn't allocate memory for s5." msgstr "" -#: assign.c:689 +#: assign.c:601 assign.c:617 +#, c-format +msgid "Dropping index '%s' due to an update on a key column\n" +msgstr "" + +#: assign.c:610 +#, c-format +msgid "Shortening index '%s' to '%s' due to an update on a key column\n" +msgstr "" + +#: assign.c:687 #, c-format msgid "Internal error: recycle length error not caught earlier. slen=%d len=%d" msgstr "" -#: assign.c:693 +#: assign.c:691 msgid "Internal error: memrecycle has received NULL colname" msgstr "" -#: assign.c:719 +#: assign.c:717 #, c-format msgid "" "Cannot assign 'factor' to '%s'. Factors can only be assigned to factor, " "character or list columns." msgstr "" -#: assign.c:733 +#: assign.c:731 #, c-format msgid "" "Assigning factor numbers to column %d named '%s'. But %d is outside the " "level range [1,%d]" msgstr "" -#: assign.c:741 +#: assign.c:739 #, 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:747 +#: assign.c:745 #, 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:768 +#: assign.c:766 msgid "" "Internal error: levels of target are either not unique or have truelength<0" msgstr "" -#: assign.c:807 +#: assign.c:805 #, c-format msgid "Unable to allocate working memory of %d bytes to combine factor levels" msgstr "" -#: assign.c:814 +#: assign.c:812 msgid "Internal error: extra level check sum failed" msgstr "" -#: assign.c:839 +#: assign.c:831 +#, c-format +msgid "" +"Coercing 'character' RHS to '%s' to match the type of the target column " +"(column %d named '%s')." +msgstr "" + +#: assign.c:837 #, c-format msgid "" "Cannot coerce 'list' RHS to 'integer64' to match the type of the target " "column (column %d named '%s')." msgstr "" -#: assign.c:945 +#: assign.c:842 +#, c-format +msgid "" +"Coercing 'list' RHS to '%s' to match the type of the target column (column " +"%d named '%s')." +msgstr "" + +#: assign.c:848 +#, c-format +msgid "Zero-copy coerce when assigning '%s' to '%s' column %d named '%s'.\n" +msgstr "" + +#: assign.c:943 #, c-format msgid "type '%s' cannot be coerced to '%s'" msgstr "" -#: assign.c:1065 +#: assign.c:1063 msgid "" "To assign integer64 to a character column, please use as.character() for " "clarity." msgstr "" -#: assign.c:1076 +#: assign.c:1074 #, c-format msgid "Unsupported column type in assign.c:memrecycle '%s'" msgstr "" -#: assign.c:1123 +#: assign.c:1121 #, c-format msgid "Internal error: writeNA passed a vector of type '%s'" msgstr "" -#: assign.c:1154 +#: assign.c:1152 #, c-format msgid "" "Internal error: savetl_init checks failed (%d %d %p %p). please report to " "data.table issue tracker." msgstr "" -#: assign.c:1162 +#: assign.c:1160 #, c-format msgid "Failed to allocate initial %d items in savetl_init" msgstr "" -#: assign.c:1171 +#: assign.c:1169 #, c-format msgid "" "Internal error: reached maximum %d items for savetl. Please report to data." "table issue tracker." msgstr "" -#: assign.c:1178 +#: assign.c:1176 #, c-format msgid "Failed to realloc saveds to %d items in savetl" msgstr "" -#: assign.c:1184 +#: assign.c:1182 #, c-format msgid "Failed to realloc savedtl to %d items in savetl" msgstr "" -#: assign.c:1207 +#: assign.c:1205 msgid "x must be a character vector" msgstr "" -#: assign.c:1208 +#: assign.c:1206 msgid "'which' must be an integer vector" msgstr "" -#: assign.c:1209 +#: assign.c:1207 msgid "'new' must be a character vector" msgstr "" -#: assign.c:1210 +#: assign.c:1208 #, c-format msgid "'new' is length %d. Should be the same as length of 'which' (%d)" msgstr "" -#: assign.c:1213 +#: assign.c:1211 #, c-format msgid "" "Item %d of 'which' is %d which is outside range of the length %d character " "vector" msgstr "" -#: assign.c:1223 +#: assign.c:1221 msgid "dt passed to setcolorder has no names" msgstr "" -#: assign.c:1225 +#: assign.c:1223 #, c-format msgid "Internal error: dt passed to setcolorder has %d columns but %d names" msgstr "" -#: assign.c:1232 +#: assign.c:1230 msgid "" "Internal error: o passed to Csetcolorder contains an NA or out-of-bounds" msgstr "" -#: assign.c:1234 +#: assign.c:1232 msgid "Internal error: o passed to Csetcolorder contains a duplicate" msgstr "" @@ -461,6 +603,11 @@ msgstr "" msgid "Item %d of lower (%d) is greater than item %d of upper (%d)" msgstr "" +#: between.c:82 +#, c-format +msgid "between parallel processing of integer took %8.3fs\n" +msgstr "" + #: between.c:88 msgid "x is integer64 but lower and/or upper are not." msgstr "" @@ -470,6 +617,11 @@ msgstr "" msgid "Item %d of lower (%lld) is greater than item %d of upper (%lld)" msgstr "" +#: between.c:112 +#, c-format +msgid "between parallel processing of integer64 took %8.3fs\n" +msgstr "" + #: between.c:115 msgid "" "x is not integer64 but lower and/or upper is integer64. Please align classes." @@ -480,11 +632,26 @@ msgstr "" msgid "Item %d of lower (%f) is greater than item %d of upper (%f)" msgstr "" +#: between.c:140 +#, c-format +msgid "between parallel processing of double with open bounds took %8.3fs\n" +msgstr "" + +#: between.c:157 +#, c-format +msgid "between parallel processing of double with closed bounds took %8.3fs\n" +msgstr "" + #: between.c:172 #, c-format msgid "Item %d of lower ('%s') is greater than item %d of upper ('%s')" msgstr "" +#: between.c:187 +#, c-format +msgid "between non-parallel processing of character took %8.3fs\n" +msgstr "" + #: between.c:190 #, c-format msgid "" @@ -681,6 +848,10 @@ msgid "" "recycled." msgstr "" +#: coalesce.c:50 +msgid "coalesce copied first item (inplace=FALSE)\n" +msgstr "" + #: coalesce.c:166 #, c-format msgid "Unsupported type: %s" @@ -802,6 +973,11 @@ msgid "" "dogroups" msgstr "" +#: dogroups.c:319 +#, c-format +msgid "Group %d column '%s': %s" +msgstr "" + #: dogroups.c:326 msgid "j doesn't evaluate to the same number of columns for each group" msgstr "" @@ -817,11 +993,49 @@ msgid "" "integer() or numeric()." msgstr "" +#: dogroups.c:363 +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:365 +#, c-format +msgid "" +"Column %d of j is a named vector (each item down the rows is named, " +"somehow). Please remove those names for efficiency (to save creating them " +"over and over for each group). They are ignored anyway.\n" +msgstr "" + +#: dogroups.c:373 +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 " +"detected, removed and put back after grouping has completed, for efficiency. " +"Using j=transform(), for example, prevents that speedup (consider changing " +"to :=). This message may be upgraded to warning in future.\n" +msgstr "" + +#: dogroups.c:385 +#, c-format +msgid "dogroups: growing from %d to %d rows\n" +msgstr "" + #: dogroups.c:386 #, c-format msgid "dogroups: length(ans)[%d]!=ngrpcols[%d]+njval[%d]" msgstr "" +#: dogroups.c:419 +#, c-format +msgid "" +"Item %d of j's result for group %d is zero length. This will be filled with " +"%d NAs to match the longest column in this result. Later groups may have a " +"similar problem but only the first is reported to save filling the warning " +"buffer." +msgstr "" + #: dogroups.c:426 #, c-format msgid "" @@ -838,11 +1052,28 @@ msgid "" "make this intent clear to readers of your code." msgstr "" +#: dogroups.c:443 +#, c-format +msgid "Wrote less rows (%d) than allocated (%d).\n" +msgstr "" + #: dogroups.c:453 #, c-format msgid "Internal error: block 0 [%d] and block 1 [%d] have both run" msgstr "" +#: dogroups.c:455 +#, c-format +msgid "" +"\n" +" %s took %.3fs for %d groups\n" +msgstr "" + +#: dogroups.c:457 +#, c-format +msgid " eval(j) took %.3fs for %d calls\n" +msgstr "" + #: dogroups.c:481 msgid "growVector passed NULL" msgstr "" @@ -955,6 +1186,15 @@ msgstr "" msgid "Unknown 'measure.vars' type %s at index %d of list" msgstr "" +#: fmelt.c:148 +#, c-format +msgid "" +"id.vars and measure.vars are internally guessed when both are 'NULL'. All " +"non-numeric/integer/logical type columns are considered id.vars, which in " +"this case are columns [%s]. Consider providing at least one of 'id' or " +"'measure' vars in future." +msgstr "" + #: fmelt.c:154 fmelt.c:219 #, c-format msgid "Unknown 'id.vars' type %s, must be character or integer vector" @@ -964,6 +1204,17 @@ msgstr "" msgid "One or more values in 'id.vars' is invalid." msgstr "" +#: fmelt.c:175 +msgid "" +"'measure.vars' is missing. Assigning all columns other than 'id.vars' " +"columns as 'measure.vars'.\n" +msgstr "" + +#: fmelt.c:176 +#, c-format +msgid "Assigned 'measure.vars' are [%s].\n" +msgstr "" + #: fmelt.c:184 #, c-format msgid "" @@ -974,6 +1225,17 @@ msgstr "" msgid "One or more values in 'measure.vars' is invalid." msgstr "" +#: fmelt.c:211 +msgid "" +"'id.vars' is missing. Assigning all columns other than 'measure.vars' " +"columns as 'id.vars'.\n" +msgstr "" + +#: fmelt.c:212 +#, c-format +msgid "Assigned 'id.vars' are [%s].\n" +msgstr "" + #: fmelt.c:231 #, c-format msgid "Unknown 'measure.vars' type %s, must be character or integer vector" @@ -1006,6 +1268,21 @@ msgid "" "factorize" msgstr "" +#: fmelt.c:385 +#, c-format +msgid "" +"'measure.vars' [%s] are not all of the same type. By order of hierarchy, the " +"molten data value column will be of type '%s'. All measure variables not of " +"type '%s' will be coerced too. Check DETAILS in ?melt.data.table for more on " +"coercion.\n" +msgstr "" + +#: fmelt.c:387 +#, c-format +msgid "" +"The molten data value type is a list at item %d. 'na.rm=TRUE' is ignored.\n" +msgstr "" + #: fmelt.c:490 #, c-format msgid "Unknown column type '%s' for column '%s'." @@ -1049,10 +1326,63 @@ msgstr "" msgid "Argument 'verbose' should be logical TRUE/FALSE" msgstr "" +#: fmelt.c:682 +msgid "ncol(data) is 0. Nothing to melt. Returning original data.table." +msgstr "" + #: fmelt.c:687 msgid "names(data) is NULL. Please report to data.table-help" msgstr "" +#: forder.c:103 +#, c-format +msgid "Failed to realloc thread private group size buffer to %d*4bytes" +msgstr "" + +#: forder.c:117 +#, c-format +msgid "Failed to realloc group size result to %d*4bytes" +msgstr "" + +#: forder.c:260 +#, c-format +msgid "" +"Logical error. counts[0]=%d in cradix but should have been decremented to 0. " +"radix=%d" +msgstr "" + +#: forder.c:275 +msgid "Failed to alloc cradix_counts" +msgstr "" + +#: forder.c:277 +msgid "Failed to alloc cradix_tmp" +msgstr "" + +#: forder.c:288 +#, c-format +msgid "" +"Internal error: ustr isn't empty when starting range_str: ustr_n=%d, " +"ustr_alloc=%d" +msgstr "" + +#: forder.c:289 +msgid "Internal error: ustr_maxlen isn't 0 when starting range_str" +msgstr "" + +#: forder.c:309 +#, c-format +msgid "Unable to realloc %d * %d bytes in range_str" +msgstr "" + +#: forder.c:327 +msgid "Failed to alloc ustr3 when converting strings to UTF8" +msgstr "" + +#: forder.c:345 +msgid "Failed to alloc tl when converting strings to UTF8" +msgstr "" + #: forder.c:374 msgid "Must an integer or numeric vector length 1" msgstr "" @@ -1061,6 +1391,10 @@ msgstr "" msgid "Must be 2, 1 or 0" msgstr "" +#: forder.c:409 +msgid "Unknown non-finite value; not NA, NaN, -Inf or +Inf" +msgstr "" + #: forder.c:431 msgid "" "Internal error: input is not either a list of columns, or an atomic vector." @@ -1078,6 +1412,16 @@ msgid "" "1 integer" msgstr "" +#: forder.c:437 +#, c-format +msgid "forder.c received a vector type '%s' length %d\n" +msgstr "" + +#: forder.c:445 +#, c-format +msgid "forder.c received %d rows and %d columns\n" +msgstr "" + #: forder.c:448 msgid "Internal error: DT is an empty list() of 0 columns" msgstr "" @@ -1122,6 +1466,77 @@ msgstr "" msgid "na.last must be logical TRUE, FALSE or NA of length 1" msgstr "" +#: forder.c:514 +#, c-format +msgid "Item %d of order (ascending/descending) is %d. Must be +1 or -1." +msgstr "" + +#: forder.c:540 +#, c-format +msgid "" +"\n" +"*** Column %d passed to forder is a date stored as an 8 byte double but no " +"fractions are present. Please consider a 4 byte integer date such as IDate " +"to save space and time.\n" +msgstr "" + +#: forder.c:556 +#, c-format +msgid "Column %d passed to [f]order is type '%s', not yet supported." +msgstr "" + +#: forder.c:705 +msgid "Internal error: column not supported not caught earlier" +msgstr "" + +#: forder.c:713 +#, c-format +msgid "nradix=%d\n" +msgstr "" + +#: forder.c:719 +#, c-format +msgid "" +"Failed to allocate TMP or UGRP or they weren't cache line aligned: nth=%d" +msgstr "" + +#: forder.c:724 +msgid "Could not allocate (very tiny) group size thread buffers" +msgstr "" + +#: forder.c:785 +#, c-format +msgid "Timing block %2d%s = %8.3f %8d\n" +msgstr "" + +#: forder.c:788 +#, c-format +msgid "stat[%03d]==%10zd\n" +msgstr "" + +#: forder.c:1044 +#, c-format +msgid "Failed to allocate parallel counts. my_n=%d, nBatch=%d" +msgstr "" + +#: forder.c:1153 +#, c-format +msgid "Unable to allocate TMP for my_n=%d items in parallel batch counting" +msgstr "" + +#: forder.c:1260 +msgid "" +"is.sorted (R level) and fsorted (C level) only to be used on vectors. If " +"needed on a list/data.table, you'll need the order anyway if not sorted, so " +"use if (length(o<-forder(...))) for efficiency in one step, or equivalent at " +"C level" +msgstr "" + +#: forder.c:1292 +#, c-format +msgid "type '%s' is not yet supported" +msgstr "" + #: forder.c:1301 msgid "x must be either NULL or an integer vector" msgstr "" @@ -1187,184 +1602,1397 @@ msgstr "" msgid "Internal error. Argument 'cols' to CanyNA is type '%s' not 'integer'" msgstr "" -#: freadR.c:84 +#: fread.c:106 +#, c-format msgid "" -"Internal error: freadR input not a single character string: a filename or " -"the data itself. Should have been caught at R level." +"Internal error in line %d of fread.c, please report on data.table GitHub: " msgstr "" -#: freadR.c:101 -msgid "" -"Internal error: freadR sep not a single character. R level catches this." +#: fread.c:149 +#, c-format +msgid "System error %d unmapping view of file\n" msgstr "" -#: freadR.c:105 -msgid "" -"Internal error: freadR dec not a single character. R level catches this." +#: fread.c:152 +#, c-format +msgid "System errno %d unmapping file: %s\n" msgstr "" -#: freadR.c:112 -msgid "quote= must be a single character, blank \")\", or FALSE" +#: fread.c:212 +#, c-format +msgid "Internal error: NUMTYPE(%d) > nLetters(%d)" msgstr "" -#: freadR.c:137 -msgid "Internal error: skip not integer or string in freadR.c" +#: fread.c:437 +#, c-format +msgid "Unable to allocate %s of contiguous virtual RAM. %s allocation." msgstr "" -#: freadR.c:140 +#: fread.c:442 +#, c-format +msgid "Avoidable %.3f seconds. %s time to copy.\n" +msgstr "" + +#: fread.c:443 +#, c-format +msgid " File copy in RAM took %.3f seconds.\n" +msgstr "" + +#: fread.c:1095 +msgid "" +"Previous fread() session was not cleaned up properly. Cleaned up ok at the " +"beginning of this fread() call.\n" +msgstr "" + +#: fread.c:1098 +msgid "[01] Check arguments\n" +msgstr "" + +#: fread.c:1105 +#, c-format +msgid " Using %d threads (omp_get_max_threads()=%d, nth=%d)\n" +msgstr "" + +#: fread.c:1113 +msgid "" +"Internal error: NAstrings is itself NULL. When empty it should be pointer to " +"NULL." +msgstr "" + +#: fread.c:1131 +#, c-format +msgid "freadMain: NAstring <<%s>> has whitespace at the beginning or end" +msgstr "" + +#: fread.c:1136 +#, c-format +msgid "" +"freadMain: NAstring <<%s>> is recognized as type boolean, this is not " +"permitted." +msgstr "" + +#: fread.c:1146 +msgid " No NAstrings provided.\n" +msgstr "" + +#: fread.c:1148 +msgid " NAstrings = [" +msgstr "" + +#: fread.c:1151 +msgid "]\n" +msgstr "" + +#: fread.c:1153 +msgid " One or more of the NAstrings looks like a number.\n" +msgstr "" + +#: fread.c:1155 +msgid " None of the NAstrings look like numbers.\n" +msgstr "" + +#: fread.c:1157 +#, c-format +msgid " skip num lines = %llu\n" +msgstr "" + +#: fread.c:1158 +#, c-format +msgid " skip to string = <<%s>>\n" +msgstr "" + +#: fread.c:1159 +#, c-format +msgid " show progress = %d\n" +msgstr "" + +#: fread.c:1160 +#, c-format +msgid " 0/1 column will be read as %s\n" +msgstr "" + +#: fread.c:1168 +#, c-format +msgid "sep == quote ('%c') is not allowed" +msgstr "" + +#: fread.c:1169 +msgid "dec='' not allowed. Should be '.' or ','" +msgstr "" + +#: fread.c:1170 +#, c-format +msgid "sep == dec ('%c') is not allowed" +msgstr "" + +#: fread.c:1171 +#, c-format +msgid "quote == dec ('%c') is not allowed" +msgstr "" + +#: fread.c:1188 +msgid "[02] Opening the file\n" +msgstr "" + +#: fread.c:1191 +msgid "" +" `input` argument is provided rather than a file name, interpreting as raw " +"text to read\n" +msgstr "" + +#: fread.c:1195 +msgid "Internal error: last byte of character input isn't \\0" +msgstr "" + +#: fread.c:1198 +#, c-format +msgid " Opening file %s\n" +msgstr "" + +#: fread.c:1202 +#, c-format +msgid "file not found: %s" +msgstr "" + +#: fread.c:1206 +#, c-format +msgid "Opened file ok but couldn't obtain its size: %s" +msgstr "" + +#: fread.c:1209 fread.c:1237 +#, c-format +msgid "File is empty: %s" +msgstr "" + +#: fread.c:1210 fread.c:1238 +#, c-format +msgid " File opened, size = %s.\n" +msgstr "" + +#: fread.c:1227 +#, c-format +msgid "File not found: %s" +msgstr "" + +#: fread.c:1233 +#, c-format +msgid "Unable to open file after %d attempts (error %d): %s" +msgstr "" + +#: fread.c:1235 +#, c-format +msgid "GetFileSizeEx failed (returned 0) on file: %s" +msgstr "" + +#: fread.c:1240 +#, c-format +msgid "This is Windows, CreateFileMapping returned error %d for file %s" +msgstr "" + +#: fread.c:1247 +#, c-format +msgid "" +"Opened %s file ok but could not memory map it. This is a %dbit process. %s." +msgstr "" + +#: fread.c:1248 +msgid "Please upgrade to 64bit" +msgstr "" + +#: fread.c:1248 +msgid "There is probably not enough contiguous virtual memory available" +msgstr "" + +#: fread.c:1251 +msgid " Memory mapped ok\n" +msgstr "" + +#: fread.c:1253 +msgid "" +"Internal error: Neither `input` nor `filename` are given, nothing to read." +msgstr "" + +#: fread.c:1270 +msgid "[03] Detect and skip BOM\n" +msgstr "" + +#: fread.c:1274 +msgid "" +" UTF-8 byte order mark EF BB BF found at the start of the file and " +"skipped.\n" +msgstr "" + +#: fread.c:1279 +msgid "" +"GB-18030 encoding detected, however fread() is unable to decode it. Some " +"character fields may be garbled.\n" +msgstr "" + +#: fread.c:1282 +msgid "" +"File is encoded in UTF-16, this encoding is not supported by fread(). Please " +"recode the file to UTF-8." +msgstr "" + +#: fread.c:1287 +#, c-format +msgid " Last byte(s) of input found to be %s and removed.\n" +msgstr "" + +#: fread.c:1290 +msgid "Input is empty or only contains BOM or terminal control characters" +msgstr "" + +#: fread.c:1297 +msgid "[04] Arrange mmap to be \\0 terminated\n" +msgstr "" + +#: fread.c:1304 +msgid "" +" No \\n exists in the file at all, so single \\r (if any) will be taken as " +"one line ending. This is unusual but will happen normally when there is no " +"\\r either; e.g. a single line missing its end of line.\n" +msgstr "" + +#: fread.c:1305 +msgid "" +" \\n has been found in the input and different lines can end with different " +"line endings (e.g. mixed \\n and \\r\\n in one file). This is common and " +"ideal.\n" +msgstr "" + +#: fread.c:1329 +#, c-format +msgid "" +" File ends abruptly with '%c'. Final end-of-line is missing. Using cow page " +"to write 0 to the last byte.\n" +msgstr "" + +#: fread.c:1336 +#, c-format +msgid " File ends abruptly with '%c'. Copying file in RAM. %s copy.\n" +msgstr "" + +#: fread.c:1370 +msgid "[05] Skipping initial rows if needed\n" +msgstr "" + +#: fread.c:1376 +#, c-format +msgid "" +"skip='%s' not found in input (it is case sensitive and literal; i.e., no " +"patterns, wildcards or regex)" +msgstr "" + +#: fread.c:1382 +#, c-format +msgid "" +"Found skip='%s' on line %llu. Taking this to be header row or first row of " +"data.\n" +msgstr "" + +#: fread.c:1395 +#, c-format +msgid " Skipped to line %llu in the file" +msgstr "" + +#: fread.c:1396 +#, c-format +msgid "skip=%llu but the input only has %llu line%s" +msgstr "" + +#: fread.c:1405 +msgid "" +"Input is either empty, fully whitespace, or skip has been set after the last " +"non-whitespace." +msgstr "" + +#: fread.c:1407 +#, c-format +msgid " Moved forward to first non-blank line (%d)\n" +msgstr "" + +#: fread.c:1408 +#, c-format +msgid " Positioned on line %d starting: <<%s>>\n" +msgstr "" + +#: fread.c:1426 +msgid "[06] Detect separator, quoting rule, and ncolumns\n" +msgstr "" + +#: fread.c:1430 +msgid " sep='\\n' passed in meaning read lines as single character column\n" +msgstr "" + +#: fread.c:1449 +msgid " Detecting sep automatically ...\n" +msgstr "" + +#: fread.c:1456 +#, c-format +msgid " Using supplied sep '%s'\n" +msgstr "" + +#: fread.c:1490 +#, c-format +msgid " with %d fields using quote rule %d\n" +msgstr "" + +#: fread.c:1540 +#, c-format +msgid " with %d lines of %d fields using quote rule %d\n" +msgstr "" + +#: fread.c:1547 +msgid "" +" No sep and quote rule found a block of 2x2 or greater. Single column " +"input.\n" +msgstr "" + +#: fread.c:1563 +msgid "" +"Single column input contains invalid quotes. Self healing only effective " +"when ncol>1" +msgstr "" + +#: fread.c:1568 +#, c-format +msgid "" +"Found and resolved improper quoting in first %d rows. If the fields are not " +"quoted (e.g. field separator does not appear within any field), try quote=" +"\")\" to avoid this warning." +msgstr "" + +#: fread.c:1584 +#, c-format +msgid "" +"Internal error: ncol==%d line==%d after detecting sep, ncol and first line" +msgstr "" + +#: fread.c:1587 +#, c-format +msgid "Internal error: first line has field count %d but expecting %d" +msgstr "" + +#: fread.c:1589 +#, c-format +msgid "" +" Detected %d columns on line %d. This line is either column names or first " +"data row. Line starts as: <<%s>>\n" +msgstr "" + +#: fread.c:1591 +#, c-format +msgid " Quote rule picked = %d\n" +msgstr "" + +#: fread.c:1592 +#, c-format +msgid " fill=%s and the most number of columns found is %d\n" +msgstr "" + +#: fread.c:1598 +msgid "" +"This file is very unusual: it's one single column, ends with 2 or more end-" +"of-line (representing several NA at the end), and is a multiple of 4096, too." +msgstr "" + +#: fread.c:1599 +#, c-format +msgid " Copying file in RAM. %s\n" +msgstr "" + +#: fread.c:1605 +msgid "" +" 1-column file ends with 2 or more end-of-line. Restoring last eol using " +"extra byte in cow page.\n" +msgstr "" + +#: fread.c:1624 +msgid "" +"[07] Detect column types, good nrow estimate and whether first row is column " +"names\n" +msgstr "" + +#: fread.c:1625 +#, c-format +msgid " 'header' changed by user from 'auto' to %s\n" +msgstr "" + +#: fread.c:1629 +#, c-format +msgid "Failed to allocate 2 x %d bytes for type and tmpType: %s" +msgstr "" + +#: fread.c:1650 +#, c-format +msgid " Number of sampling jump points = %d because " +msgstr "" + +#: fread.c:1651 +#, c-format +msgid "nrow limit (%llu) supplied\n" +msgstr "" + +#: fread.c:1652 +msgid "jump0size==0\n" +msgstr "" + +#: fread.c:1653 +#, c-format +msgid "(%llu bytes from row 1 to eof) / (2 * %llu jump0size) == %llu\n" +msgstr "" + +#: fread.c:1691 +#, c-format +msgid "" +" A line with too-%s fields (%d/%d) was found on line %d of sample jump %d. " +"%s\n" +msgstr "" + +#: fread.c:1718 +#, c-format +msgid " Type codes (jump %03d) : %s Quote rule %d\n" +msgstr "" + +#: fread.c:1731 +#, c-format +msgid "" +" 'header' determined to be true due to column %d containing a string on row " +"1 and a lower type (%s) in the rest of the %d sample rows\n" +msgstr "" + +#: fread.c:1743 +msgid "" +"Internal error: row before first data row has the same number of fields but " +"we're not using it." +msgstr "" + +#: fread.c:1744 +msgid "" +"Internal error: ch!=pos after counting fields in the line before the first " +"data row." +msgstr "" + +#: fread.c:1745 +#, c-format +msgid "" +"Types in 1st data row match types in 2nd data row but previous row has %d " +"fields. Taking previous row as column names." +msgstr "" + +#: fread.c:1748 +#, c-format +msgid "" +"Detected %d column names but the data has %d columns (i.e. invalid file). " +"Added %d extra default column name%s\n" +msgstr "" + +#: fread.c:1751 +msgid "" +"Internal error: fill=true but there is a previous row which should already " +"have been filled." +msgstr "" + +#: fread.c:1752 +#, c-format +msgid "" +"Detected %d column names but the data has %d columns. Filling rows " +"automatically. Set fill=TRUE explicitly to avoid this warning.\n" +msgstr "" + +#: fread.c:1756 +#, c-format +msgid "Failed to realloc 2 x %d bytes for type and tmpType: %s" +msgstr "" + +#: fread.c:1776 +#, c-format +msgid "" +" 'header' determined to be %s because there are%s number fields in the " +"first and only row\n" +msgstr "" + +#: fread.c:1779 +msgid "" +" 'header' determined to be true because all columns are type string and a " +"better guess is not possible\n" +msgstr "" + +#: fread.c:1781 +msgid "" +" 'header' determined to be false because there are some number columns and " +"those columns do not have a string field at the top of them\n" +msgstr "" + +#: fread.c:1797 +#, c-format +msgid " Type codes (first row) : %s Quote rule %d\n" +msgstr "" + +#: fread.c:1806 +#, c-format +msgid "" +" All rows were sampled since file is small so we know nrow=%llu exactly\n" +msgstr "" + +#: fread.c:1818 fread.c:1825 +msgid " =====\n" +msgstr "" + +#: fread.c:1819 +#, c-format +msgid "" +" Sampled %llu rows (handled \\n inside quoted fields) at %d jump points\n" +msgstr "" + +#: fread.c:1820 +#, c-format +msgid " Bytes from first data row on line %d to the end of last row: %llu\n" +msgstr "" + +#: fread.c:1821 +#, c-format +msgid " Line length: mean=%.2f sd=%.2f min=%d max=%d\n" +msgstr "" + +#: fread.c:1822 +#, c-format +msgid " Estimated number of rows: %llu / %.2f = %llu\n" +msgstr "" + +#: fread.c:1823 +#, c-format +msgid "" +" Initial alloc = %llu rows (%llu + %d%%) using bytes/max(mean-2*sd,min) " +"clamped between [1.1*estn, 2.0*estn]\n" +msgstr "" + +#: fread.c:1827 +#, c-format +msgid "Internal error: sampleLines(%llu) > allocnrow(%llu)" +msgstr "" + +#: fread.c:1831 +#, c-format +msgid " Alloc limited to lower nrows=%llu passed in.\n" +msgstr "" + +#: fread.c:1843 +msgid "[08] Assign column names\n" +msgstr "" + +#: fread.c:1851 +#, c-format +msgid "Unable to allocate %d*%d bytes for column name pointers: %s" +msgstr "" + +#: fread.c:1873 +#, c-format +msgid "Internal error: reading colnames ending on '%c'" +msgstr "" + +#: fread.c:1891 +msgid "[09] Apply user overrides on column types\n" +msgstr "" + +#: fread.c:1895 +msgid " Cancelled by user: userOverride() returned false." +msgstr "" + +#: fread.c:1905 +#, c-format +msgid "Failed to allocate %d bytes for size array: %s" +msgstr "" + +#: fread.c:1912 +#, c-format +msgid "" +"Attempt to override column %d <<%.*s>> of inherent type '%s' down to '%s' " +"ignored. Only overrides to a higher type are currently supported. If this " +"was intended, please coerce to the lower type afterwards." +msgstr "" + +#: fread.c:1926 +#, c-format +msgid " After %d type and %d drop user overrides : %s\n" +msgstr "" + +#: fread.c:1934 +msgid "[10] Allocate memory for the datatable\n" +msgstr "" + +#: fread.c:1935 +#, c-format +msgid " Allocating %d column slots (%d - %d dropped) with %llu rows\n" +msgstr "" + +#: fread.c:1989 +#, c-format +msgid "Buffer size %lld is too large\n" +msgstr "" + +#: fread.c:1992 +msgid "[11] Read the data\n" +msgstr "" + +#: fread.c:1995 +#, c-format +msgid " jumps=[%d..%d), chunk_size=%llu, total_size=%llu\n" +msgstr "" + +#: fread.c:2215 +#, c-format +msgid "" +"Column %d (\"%.*s\") bumped from '%s' to '%s' due to <<%.*s>> on row %llu\n" +msgstr "" + +#: fread.c:2330 fread.c:2465 freadR.c:660 +#, c-format +msgid "%s" +msgstr "" + +#: fread.c:2337 +#, c-format +msgid "" +" Too few rows allocated. Allocating additional %llu rows (now nrows=%llu) " +"and continue reading from jump %d\n" +msgstr "" + +#: fread.c:2344 +#, c-format +msgid " Restarting team from jump %d. nSwept==%d quoteRule==%d\n" +msgstr "" + +#: fread.c:2364 +#, c-format +msgid " %d out-of-sample type bumps: %s\n" +msgstr "" + +#: fread.c:2400 +#, c-format +msgid "" +"Read %llu rows x %d columns from %s file in %02d:%06.3f wall clock time\n" +msgstr "" + +#: fread.c:2407 +msgid "[12] Finalizing the datatable\n" +msgstr "" + +#: fread.c:2408 +msgid " Type counts:\n" +msgstr "" + +#: fread.c:2410 +#, c-format +msgid "%10d : %-9s '%c'\n" +msgstr "" + +#: fread.c:2426 +#, c-format +msgid "Discarded single-line footer: <<%s>>" +msgstr "" + +#: fread.c:2431 +#, c-format +msgid "" +"Stopped early on line %llu. Expected %d fields but found %d. Consider " +"fill=TRUE and comment.char=. First discarded non-empty line: <<%s>>" +msgstr "" + +#: fread.c:2437 +#, c-format +msgid "" +"Found and resolved improper quoting out-of-sample. First healed line %llu: <<" +"%s>>. If the fields are not quoted (e.g. field separator does not appear " +"within any field), try quote=\")\" to avoid this warning." +msgstr "" + +#: fread.c:2441 +msgid "=============================\n" +msgstr "" + +#: fread.c:2443 +#, c-format +msgid "%8.3fs (%3.0f%%) Memory map %.3fGB file\n" +msgstr "" + +#: fread.c:2444 +#, c-format +msgid "%8.3fs (%3.0f%%) sep=" +msgstr "" + +#: fread.c:2446 +#, c-format +msgid " ncol=%d and header detection\n" +msgstr "" + +#: fread.c:2447 +#, c-format +msgid "%8.3fs (%3.0f%%) Column type detection using %llu sample rows\n" +msgstr "" + +#: fread.c:2449 +#, c-format +msgid "" +"%8.3fs (%3.0f%%) Allocation of %llu rows x %d cols (%.3fGB) of which %llu " +"(%3.0f%%) rows used\n" +msgstr "" + +#: fread.c:2453 +#, c-format +msgid "" +"%8.3fs (%3.0f%%) Reading %d chunks (%d swept) of %.3fMB (each chunk %d rows) " +"using %d threads\n" +msgstr "" + +#: fread.c:2455 +#, c-format +msgid "" +" + %8.3fs (%3.0f%%) Parse to row-major thread buffers (grown %d times)\n" +msgstr "" + +#: fread.c:2456 +#, c-format +msgid " + %8.3fs (%3.0f%%) Transpose\n" +msgstr "" + +#: fread.c:2457 +#, c-format +msgid " + %8.3fs (%3.0f%%) Waiting\n" +msgstr "" + +#: fread.c:2458 +#, c-format +msgid "" +"%8.3fs (%3.0f%%) Rereading %d columns due to out-of-sample type exceptions\n" +msgstr "" + +#: fread.c:2460 +#, c-format +msgid "%8.3fs Total\n" +msgstr "" + +#: freadR.c:84 +msgid "" +"Internal error: freadR input not a single character string: a filename or " +"the data itself. Should have been caught at R level." +msgstr "" + +#: freadR.c:92 +msgid "" +"Input contains a \\n or is \")\". Taking this to be text input (not a " +"filename)\n" +msgstr "" + +#: freadR.c:95 +msgid "Input contains no \\n. Taking this to be a filename to open\n" +msgstr "" + +#: freadR.c:101 +msgid "" +"Internal error: freadR sep not a single character. R level catches this." +msgstr "" + +#: freadR.c:105 +msgid "" +"Internal error: freadR dec not a single character. R level catches this." +msgstr "" + +#: freadR.c:112 +msgid "quote= must be a single character, blank \")\", or FALSE" +msgstr "" + +#: freadR.c:137 +msgid "Internal error: skip not integer or string in freadR.c" +msgstr "" + +#: freadR.c:140 #, c-format msgid "Internal error: NAstringsArg is type '%s'. R level catches this" msgstr "" -#: freadR.c:153 +#: freadR.c:153 +#, c-format +msgid "nThread(%d)<1" +msgstr "" + +#: freadR.c:160 +msgid "'integer64' must be a single character string" +msgstr "" + +#: freadR.c:168 +#, c-format +msgid "" +"Invalid value integer64='%s'. Must be 'integer64', 'character', 'double' or " +"'numeric'" +msgstr "" + +#: freadR.c:176 +msgid "Use either select= or drop= but not both." +msgstr "" + +#: freadR.c:179 +msgid "" +"select= is type list for specifying types in select=, but colClasses= has " +"been provided as well. Please remove colClasses=." +msgstr "" + +#: freadR.c:181 +msgid "" +"select= is type list but has no names; expecting list(type1=cols1, " +"type2=cols2, ...)" +msgstr "" + +#: freadR.c:188 +msgid "" +"select= is a named vector specifying the columns to select and their types, " +"but colClasses= has been provided as well. Please remove colClasses=." +msgstr "" + +#: freadR.c:196 freadR.c:346 +msgid "colClasses is type list but has no names" +msgstr "" + +#: freadR.c:206 +#, c-format +msgid "encoding='%s' invalid. Must be 'unknown', 'Latin-1' or 'UTF-8'" +msgstr "" + +#: freadR.c:229 +#, c-format +msgid "Column name '%s' (%s) not found" +msgstr "" + +#: freadR.c:231 +#, c-format +msgid "%s is NA" +msgstr "" + +#: freadR.c:233 +#, c-format +msgid "%s is %d which is out of range [1,ncol=%d]" +msgstr "" + +#: freadR.c:247 +msgid "Internal error: typeSize[CT_BOOL8_N] != 1" +msgstr "" + +#: freadR.c:248 +msgid "Internal error: typeSize[CT_STRING] != 1" +msgstr "" + +#: freadR.c:282 +#, c-format +msgid "" +"Column name '%s' not found in column name header (case sensitive), skipping." +msgstr "" + +#: freadR.c:292 #, c-format -msgid "nThread(%d)<1" +msgid "" +"Column number %d (select[%d]) is negative but should be in the range [1,ncol=" +"%d]. Consider drop= for column exclusion." msgstr "" -#: freadR.c:160 -msgid "'integer64' must be a single character string" +#: freadR.c:293 +#, c-format +msgid "" +"select = 0 (select[%d]) has no meaning. All values of select should be in " +"the range [1,ncol=%d]." msgstr "" -#: freadR.c:660 +#: freadR.c:294 #, c-format -msgid "%s" +msgid "" +"Column number %d (select[%d]) is too large for this table, which only has %d " +"columns." +msgstr "" + +#: freadR.c:295 +#, c-format +msgid "Column number %d ('%s') has been selected twice by select=" +msgstr "" + +#: freadR.c:313 +msgid "" +"colClasses='NULL' is not permitted; i.e. to drop all columns and load nothing" +msgstr "" + +#: freadR.c:318 +#, c-format +msgid "" +"colClasses= is an unnamed vector of types, length %d, but there are %d " +"columns in the input. To specify types for a subset of columns, you can use " +msgstr "" + +#: freadR.c:319 +msgid "" +"a named vector, list format, or specify types using select= instead of " +"colClasses=. Please see examples in ?fread." +msgstr "" + +#: freadR.c:329 +msgid "Internal error: selectInts is NULL but selectColClasses is true" +msgstr "" + +#: freadR.c:330 +msgid "" +"Internal error: length(selectSxp)!=length(colClassesSxp) but " +"selectColClasses is true" +msgstr "" + +#: freadR.c:344 +#, c-format +msgid "colClasses is type '%s' but should be list or character" +msgstr "" + +#: freadR.c:368 +#, c-format +msgid "Column name '%s' (colClasses[[%d]][%d]) not found" +msgstr "" + +#: freadR.c:370 +#, c-format +msgid "colClasses[[%d]][%d] is NA" +msgstr "" + +#: freadR.c:374 +#, c-format +msgid "" +"Column %d ('%s') appears more than once in colClasses. The second time is " +"colClasses[[%d]][%d]." +msgstr "" + +#: freadR.c:381 +#, c-format +msgid "Column number %d (colClasses[[%d]][%d]) is out of range [1,ncol=%d]" +msgstr "" + +#: freadR.c:583 +#, c-format +msgid "Field size is 1 but the field is of type %d\n" +msgstr "" + +#: freadR.c:592 +#, c-format +msgid "Internal error: unexpected field of size %d\n" +msgstr "" + +#: froll.c:18 froll.c:227 froll.c:411 +#, c-format +msgid "%s: window width longer than input vector, returning all NA vector\n" +msgstr "" + +#: froll.c:36 froll.c:244 froll.c:460 +#, c-format +msgid "%s: align %d, shift answer by %d\n" +msgstr "" + +#: froll.c:43 froll.c:251 frolladaptive.c:23 frolladaptive.c:218 +#, c-format +msgid "%s: processing algo %u took %.3fs\n" +msgstr "" + +#: froll.c:52 froll.c:255 +#, c-format +msgid "%s: running for input length %llu, window %d, hasna %d, narm %d\n" +msgstr "" + +#: froll.c:72 froll.c:82 froll.c:173 froll.c:275 froll.c:285 froll.c:366 +#: frolladaptive.c:62 frolladaptive.c:151 frolladaptive.c:251 +#: frolladaptive.c:330 +#, c-format +msgid "" +"%s: hasNA=FALSE used but NA (or other non-finite) value(s) are present in " +"input, use default hasNA=NA to avoid this warning" +msgstr "" + +#: froll.c:75 froll.c:177 froll.c:278 froll.c:370 frolladaptive.c:65 +#: frolladaptive.c:155 frolladaptive.c:254 frolladaptive.c:334 +#, c-format +msgid "" +"%s: NA (or other non-finite) value(s) are present in input, re-running with " +"extra care for NAs\n" +msgstr "" + +#: froll.c:85 froll.c:288 +#, c-format +msgid "" +"%s: NA (or other non-finite) value(s) are present in input, skip non-NA " +"attempt and run with extra care for NAs\n" +msgstr "" + +#: froll.c:141 froll.c:339 +#, c-format +msgid "" +"%s: running in parallel for input length %llu, window %d, hasna %d, narm %d\n" +msgstr "" + +#: froll.c:179 froll.c:372 frolladaptive.c:157 frolladaptive.c:336 +#, c-format +msgid "" +"%s: NA (or other non-finite) value(s) are present in input, na.rm was FALSE " +"so in 'exact' implementation NAs were handled already, no need to re-run\n" +msgstr "" + +#: froll.c:428 +#, c-format +msgid "%s: results from provided FUN are not length 1" +msgstr "" + +#: froll.c:435 +#, c-format +msgid "" +"%s: results from provided FUN are not of type double, coercion from integer " +"or logical will be applied on each iteration\n" +msgstr "" + +#: froll.c:438 +#, c-format +msgid "%s: results from provided FUN are not of type double" +msgstr "" + +#: froll.c:467 +#, c-format +msgid "%s: took %.3fs\n" +msgstr "" + +#: frollR.c:15 +msgid "x must be of type numeric or logical" +msgstr "" + +#: frollR.c:26 +msgid "x must be list, data.frame or data.table of numeric or logical types" +msgstr "" + +#: frollR.c:47 frollR.c:264 +msgid "n must be non 0 length" +msgstr "" + +#: frollR.c:50 +msgid "adaptive must be TRUE or FALSE" +msgstr "" + +#: frollR.c:58 +msgid "n must be integer, list is accepted for adaptive TRUE" +msgstr "" + +#: frollR.c:65 frollR.c:256 frollR.c:259 +msgid "n must be integer" +msgstr "" + +#: frollR.c:72 +msgid "n must be positive integer values (> 0)" +msgstr "" + +#: frollR.c:81 frollR.c:93 +msgid "n must be integer vector or list of integer vectors" +msgstr "" + +#: frollR.c:104 gsumm.c:342 gsumm.c:577 gsumm.c:686 gsumm.c:805 gsumm.c:950 +#: gsumm.c:1261 gsumm.c:1402 uniqlist.c:350 +msgid "na.rm must be TRUE or FALSE" +msgstr "" + +#: frollR.c:107 +msgid "hasNA must be TRUE, FALSE or NA" +msgstr "" + +#: frollR.c:109 +msgid "" +"using hasNA FALSE and na.rm TRUE does not make sense, if you know there are " +"NA values use hasNA TRUE, otherwise leave it as default NA" +msgstr "" + +#: frollR.c:119 frollR.c:275 +msgid "" +"Internal error: invalid align argument in rolling function, should have been " +"caught before. please report to data.table issue tracker." +msgstr "" + +#: frollR.c:122 +msgid "" +"using adaptive TRUE and align argument different than 'right' is not " +"implemented" +msgstr "" + +#: frollR.c:126 frollR.c:297 types.c:64 +#, c-format +msgid "%s: allocating memory for results %dx%d\n" +msgstr "" + +#: frollR.c:135 +msgid "" +"adaptive rolling function can only process 'x' having equal length of " +"elements, like data.table or data.frame; If you want to call rolling " +"function on list having variable length of elements call it for each field " +"separately" +msgstr "" + +#: frollR.c:137 +msgid "" +"length of integer vector(s) provided as list to 'n' argument must be equal " +"to number of observations provided in 'x'" +msgstr "" + +#: frollR.c:151 +msgid "" +"Internal error: invalid fun argument in rolling function, should have been " +"caught before. please report to data.table issue tracker." +msgstr "" + +#: frollR.c:155 frollR.c:279 nafill.c:136 shift.c:21 +msgid "fill must be a vector of length 1" +msgstr "" + +#: frollR.c:169 frollR.c:292 +msgid "fill must be numeric" +msgstr "" + +#: frollR.c:185 +msgid "" +"Internal error: invalid algo argument in rolling function, should have been " +"caught before. please report to data.table issue tracker." +msgstr "" + +#: frollR.c:190 +#, c-format +msgid "Internal error: badaptive=%d but ik is not integer" +msgstr "" + +#: frollR.c:198 +#, c-format +msgid "" +"%s: %d column(s) and %d window(s), if product > 1 then entering parallel " +"execution\n" +msgstr "" + +#: frollR.c:200 +#, c-format +msgid "" +"%s: %d column(s) and %d window(s), not entering parallel execution here " +"because algo='exact' will compute results in parallel\n" +msgstr "" + +#: frollR.c:219 +#, c-format +msgid "Internal error: Unknown sfun value in froll: %d" +msgstr "" + +#: frollR.c:227 frollR.c:328 +#, c-format +msgid "%s: processing of %d column(s) and %d window(s) took %.3fs\n" +msgstr "" + +#: frollR.c:238 +msgid "internal error: 'fun' must be a function" +msgstr "" + +#: frollR.c:240 +msgid "internal error: 'rho' should be an environment" +msgstr "" + +#: frolladaptive.c:33 frolladaptive.c:222 +#, c-format +msgid "%s: running for input length %llu, hasna %d, narm %d\n" +msgstr "" + +#: frolladaptive.c:39 frolladaptive.c:228 +#, c-format +msgid "%s: Unable to allocate memory for cumsum" +msgstr "" + +#: frolladaptive.c:75 frolladaptive.c:264 +#, c-format +msgid "%s: Unable to allocate memory for cum NA counter" +msgstr "" + +#: frolladaptive.c:118 frolladaptive.c:302 +#, c-format +msgid "%s: running in parallel for input length %llu, hasna %d, narm %d\n" +msgstr "" + +#: fsort.c:111 +msgid "x must be a vector of type 'double' currently" +msgstr "" + +#: fsort.c:122 +#, c-format +msgid "nth=%d, nBatch=%d\n" +msgstr "" + +#: fsort.c:156 +#, c-format +msgid "Range = [%g,%g]\n" +msgstr "" + +#: fsort.c:157 +msgid "Cannot yet handle negatives." +msgstr "" + +#: fsort.c:170 +#, c-format +msgid "maxBit=%d; MSBNbits=%d; shift=%d; MSBsize=%d\n" +msgstr "" + +#: fsort.c:173 +msgid "Unable to allocate working memory" msgstr "" -#: froll.c:428 +#: fsort.c:177 #, c-format -msgid "%s: results from provided FUN are not length 1" +msgid "" +"counts is %dMB (%d pages per nBatch=%d, batchSize=%lld, lastBatchSize=%lld)\n" msgstr "" -#: froll.c:438 -#, c-format -msgid "%s: results from provided FUN are not of type double" +#: fsort.c:230 +msgid "Internal error: counts[nBatch-1][MSBsize-1] != length(x)" msgstr "" -#: frollR.c:15 -msgid "x must be of type numeric or logical" +#: fsort.c:246 +msgid "Top 5 MSB counts: " msgstr "" -#: frollR.c:26 -msgid "x must be list, data.frame or data.table of numeric or logical types" +#: fsort.c:246 +#, c-format +msgid "%lld " msgstr "" -#: frollR.c:47 frollR.c:264 -msgid "n must be non 0 length" +#: fsort.c:246 fwrite.c:692 fwrite.c:779 fwrite.c:890 fwrite.c:934 +msgid "\n" msgstr "" -#: frollR.c:50 -msgid "adaptive must be TRUE or FALSE" +#: fsort.c:247 +#, c-format +msgid "Reduced MSBsize from %d to " msgstr "" -#: frollR.c:58 -msgid "n must be integer, list is accepted for adaptive TRUE" +#: fsort.c:251 +#, c-format +msgid "%d by excluding 0 and 1 counts\n" msgstr "" -#: frollR.c:65 frollR.c:256 frollR.c:259 -msgid "n must be integer" +#: fsort.c:308 +#, c-format +msgid "%d: %.3f (%4.1f%%)\n" msgstr "" -#: frollR.c:72 -msgid "n must be positive integer values (> 0)" +#: fwrite.c:603 +#, c-format +msgid "buffMB=%d outside [1,1024]" msgstr "" -#: frollR.c:81 frollR.c:93 -msgid "n must be integer vector or list of integer vectors" +#: fwrite.c:610 +#, c-format +msgid "" +"eol must be 1 or more bytes (usually either \\n or \\r\\n) but is length %d" msgstr "" -#: frollR.c:104 gsumm.c:342 gsumm.c:577 gsumm.c:686 gsumm.c:805 gsumm.c:950 -#: gsumm.c:1262 gsumm.c:1403 uniqlist.c:350 -msgid "na.rm must be TRUE or FALSE" +#: fwrite.c:613 +msgid "Column writers: " msgstr "" -#: frollR.c:107 -msgid "hasNA must be TRUE, FALSE or NA" +#: fwrite.c:615 fwrite.c:617 fwrite.c:619 +#, c-format +msgid "%d " msgstr "" -#: frollR.c:109 -msgid "" -"using hasNA FALSE and na.rm TRUE does not make sense, if you know there are " -"NA values use hasNA TRUE, otherwise leave it as default NA" +#: fwrite.c:618 +msgid "... " msgstr "" -#: frollR.c:119 frollR.c:275 +#: fwrite.c:621 +#, c-format msgid "" -"Internal error: invalid align argument in rolling function, should have been " -"caught before. please report to data.table issue tracker." +"\n" +"args.doRowNames=%d args.rowNames=%d doQuote=%d args.nrow=%d args.ncol=%d " +"eolLen=%d\n" msgstr "" -#: frollR.c:122 -msgid "" -"using adaptive TRUE and align argument different than 'right' is not " -"implemented" +#: fwrite.c:654 +#, c-format +msgid "Internal error: type %d has no max length method implemented" msgstr "" -#: frollR.c:135 -msgid "" -"adaptive rolling function can only process 'x' having equal length of " -"elements, like data.table or data.frame; If you want to call rolling " -"function on list having variable length of elements call it for each field " -"separately" +#: fwrite.c:661 +#, c-format +msgid "maxLineLen=%zd. Found in %.3fs\n" msgstr "" -#: frollR.c:137 +#: fwrite.c:681 +#, c-format msgid "" -"length of integer vector(s) provided as list to 'n' argument must be equal " -"to number of observations provided in 'x'" +"%s: '%s'. Failed to open existing file for writing. Do you have write " +"permission to it? Is this Windows and does another process such as Excel " +"have it open?" msgstr "" -#: frollR.c:151 +#: fwrite.c:682 +#, c-format msgid "" -"Internal error: invalid fun argument in rolling function, should have been " -"caught before. please report to data.table issue tracker." +"%s: '%s'. Unable to create new file for writing (it does not exist already). " +"Do you have permission to write here, is there space on the disk and does " +"the path exist?" msgstr "" -#: frollR.c:155 frollR.c:279 nafill.c:136 shift.c:21 -msgid "fill must be a vector of length 1" +#: fwrite.c:690 +#, c-format +msgid "Writing bom (%s), yaml (%d characters) and column names (%s) ... " msgstr "" -#: frollR.c:169 frollR.c:292 -msgid "fill must be numeric" +#: fwrite.c:703 +#, c-format +msgid "Unable to allocate %d MiB for header: %s" msgstr "" -#: frollR.c:185 -msgid "" -"Internal error: invalid algo argument in rolling function, should have been " -"caught before. please report to data.table issue tracker." +#: fwrite.c:731 fwrite.c:793 +msgid "Can't allocate gzip stream structure" msgstr "" -#: frollR.c:190 +#: fwrite.c:737 #, c-format -msgid "Internal error: badaptive=%d but ik is not integer" +msgid "Unable to allocate %d MiB for zbuffer: %s" msgstr "" -#: frollR.c:219 +#: fwrite.c:752 #, c-format -msgid "Internal error: Unknown sfun value in froll: %d" +msgid "Compress gzip error: %d" msgstr "" -#: frollR.c:238 -msgid "internal error: 'fun' must be a function" +#: fwrite.c:753 fwrite.c:761 fwrite.c:940 fwrite.c:949 +#, c-format +msgid "%s: '%s'" msgstr "" -#: frollR.c:240 -msgid "internal error: 'rho' should be an environment" +#: fwrite.c:758 +#, c-format +msgid "done in %.3fs\n" msgstr "" -#: fsort.c:111 -msgid "x must be a vector of type 'double' currently" +#: fwrite.c:760 +msgid "No data rows present (nrow==0)\n" msgstr "" -#: fsort.c:157 -msgid "Cannot yet handle negatives." +#: fwrite.c:777 +#, c-format +msgid "" +"Writing %d rows in %d batches of %d rows (each buffer size %dMB, " +"showProgress=%d, nth=%d) ... " msgstr "" -#: fsort.c:173 -msgid "Unable to allocate working memory" +#: fwrite.c:946 +#, c-format +msgid "" +"Error %d: one or more threads failed to allocate buffers or there was a " +"compression error." msgstr "" -#: fsort.c:230 -msgid "Internal error: counts[nBatch-1][MSBsize-1] != length(x)" +#: fwrite.c:947 +msgid "" +" Please try again with verbose=TRUE and try searching online for this error " +"message.\n" msgstr "" #: fwriteR.c:41 @@ -1379,7 +3007,14 @@ msgstr "" #, c-format msgid "" "Row %d of list column is type '%s' - not yet implemented. fwrite() can write " -"list columns containing items which are atomic vectors of" +"list columns containing items which are atomic vectors of type logical, " +"integer, integer64, double, complex and character." +msgstr "" + +#: fwriteR.c:103 +#, c-format +msgid "" +"Internal error: row %d of list column has no max length method implemented" msgstr "" #: fwriteR.c:170 @@ -1387,6 +3022,10 @@ msgid "" "fwrite must be passed an object of type list; e.g. data.frame, data.table" msgstr "" +#: fwriteR.c:179 +msgid "fwrite was passed an empty list of no columns. Nothing to write." +msgstr "" + #: fwriteR.c:234 #, c-format msgid "Column %d's length (%d) is not the same as column 1's length (%d)" @@ -1397,6 +3036,19 @@ msgstr "" msgid "Column %d's type is '%s' - not yet implemented in fwrite." msgstr "" +#: fwriteR.c:262 +msgid "" +"No list columns are present. Setting sep2='' otherwise quote='auto' would " +"quote fields containing sep2.\n" +msgstr "" + +#: fwriteR.c:266 +#, 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 #, c-format msgid "" @@ -1445,25 +3097,61 @@ msgid "" "batchSize=%d lastBatchSize=%d\n" msgstr "" +#: gsumm.c:98 +#, c-format +msgid "gforce initial population of grp took %.3f\n" +msgstr "" + #: gsumm.c:116 msgid "" "Internal error: Failed to allocate counts or TMP when assigning g in gforce" msgstr "" +#: gsumm.c:194 +#, c-format +msgid "gforce assign high and low took %.3f\n" +msgstr "" + +#: gsumm.c:200 +#, c-format +msgid "gforce eval took %.3f\n" +msgstr "" + +#: gsumm.c:216 +msgid "gather took ... " +msgstr "" + #: gsumm.c:334 #, c-format msgid "gather implemented for INTSXP, REALSXP, and CPLXSXP but not '%s'" msgstr "" +#: gsumm.c:336 gsumm.c:568 +#, c-format +msgid "%.3fs\n" +msgstr "" + #: gsumm.c:345 msgid "sum is not meaningful for factors." msgstr "" +#: gsumm.c:349 +#, c-format +msgid "This gsum took (narm=%s) ... " +msgstr "" + #: gsumm.c:350 gsumm.c:606 #, c-format msgid "nrow [%d] != length(x) [%d] in gsum" msgstr "" +#: gsumm.c:404 +msgid "" +"The sum of an integer column for a group was more than type 'integer' can " +"hold so the result has been coerced to 'numeric' automatically for " +"convenience." +msgstr "" + #: gsumm.c:565 #, c-format msgid "" @@ -1530,6 +3218,24 @@ msgstr "" msgid "nrow [%d] != length(x) [%d] in gmin" msgstr "" +#: gsumm.c:717 gsumm.c:850 +msgid "" +"No non-missing values found in at least one group. Coercing to numeric type " +"and returning 'Inf' for such groups to be consistent with base" +msgstr "" + +#: gsumm.c:756 gsumm.c:891 +msgid "" +"No non-missing values found in at least one group. Returning 'NA' for such " +"groups to be consistent with base" +msgstr "" + +#: gsumm.c:783 +msgid "" +"No non-missing values found in at least one group. Returning 'Inf' for such " +"groups to be consistent with base" +msgstr "" + #: gsumm.c:791 msgid "Type 'complex' has no well-defined min" msgstr "" @@ -1558,6 +3264,12 @@ msgstr "" msgid "nrow [%d] != length(x) [%d] in gmax" msgstr "" +#: gsumm.c:930 +msgid "" +"No non-missing values found in at least one group. Returning '-Inf' for such " +"groups to be consistent with base" +msgstr "" + #: gsumm.c:937 msgid "Type 'complex' has no well-defined max" msgstr "" @@ -1591,53 +3303,54 @@ msgstr "" #, c-format msgid "" "Type '%s' not supported by GForce median (gmedian). Either add the prefix " -"stats::median(.) or turn " +"stats::median(.) or turn off GForce optimization using options(datatable." +"optimize=1)" msgstr "" -#: gsumm.c:1006 +#: gsumm.c:1005 #, c-format msgid "nrow [%d] != length(x) [%d] in gtail" msgstr "" -#: gsumm.c:1074 +#: gsumm.c:1073 #, c-format msgid "" "Type '%s' not supported by GForce tail (gtail). Either add the prefix utils::" "tail(.) or turn off GForce optimization using options(datatable.optimize=1)" msgstr "" -#: gsumm.c:1086 gsumm.c:1177 +#: gsumm.c:1085 gsumm.c:1176 #, c-format msgid "nrow [%d] != length(x) [%d] in ghead" msgstr "" -#: gsumm.c:1154 +#: gsumm.c:1153 #, c-format msgid "" "Type '%s' not supported by GForce head (ghead). Either add the prefix utils::" "head(.) or turn off GForce optimization using options(datatable.optimize=1)" msgstr "" -#: gsumm.c:1162 +#: gsumm.c:1161 msgid "" "Internal error, gtail is only implemented for n=1. This should have been " "caught before. please report to data.table issue tracker." msgstr "" -#: gsumm.c:1167 +#: 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 "" -#: gsumm.c:1173 +#: 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 "" -#: gsumm.c:1251 +#: gsumm.c:1250 #, c-format msgid "" "Type '%s' not supported by GForce subset `[` (gnthvalue). Either add the " @@ -1645,7 +3358,7 @@ msgid "" "options(datatable.optimize=1)" msgstr "" -#: gsumm.c:1263 +#: gsumm.c:1262 msgid "" "GForce var/sd can only be applied to columns, not .SD or similar. For the " "full covariance matrix of all items in a list such as .SD, either add the " @@ -1655,30 +3368,30 @@ msgid "" "to do this." msgstr "" -#: gsumm.c:1264 +#: gsumm.c:1263 msgid "var/sd is not meaningful for factors." msgstr "" -#: gsumm.c:1267 +#: gsumm.c:1266 #, c-format msgid "nrow [%d] != length(x) [%d] in gvar" msgstr "" -#: gsumm.c:1383 +#: gsumm.c:1382 #, c-format 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 "" -#: gsumm.c:1385 +#: gsumm.c:1384 #, c-format msgid "" "Type '%s' not supported by GForce sd (gsd). Either add the prefix stats::" "sd(.) or turn off GForce optimization using options(datatable.optimize=1)" msgstr "" -#: gsumm.c:1404 +#: gsumm.c:1403 msgid "" "GForce prod can only be applied to columns, not .SD or similar. To multiply " "all items in a list such as .SD, either add the prefix base::prod(.SD) or " @@ -1686,21 +3399,21 @@ msgid "" "likely, you may be looking for 'DT[,lapply(.SD,prod),by=,.SDcols=]'" msgstr "" -#: gsumm.c:1405 +#: gsumm.c:1404 msgid "prod is not meaningful for factors." msgstr "" -#: gsumm.c:1410 +#: gsumm.c:1409 #, c-format msgid "nrow [%d] != length(x) [%d] in gprod" msgstr "" -#: gsumm.c:1412 +#: gsumm.c:1411 #, c-format msgid "Unable to allocate %d * %d bytes for gprod" msgstr "" -#: gsumm.c:1447 +#: gsumm.c:1446 #, c-format msgid "" "Type '%s' not supported by GForce prod (gprod). Either add the prefix base::" @@ -1729,6 +3442,16 @@ msgstr "" msgid "Internal error: unknown mult in lookup: %d" msgstr "" +#: ijoin.c:128 +#, c-format +msgid "First pass on calculating lengths in lookup ... done in %8.3f seconds\n" +msgstr "" + +#: ijoin.c:141 +#, c-format +msgid "Second pass on allocation in lookup ... done in %8.3f seconds\n" +msgstr "" + #: ijoin.c:160 #, c-format msgid "Internal error: unknown type lookup should have been caught earlier: %d" @@ -1741,11 +3464,22 @@ msgid "" "earlier: %d" msgstr "" +#: ijoin.c:220 +#, c-format +msgid "Final step in generating lookup ... done in %8.3f seconds\n" +msgstr "" + #: ijoin.c:323 #, c-format msgid "Internal error: unknown type in mult=ALL in overlaps: %d" msgstr "" +#: ijoin.c:328 +#, c-format +msgid "" +"First pass on calculating lengths in overlaps ... done in %8.3f seconds\n" +msgstr "" + #: ijoin.c:464 ijoin.c:571 ijoin.c:720 #, c-format msgid "Internal error: unknown type in mult=%d in overlaps: %d" @@ -1756,6 +3490,11 @@ msgstr "" msgid "Internal error: unknown mult in overlaps: %d" msgstr "" +#: ijoin.c:727 +#, c-format +msgid "Final step, fetching indices in overlaps ... done in %8.3f seconds\n" +msgstr "" + #: init.c:198 #, c-format msgid "" @@ -1925,10 +3664,79 @@ msgid "" "caught before. Please report to data.table issue tracker." msgstr "" +#: nafill.c:177 +#, c-format +msgid "%s: parallel processing of %d column(s) took %.3fs\n" +msgstr "" + +#: openmp-utils.c:22 +#, c-format +msgid "" +"Ignoring invalid %s==\")%s\". Not an integer >= 1. Please remove any " +"characters that are not a digit [0-9]. See ?data.table::setDTthreads." +msgstr "" + +#: openmp-utils.c:40 +#, c-format +msgid "" +"Ignoring invalid R_DATATABLE_NUM_PROCS_PERCENT==%d. If used it must be an " +"integer between 2 and 100. Default is 50. See ?setDTtheads." +msgstr "" + #: openmp-utils.c:67 msgid "'verbose' must be TRUE or FALSE" msgstr "" +#: openmp-utils.c:70 +msgid "" +"This installation of data.table has not been compiled with OpenMP support.\n" +msgstr "" + +#: openmp-utils.c:75 +#, c-format +msgid " omp_get_num_procs() %d\n" +msgstr "" + +#: openmp-utils.c:76 +#, c-format +msgid " R_DATATABLE_NUM_PROCS_PERCENT %s\n" +msgstr "" + +#: openmp-utils.c:77 +#, c-format +msgid " R_DATATABLE_NUM_THREADS %s\n" +msgstr "" + +#: openmp-utils.c:78 +#, c-format +msgid " omp_get_thread_limit() %d\n" +msgstr "" + +#: openmp-utils.c:79 +#, c-format +msgid " omp_get_max_threads() %d\n" +msgstr "" + +#: openmp-utils.c:80 +#, c-format +msgid " OMP_THREAD_LIMIT %s\n" +msgstr "" + +#: openmp-utils.c:81 +#, c-format +msgid " OMP_NUM_THREADS %s\n" +msgstr "" + +#: openmp-utils.c:82 +#, c-format +msgid " RestoreAfterFork %s\n" +msgstr "" + +#: openmp-utils.c:83 +#, c-format +msgid " data.table is using %d threads. See ?setDTthreads.\n" +msgstr "" + #: openmp-utils.c:91 msgid "" "restore_after_fork= must be TRUE, FALSE, or NULL (default). " @@ -1975,6 +3783,10 @@ msgid "" "frames or plain lists." msgstr "" +#: rbindlist.c:16 +msgid "use.names= cannot be FALSE when fill is TRUE. Setting use.names=TRUE." +msgstr "" + #: rbindlist.c:20 msgid "Internal error: rbindlist.c idcol is not a single string" msgstr "" @@ -2003,6 +3815,13 @@ msgid "" "length %d. Only length-1 columns are recycled." msgstr "" +#: rbindlist.c:58 +#, c-format +msgid "" +"Column %d ['%s'] of item %d is length 0. This (and %d other%s like it) has " +"been filled with NA (NULL for list columns) to make each item uniform." +msgstr "" + #: rbindlist.c:62 #, c-format msgid "" @@ -2037,12 +3856,26 @@ msgid "" "TRUE earlier with warning." msgstr "" +#: rbindlist.c:196 +msgid "" +" use.names='check' (default from v1.12.2) emits this message and proceeds as " +"if use.names=FALSE for backwards compatibility. See news item 5 in v1.12.2 " +"for options to control this message." +msgstr "" + #: rbindlist.c:206 msgid "" "Internal error: could not find the first column name not present in earlier " "item" msgstr "" +#: rbindlist.c:210 +#, c-format +msgid "" +"Column %d ['%s'] of item %d is missing in item %d. Use fill=TRUE to fill " +"with NA (NULL for list columns), or use.names=FALSE to ignore column names.%s" +msgstr "" + #: rbindlist.c:218 #, c-format msgid "" @@ -2050,6 +3883,27 @@ msgid "" "item with no names or the first item. [%d]" msgstr "" +#: rbindlist.c:219 +#, c-format +msgid "" +"Column %d ['%s'] of item %d appears in position %d in item %d. Set use." +"names=TRUE to match by column name, or use.names=FALSE to ignore column " +"names.%s" +msgstr "" + +#: rbindlist.c:228 +msgid "" +"options()$datatable.rbindlist.check is set but is not a single string. See " +"news item 5 in v1.12.2." +msgstr "" + +#: rbindlist.c:235 +#, c-format +msgid "" +"options()$datatable.rbindlist.check=='%s' which is not " +"'message'|'warning'|'error'|'none'. See news item 5 in v1.12.2." +msgstr "" + #: rbindlist.c:297 #, c-format msgid "" @@ -2077,6 +3931,23 @@ msgid "" "column %d" msgstr "" +#: rbindlist.c:382 +#, c-format +msgid "" +"Column %d of item %d is an ordered factor but level %d ['%s'] is missing " +"from the ordered levels from column %d of item %d. Each set of ordered " +"factor levels should be an ordered subset of the first longest. A regular " +"factor will be created for this column." +msgstr "" + +#: rbindlist.c:387 +#, c-format +msgid "" +"Column %d of item %d is an ordered factor with '%s'<'%s' in its levels. But " +"'%s'<'%s' in the ordered levels from column %d of item %d. A regular factor " +"will be created for this column due to this ambiguity." +msgstr "" + #: rbindlist.c:432 #, c-format msgid "" @@ -2084,6 +3955,11 @@ msgid "" "when reading item %d of item %d" msgstr "" +#: rbindlist.c:522 +#, c-format +msgid "Column %d of item %d: %s" +msgstr "" + #: reorder.c:17 #, c-format msgid "Item %d of list is type '%s' which isn't yet supported (SIZEOF=%d)" @@ -2204,6 +4080,20 @@ msgstr "" msgid "Item %d of i is %d and item %d is NA. Cannot mix negatives and NA." msgstr "" +#: subset.c:207 +#, 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 +#, 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 #, c-format msgid "Column %d is NULL; malformed data.table." @@ -2266,6 +4156,13 @@ msgstr "" msgid "Item %d of list input is not an atomic vector" msgstr "" +#: types.c:17 types.c:21 +#, c-format +msgid "" +"%s: %d:\n" +"%s" +msgstr "" + #: types.c:23 #, c-format msgid "" @@ -2405,6 +4302,11 @@ msgid "" "copyMostAttrib() retains ALTREP attributes" msgstr "" +#: utils.c:313 +#, c-format +msgid "Found and copied %d column%s with a shared memory address\n" +msgstr "" + #: vecseq.c:13 msgid "x must be an integer vector" msgstr "" From 6ac71e4089c5536f1b55dcfcc399c0a6312d58e1 Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Wed, 16 Oct 2019 01:54:09 +0800 Subject: [PATCH 12/22] moving pot file to po/ --- po/data.table.pot | 4384 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 4384 insertions(+) create mode 100644 po/data.table.pot diff --git a/po/data.table.pot b/po/data.table.pot new file mode 100644 index 0000000000..1bb137587e --- /dev/null +++ b/po/data.table.pot @@ -0,0 +1,4384 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-10-16 01:42+0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: assign.c:9 +msgid "Internal error: finalizer hasn't received an ExternalPtr" +msgstr "" + +#: assign.c:11 +msgid "Internal error: finalizer's ExternalPtr doesn't see names in tag" +msgstr "" + +#: assign.c:14 +#, c-format +msgid "Internal error: finalizer sees l=%d, tl=%d" +msgstr "" + +#: assign.c:123 +msgid "" +".internal.selfref ptr is NULL. This is expected and normal for a data.table " +"loaded from disk. Please remember to always setDT() immediately after " +"loading to prevent unexpected behavior. If this table was not loaded from " +"disk or you've already run setDT(), please report to data.table issue " +"tracker.\n" +msgstr "" + +#: assign.c:126 +msgid "Internal error: .internal.selfref ptr is not NULL or R_NilValue" +msgstr "" + +#: assign.c:128 +msgid "Internal error: .internal.selfref tag isn't NULL or a character vector" +msgstr "" + +#: assign.c:170 +msgid "Internal error: length(names)>0 but =0 and not NA." +msgstr "" + +#: assign.c:241 fsort.c:109 nafill.c:73 +msgid "verbose must be TRUE or FALSE" +msgstr "" + +#: assign.c:289 +msgid "assign has been passed a NULL dt" +msgstr "" + +#: assign.c:290 +msgid "dt passed to assign isn't type VECSXP" +msgstr "" + +#: assign.c:292 +msgid "" +".SD is locked. Updating .SD by reference using := or set are reserved for " +"future use. Use := in j directly. Or use copy(.SD) as a (slow) last resort, " +"until shallow() is exported." +msgstr "" + +#: assign.c:300 +msgid "Internal error: dt passed to Cassign is not a data.table or data.frame" +msgstr "" + +#: assign.c:304 +msgid "dt passed to assign has no names" +msgstr "" + +#: assign.c:306 +#, c-format +msgid "Internal error in assign: length of names (%d) is not length of dt (%d)" +msgstr "" + +#: assign.c:308 +msgid "" +"data.table is NULL; malformed. A null data.table should be an empty list. " +"typeof() should always return 'list' for data.table." +msgstr "" + +#: assign.c:317 +#, c-format +msgid "Assigning to all %d rows\n" +msgstr "" + +#: assign.c:322 +msgid "" +"Coerced i from numeric to integer. Please pass integer for efficiency; e.g., " +"2L rather than 2" +msgstr "" + +#: assign.c:325 +#, c-format +msgid "" +"i is type '%s'. Must be integer, or numeric is coerced with warning. If i is " +"a logical subset, simply wrap with which(), and take the which() outside the " +"loop if possible for efficiency." +msgstr "" + +#: assign.c:331 +#, c-format +msgid "i[%d] is %d which is out of range [1,nrow=%d]." +msgstr "" + +#: assign.c:334 +#, c-format +msgid "Assigning to %d row subset of %d rows\n" +msgstr "" + +#: assign.c:342 +#, c-format +msgid "Added %d new column%s initialized with all-NA\n" +msgstr "" + +#: assign.c:347 +msgid "length(LHS)==0; no columns to delete or assign RHS to." +msgstr "" + +#: assign.c:361 +msgid "" +"set() on a data.frame is for changing existing columns, not adding new ones. " +"Please use a data.table for that. data.table's are over-allocated and don't " +"shallow copy." +msgstr "" + +#: assign.c:372 +msgid "" +"Coerced j from numeric to integer. Please pass integer for efficiency; e.g., " +"2L rather than 2" +msgstr "" + +#: assign.c:375 +#, c-format +msgid "" +"j is type '%s'. Must be integer, character, or numeric is coerced with " +"warning." +msgstr "" + +#: assign.c:377 +msgid "" +"Can't assign to the same column twice in the same query (duplicates " +"detected)." +msgstr "" + +#: assign.c:378 +msgid "newcolnames is supplied but isn't a character vector" +msgstr "" + +#: assign.c:380 +#, c-format +msgid "RHS_list_of_columns == %s\n" +msgstr "" + +#: assign.c:385 +#, c-format +msgid "" +"RHS_list_of_columns revised to true because RHS list has 1 item which is " +"NULL, or whose length %d is either 1 or targetlen (%d). Please unwrap RHS.\n" +msgstr "" + +#: assign.c:390 +#, c-format +msgid "" +"Supplied %d columns to be assigned an empty list (which may be an empty data." +"table or data.frame since they are lists too). To delete multiple columns " +"use NULL instead. To add multiple empty list columns, use list(list())." +msgstr "" + +#: assign.c:395 +#, c-format +msgid "Recycling single RHS list item across %d columns. Please unwrap RHS.\n" +msgstr "" + +#: assign.c:397 +#, c-format +msgid "" +"Supplied %d columns to be assigned %d items. Please see NEWS for v1.12.2." +msgstr "" + +#: assign.c:405 +#, c-format +msgid "" +"Item %d of column numbers in j is %d which is outside range [1,ncol=%d]. " +"set() on a data.frame is for changing existing columns, not adding new ones. " +"Please use a data.table for that." +msgstr "" + +#: assign.c:406 +#, c-format +msgid "" +"Item %d of column numbers in j is %d which is outside range [1,ncol=%d]. Use " +"column names instead in j to add new columns." +msgstr "" + +#: assign.c:411 +msgid "When deleting columns, i should not be provided" +msgstr "" + +#: assign.c:417 +#, c-format +msgid "" +"RHS of assignment to existing column '%s' is zero length but not NULL. If " +"you intend to delete the column use NULL. Otherwise, the RHS must have " +"length > 0; e.g., NA_integer_. If you are trying to change the column type " +"to be an empty list column then, as with all column type changes, provide a " +"full length RHS vector such as vector('list',nrow(DT)); i.e., 'plonk' in the " +"new column." +msgstr "" + +#: assign.c:422 +#, c-format +msgid "" +"Internal error in assign.c: length(newcolnames)=%d, length(names)=%d, coln=%d" +msgstr "" + +#: assign.c:424 +#, c-format +msgid "Column '%s' does not exist to remove" +msgstr "" + +#: assign.c:430 +#, c-format +msgid "%d column matrix RHS of := will be treated as one vector" +msgstr "" + +#: assign.c:434 +#, c-format +msgid "" +"Can't assign to column '%s' (type 'factor') a value of type '%s' (not " +"character, factor, integer or numeric)" +msgstr "" + +#: assign.c:439 +#, c-format +msgid "" +"Supplied %d items to be assigned to %d items of column '%s'. If you wish to " +"'recycle' the RHS please use rep() to make this intent clear to readers of " +"your code." +msgstr "" + +#: assign.c:449 +msgid "" +"This data.table has either been loaded from disk (e.g. using readRDS()/" +"load()) or constructed manually (e.g. using structure()). Please run setDT() " +"or setalloccol() on it first (to pre-allocate space for new columns) before " +"assigning by reference to it." +msgstr "" + +#: assign.c:450 +#, c-format +msgid "" +"Internal error: oldtncol(%d) < oldncol(%d). Please report to data.table " +"issue tracker, including result of sessionInfo()." +msgstr "" + +#: assign.c:452 +#, c-format +msgid "" +"truelength (%d) is greater than 10,000 items over-allocated (length = %d). " +"See ?truelength. If you didn't set the datatable.alloccol option very large, " +"please report to data.table issue tracker including the result of " +"sessionInfo()." +msgstr "" + +#: assign.c:454 +#, c-format +msgid "" +"Internal error: DT passed to assign has not been allocated enough column " +"slots. l=%d, tl=%d, adding %d" +msgstr "" + +#: assign.c:456 +msgid "" +"It appears that at some earlier point, names of this data.table have been " +"reassigned. Please ensure to use setnames() rather than names<- or " +"colnames<-. Otherwise, please report to data.table issue tracker." +msgstr "" + +#: assign.c:460 +#, c-format +msgid "Internal error: selfrefnames is ok but tl names [%d] != tl [%d]" +msgstr "" + +#: assign.c:471 +msgid "" +"Internal error: earlier error 'When deleting columns, i should not be " +"provided' did not happen." +msgstr "" + +#: assign.c:482 +#, c-format +msgid "" +"RHS for item %d has been duplicated because NAMED==%d MAYBE_SHARED==%d, but " +"then is being plonked. length(values)==%d; length(cols)==%d)\n" +msgstr "" + +#: assign.c:487 +#, c-format +msgid "Direct plonk of unnamed RHS, no copy. NAMED==%d, MAYBE_SHARED==%d\n" +msgstr "" + +#: assign.c:556 +#, c-format +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 "" + +#: assign.c:564 +msgid "Internal error: index name ends with trailing __" +msgstr "" + +#: assign.c:569 +msgid "Internal error: Couldn't allocate memory for s4." +msgstr "" + +#: assign.c:580 +msgid "Internal error: Couldn't allocate memory for s5." +msgstr "" + +#: assign.c:601 assign.c:617 +#, c-format +msgid "Dropping index '%s' due to an update on a key column\n" +msgstr "" + +#: assign.c:610 +#, c-format +msgid "Shortening index '%s' to '%s' due to an update on a key column\n" +msgstr "" + +#: assign.c:687 +#, c-format +msgid "Internal error: recycle length error not caught earlier. slen=%d len=%d" +msgstr "" + +#: assign.c:691 +msgid "Internal error: memrecycle has received NULL colname" +msgstr "" + +#: assign.c:717 +#, c-format +msgid "" +"Cannot assign 'factor' to '%s'. Factors can only be assigned to factor, " +"character or list columns." +msgstr "" + +#: assign.c:731 +#, c-format +msgid "" +"Assigning factor numbers to column %d named '%s'. But %d is outside the " +"level range [1,%d]" +msgstr "" + +#: assign.c:739 +#, 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:745 +#, 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:766 +msgid "" +"Internal error: levels of target are either not unique or have truelength<0" +msgstr "" + +#: assign.c:805 +#, c-format +msgid "Unable to allocate working memory of %d bytes to combine factor levels" +msgstr "" + +#: assign.c:812 +msgid "Internal error: extra level check sum failed" +msgstr "" + +#: assign.c:831 +#, c-format +msgid "" +"Coercing 'character' RHS to '%s' to match the type of the target column " +"(column %d named '%s')." +msgstr "" + +#: assign.c:837 +#, c-format +msgid "" +"Cannot coerce 'list' RHS to 'integer64' to match the type of the target " +"column (column %d named '%s')." +msgstr "" + +#: assign.c:842 +#, c-format +msgid "" +"Coercing 'list' RHS to '%s' to match the type of the target column (column " +"%d named '%s')." +msgstr "" + +#: assign.c:848 +#, c-format +msgid "Zero-copy coerce when assigning '%s' to '%s' column %d named '%s'.\n" +msgstr "" + +#: assign.c:943 +#, c-format +msgid "type '%s' cannot be coerced to '%s'" +msgstr "" + +#: assign.c:1063 +msgid "" +"To assign integer64 to a character column, please use as.character() for " +"clarity." +msgstr "" + +#: assign.c:1074 +#, c-format +msgid "Unsupported column type in assign.c:memrecycle '%s'" +msgstr "" + +#: assign.c:1121 +#, c-format +msgid "Internal error: writeNA passed a vector of type '%s'" +msgstr "" + +#: assign.c:1152 +#, c-format +msgid "" +"Internal error: savetl_init checks failed (%d %d %p %p). please report to " +"data.table issue tracker." +msgstr "" + +#: assign.c:1160 +#, c-format +msgid "Failed to allocate initial %d items in savetl_init" +msgstr "" + +#: assign.c:1169 +#, c-format +msgid "" +"Internal error: reached maximum %d items for savetl. Please report to data." +"table issue tracker." +msgstr "" + +#: assign.c:1176 +#, c-format +msgid "Failed to realloc saveds to %d items in savetl" +msgstr "" + +#: assign.c:1182 +#, c-format +msgid "Failed to realloc savedtl to %d items in savetl" +msgstr "" + +#: assign.c:1205 +msgid "x must be a character vector" +msgstr "" + +#: assign.c:1206 +msgid "'which' must be an integer vector" +msgstr "" + +#: assign.c:1207 +msgid "'new' must be a character vector" +msgstr "" + +#: assign.c:1208 +#, c-format +msgid "'new' is length %d. Should be the same as length of 'which' (%d)" +msgstr "" + +#: assign.c:1211 +#, c-format +msgid "" +"Item %d of 'which' is %d which is outside range of the length %d character " +"vector" +msgstr "" + +#: assign.c:1221 +msgid "dt passed to setcolorder has no names" +msgstr "" + +#: assign.c:1223 +#, c-format +msgid "Internal error: dt passed to setcolorder has %d columns but %d names" +msgstr "" + +#: assign.c:1230 +msgid "" +"Internal error: o passed to Csetcolorder contains an NA or out-of-bounds" +msgstr "" + +#: assign.c:1232 +msgid "Internal error: o passed to Csetcolorder contains a duplicate" +msgstr "" + +#: between.c:12 +#, c-format +msgid "" +"Incompatible vector lengths: length(x)==%d length(lower)==%d length(upper)==" +"%d. Each should be either length 1 or the length of the longest." +msgstr "" + +#: between.c:16 +msgid "incbounds must be TRUE or FALSE" +msgstr "" + +#: between.c:19 +msgid "NAbounds must be TRUE or NA" +msgstr "" + +#: between.c:22 +msgid "check must be TRUE or FALSE" +msgstr "" + +#: between.c:64 +#, c-format +msgid "Item %d of lower (%d) is greater than item %d of upper (%d)" +msgstr "" + +#: between.c:82 +#, c-format +msgid "between parallel processing of integer took %8.3fs\n" +msgstr "" + +#: between.c:88 +msgid "x is integer64 but lower and/or upper are not." +msgstr "" + +#: between.c:95 +#, c-format +msgid "Item %d of lower (%lld) is greater than item %d of upper (%lld)" +msgstr "" + +#: between.c:112 +#, c-format +msgid "between parallel processing of integer64 took %8.3fs\n" +msgstr "" + +#: between.c:115 +msgid "" +"x is not integer64 but lower and/or upper is integer64. Please align classes." +msgstr "" + +#: between.c:122 +#, c-format +msgid "Item %d of lower (%f) is greater than item %d of upper (%f)" +msgstr "" + +#: between.c:140 +#, c-format +msgid "between parallel processing of double with open bounds took %8.3fs\n" +msgstr "" + +#: between.c:157 +#, c-format +msgid "between parallel processing of double with closed bounds took %8.3fs\n" +msgstr "" + +#: between.c:172 +#, c-format +msgid "Item %d of lower ('%s') is greater than item %d of upper ('%s')" +msgstr "" + +#: between.c:187 +#, c-format +msgid "between non-parallel processing of character took %8.3fs\n" +msgstr "" + +#: between.c:190 +#, c-format +msgid "" +"Internal error: between.c unsupported type '%s' should have been caught at R " +"level" +msgstr "" + +#: bmerge.c:48 +msgid "Internal error: icols is not integer vector" +msgstr "" + +#: bmerge.c:49 +msgid "Internal error: xcols is not integer vector" +msgstr "" + +#: bmerge.c:50 +#, c-format +msgid "Internal error: length(icols) [%d] > length(xcols) [%d]" +msgstr "" + +#: bmerge.c:57 +#, c-format +msgid "Internal error. icols[%d] is NA" +msgstr "" + +#: bmerge.c:58 +#, c-format +msgid "Internal error. xcols[%d] is NA" +msgstr "" + +#: bmerge.c:59 +#, c-format +msgid "icols[%d]=%d outside range [1,length(i)=%d]" +msgstr "" + +#: bmerge.c:60 +#, c-format +msgid "xcols[%d]=%d outside range [1,length(x)=%d]" +msgstr "" + +#: bmerge.c:63 +#, c-format +msgid "typeof x.%s (%s) != typeof i.%s (%s)" +msgstr "" + +#: bmerge.c:70 +msgid "roll is character but not 'nearest'" +msgstr "" + +#: bmerge.c:71 +msgid "roll='nearest' can't be applied to a character column, yet." +msgstr "" + +#: bmerge.c:74 +msgid "Internal error: roll is not character or double" +msgstr "" + +#: bmerge.c:79 +msgid "rollends must be a length 2 logical vector" +msgstr "" + +#: bmerge.c:89 uniqlist.c:270 +msgid "" +"Internal error: invalid value for 'mult'. please report to data.table issue " +"tracker" +msgstr "" + +#: bmerge.c:93 +msgid "" +"Internal error: opArg is not an integer vector of length equal to length(on)" +msgstr "" + +#: bmerge.c:96 +msgid "Internal error: nqgrpArg must be an integer vector" +msgstr "" + +#: bmerge.c:102 +msgid "Intrnal error: nqmaxgrpArg is not a positive length-1 integer vector" +msgstr "" + +#: bmerge.c:111 +msgid "Internal error in allocating memory for non-equi join" +msgstr "" + +#: bmerge.c:156 +msgid "Internal error: xoArg is not an integer vector" +msgstr "" + +#: bmerge.c:271 bmerge.c:379 +#, c-format +msgid "" +"Internal error in bmerge_r for '%s' column. Unrecognized value op[col]=%d" +msgstr "" + +#: bmerge.c:303 +#, c-format +msgid "Only '==' operator is supported for columns of type %s." +msgstr "" + +#: bmerge.c:410 +#, c-format +msgid "Type '%s' not supported for joining/merging" +msgstr "" + +#: bmerge.c:468 +msgid "Internal error: xlow!=xupp-1 || xlowxuppIn" +msgstr "" + +#: chmatch.c:4 +#, c-format +msgid "x is type '%s' (must be 'character' or NULL)" +msgstr "" + +#: chmatch.c:5 +#, c-format +msgid "table is type '%s' (must be 'character' or NULL)" +msgstr "" + +#: chmatch.c:6 +msgid "Internal error: either chin or chmatchdup should be true not both" +msgstr "" + +#: chmatch.c:30 +#, c-format +msgid "" +"Internal error: CHARSXP '%s' has a negative truelength (%d). Please file an " +"issue on the data.table tracker." +msgstr "" + +#: chmatch.c:60 +#, c-format +msgid "" +"Failed to allocate %lld bytes working memory in chmatchdup: length(table)=%d " +"length(unique(table))=%d" +msgstr "" + +#: cj.c:89 +#, c-format +msgid "Type '%s' not supported by CJ." +msgstr "" + +#: coalesce.c:5 +msgid "Internal error in coalesce.c: input is list(...) at R level" +msgstr "" + +#: coalesce.c:7 +msgid "" +"Internal error in coalesce.c: argument 'inplaceArg' must be TRUE or FALSE" +msgstr "" + +#: coalesce.c:16 +msgid "" +"The first argument is a list, data.table or data.frame. In this case there " +"should be no other arguments provided." +msgstr "" + +#: coalesce.c:32 +#, c-format +msgid "" +"Item 1 is a factor but item %d is not a factor. When factors are involved, " +"all items must be factor." +msgstr "" + +#: coalesce.c:34 +#, c-format +msgid "" +"Item %d is a factor but its levels are not identical to the first item's " +"levels." +msgstr "" + +#: coalesce.c:38 +#, c-format +msgid "" +"Item %d is a factor but item 1 is not a factor. When factors are involved, " +"all items must be factor." +msgstr "" + +#: coalesce.c:41 +#, c-format +msgid "" +"Item %d is type %s but the first item is type %s. Please coerce before " +"coalescing." +msgstr "" + +#: coalesce.c:43 +#, c-format +msgid "Item %d has a different class than item 1." +msgstr "" + +#: coalesce.c:46 +#, c-format +msgid "" +"Item %d is length %d but the first item is length %d. Only singletons are " +"recycled." +msgstr "" + +#: coalesce.c:50 +msgid "coalesce copied first item (inplace=FALSE)\n" +msgstr "" + +#: coalesce.c:166 +#, c-format +msgid "Unsupported type: %s" +msgstr "" + +#: dogroups.c:14 +msgid "Internal error: order not integer vector" +msgstr "" + +#: dogroups.c:15 +msgid "Internal error: starts not integer" +msgstr "" + +#: dogroups.c:16 +msgid "Internal error: lens not integer" +msgstr "" + +#: dogroups.c:18 +msgid "Internal error: jiscols not NULL but o__ has length" +msgstr "" + +#: dogroups.c:19 +msgid "Internal error: xjiscols not NULL but o__ has length" +msgstr "" + +#: dogroups.c:20 +msgid "'env' should be an environment" +msgstr "" + +#: dogroups.c:39 +#, c-format +msgid "" +"Internal error: unsupported size-0 type '%s' in column %d of 'by' should " +"have been caught earlier" +msgstr "" + +#: dogroups.c:43 +#, c-format +msgid "!length(bynames)[%d]==length(groups)[%d]==length(grpcols)[%d]" +msgstr "" + +#: dogroups.c:62 +msgid "row.names attribute of .SD not found" +msgstr "" + +#: dogroups.c:64 +#, 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 +msgid "length(names)!=length(SD)" +msgstr "" + +#: dogroups.c:73 +#, c-format +msgid "" +"Internal error: size-0 type %d in .SD column %d should have been caught " +"earlier" +msgstr "" + +#: dogroups.c:83 +msgid "length(xknames)!=length(xSD)" +msgstr "" + +#: dogroups.c:87 +#, c-format +msgid "" +"Internal error: type %d in .xSD column %d should have been caught by now" +msgstr "" + +#: dogroups.c:91 +#, c-format +msgid "length(iSD)[%d] != length(jiscols)[%d]" +msgstr "" + +#: dogroups.c:92 +#, 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 +#, c-format +msgid "j evaluates to type '%s'. Must evaluate to atomic vector or list." +msgstr "" + +#: dogroups.c:281 +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:291 +msgid "" +"RHS is NULL when grouping :=. Makes no sense to delete a column by group. " +"Perhaps use an empty vector instead." +msgstr "" + +#: dogroups.c:295 +#, c-format +msgid "" +"Supplied %d items to be assigned to group %d of size %d in column '%s'. The " +"RHS length must either be 1 (single values are ok) or match the LHS length " +"exactly. If you wish to 'recycle' the RHS please use rep() explicitly to " +"make this intent clear to readers of your code." +msgstr "" + +#: dogroups.c:304 +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:319 +#, c-format +msgid "Group %d column '%s': %s" +msgstr "" + +#: dogroups.c:326 +msgid "j doesn't evaluate to the same number of columns for each group" +msgstr "" + +#: dogroups.c:360 +#, c-format +msgid "" +"Column %d of j's result for the first group is NULL. We rely on the column " +"types of the first result to decide the type expected for the remaining " +"groups (and require consistency). NULL columns are acceptable for later " +"groups (and those are replaced with NA of appropriate type and recycled) but " +"not for the first. Please use a typed empty vector instead, such as " +"integer() or numeric()." +msgstr "" + +#: dogroups.c:363 +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:365 +#, c-format +msgid "" +"Column %d of j is a named vector (each item down the rows is named, " +"somehow). Please remove those names for efficiency (to save creating them " +"over and over for each group). They are ignored anyway.\n" +msgstr "" + +#: dogroups.c:373 +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 " +"detected, removed and put back after grouping has completed, for efficiency. " +"Using j=transform(), for example, prevents that speedup (consider changing " +"to :=). This message may be upgraded to warning in future.\n" +msgstr "" + +#: dogroups.c:385 +#, c-format +msgid "dogroups: growing from %d to %d rows\n" +msgstr "" + +#: dogroups.c:386 +#, c-format +msgid "dogroups: length(ans)[%d]!=ngrpcols[%d]+njval[%d]" +msgstr "" + +#: dogroups.c:419 +#, c-format +msgid "" +"Item %d of j's result for group %d is zero length. This will be filled with " +"%d NAs to match the longest column in this result. Later groups may have a " +"similar problem but only the first is reported to save filling the warning " +"buffer." +msgstr "" + +#: dogroups.c:426 +#, 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:428 +#, c-format +msgid "" +"Supplied %d items for column %d of group %d which has %d rows. The RHS " +"length must either be 1 (single values are ok) or match the LHS length " +"exactly. If you wish to 'recycle' the RHS please use rep() explicitly to " +"make this intent clear to readers of your code." +msgstr "" + +#: dogroups.c:443 +#, c-format +msgid "Wrote less rows (%d) than allocated (%d).\n" +msgstr "" + +#: dogroups.c:453 +#, c-format +msgid "Internal error: block 0 [%d] and block 1 [%d] have both run" +msgstr "" + +#: dogroups.c:455 +#, c-format +msgid "" +"\n" +" %s took %.3fs for %d groups\n" +msgstr "" + +#: dogroups.c:457 +#, c-format +msgid " eval(j) took %.3fs for %d calls\n" +msgstr "" + +#: dogroups.c:481 +msgid "growVector passed NULL" +msgstr "" + +#: fastmean.c:39 +msgid "narm should be TRUE or FALSE" +msgstr "" + +#: fastmean.c:45 +#, c-format +msgid "fastmean was passed type %s, not numeric or logical" +msgstr "" + +#: fastmean.c:83 fastmean.c:111 +#, c-format +msgid "Internal error: type '%s' not caught earlier in fastmean" +msgstr "" + +#: fcast.c:80 +#, c-format +msgid "Unsupported column type in fcast val: '%s'" +msgstr "" + +#: fifelse.c:5 +msgid "Argument 'test' must be logical." +msgstr "" + +#: fifelse.c:23 +#, 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 +msgid "" +"'yes' has different class than 'no'. Please make sure that both arguments " +"have the same class." +msgstr "" + +#: fifelse.c:33 +msgid "'yes' and 'no' are both type factor but their levels are different." +msgstr "" + +#: fifelse.c:38 +#, c-format +msgid "Length of 'yes' is %lld but must be 1 or length of 'test' (%lld)." +msgstr "" + +#: fifelse.c:40 +#, c-format +msgid "Length of 'no' is %lld but must be 1 or length of 'test' (%lld)." +msgstr "" + +#: fifelse.c:51 +#, c-format +msgid "Length of 'na' is %lld but must be 1" +msgstr "" + +#: fifelse.c:57 +#, 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 +msgid "" +"'yes' has different class than 'na'. Please make sure that both arguments " +"have the same class." +msgstr "" + +#: fifelse.c:63 +msgid "'yes' and 'na' are both type factor but their levels are different." +msgstr "" + +#: fifelse.c:133 +#, c-format +msgid "Type %s is not supported." +msgstr "" + +#: fmelt.c:18 +msgid "'x' must be an integer" +msgstr "" + +#: fmelt.c:19 +msgid "'n' must be a positive integer" +msgstr "" + +#: fmelt.c:41 +msgid "Argument to 'which' must be logical" +msgstr "" + +#: fmelt.c:70 +msgid "concat: 'vec must be a character vector" +msgstr "" + +#: fmelt.c:71 +msgid "concat: 'idx' must be an integer vector of length >= 0" +msgstr "" + +#: fmelt.c:75 +msgid "" +"concat: 'idx' must take values between 0 and length(vec); 0 <= idx <= " +"length(vec)" +msgstr "" + +#: fmelt.c:102 +#, c-format +msgid "Unknown 'measure.vars' type %s at index %d of list" +msgstr "" + +#: fmelt.c:148 +#, c-format +msgid "" +"id.vars and measure.vars are internally guessed when both are 'NULL'. All " +"non-numeric/integer/logical type columns are considered id.vars, which in " +"this case are columns [%s]. Consider providing at least one of 'id' or " +"'measure' vars in future." +msgstr "" + +#: fmelt.c:154 fmelt.c:219 +#, c-format +msgid "Unknown 'id.vars' type %s, must be character or integer vector" +msgstr "" + +#: fmelt.c:159 fmelt.c:223 +msgid "One or more values in 'id.vars' is invalid." +msgstr "" + +#: fmelt.c:175 +msgid "" +"'measure.vars' is missing. Assigning all columns other than 'id.vars' " +"columns as 'measure.vars'.\n" +msgstr "" + +#: fmelt.c:176 +#, c-format +msgid "Assigned 'measure.vars' are [%s].\n" +msgstr "" + +#: fmelt.c:184 +#, c-format +msgid "" +"Unknown 'measure.vars' type %s, must be character or integer vector/list" +msgstr "" + +#: fmelt.c:193 fmelt.c:239 +msgid "One or more values in 'measure.vars' is invalid." +msgstr "" + +#: fmelt.c:211 +msgid "" +"'id.vars' is missing. Assigning all columns other than 'measure.vars' " +"columns as 'id.vars'.\n" +msgstr "" + +#: fmelt.c:212 +#, c-format +msgid "Assigned 'id.vars' are [%s].\n" +msgstr "" + +#: fmelt.c:231 +#, c-format +msgid "Unknown 'measure.vars' type %s, must be character or integer vector" +msgstr "" + +#: fmelt.c:276 +msgid "" +"When 'measure.vars' is a list, 'value.name' must be a character vector of " +"length =1 or =length(measure.vars)." +msgstr "" + +#: fmelt.c:277 +msgid "" +"When 'measure.vars' is either not specified or a character/integer vector, " +"'value.name' must be a character vector of length =1." +msgstr "" + +#: fmelt.c:280 +msgid "'variable.name' must be a character/integer vector of length=1." +msgstr "" + +#: fmelt.c:329 +msgid "" +"Internal error: combineFactorLevels in fmelt.c expects all-character input" +msgstr "" + +#: fmelt.c:332 +msgid "" +"Internal error: combineFactorLevels in fmelt.c expects a character target to " +"factorize" +msgstr "" + +#: fmelt.c:385 +#, c-format +msgid "" +"'measure.vars' [%s] are not all of the same type. By order of hierarchy, the " +"molten data value column will be of type '%s'. All measure variables not of " +"type '%s' will be coerced too. Check DETAILS in ?melt.data.table for more on " +"coercion.\n" +msgstr "" + +#: fmelt.c:387 +#, c-format +msgid "" +"The molten data value type is a list at item %d. 'na.rm=TRUE' is ignored.\n" +msgstr "" + +#: fmelt.c:490 +#, c-format +msgid "Unknown column type '%s' for column '%s'." +msgstr "" + +#: fmelt.c:514 +#, c-format +msgid "Internal error: fmelt.c:getvarcols %d %d" +msgstr "" + +#: fmelt.c:662 +#, c-format +msgid "Unknown column type '%s' for column '%s' in 'data'" +msgstr "" + +#: fmelt.c:673 +msgid "Input is not of type VECSXP, expected a data.table, data.frame or list" +msgstr "" + +#: fmelt.c:674 +msgid "Argument 'value.factor' should be logical TRUE/FALSE" +msgstr "" + +#: fmelt.c:675 +msgid "Argument 'variable.factor' should be logical TRUE/FALSE" +msgstr "" + +#: fmelt.c:676 +msgid "Argument 'na.rm' should be logical TRUE/FALSE." +msgstr "" + +#: fmelt.c:677 +msgid "Argument 'variable.name' must be a character vector" +msgstr "" + +#: fmelt.c:678 +msgid "Argument 'value.name' must be a character vector" +msgstr "" + +#: fmelt.c:679 +msgid "Argument 'verbose' should be logical TRUE/FALSE" +msgstr "" + +#: fmelt.c:682 +msgid "ncol(data) is 0. Nothing to melt. Returning original data.table." +msgstr "" + +#: fmelt.c:687 +msgid "names(data) is NULL. Please report to data.table-help" +msgstr "" + +#: forder.c:103 +#, c-format +msgid "Failed to realloc thread private group size buffer to %d*4bytes" +msgstr "" + +#: forder.c:117 +#, c-format +msgid "Failed to realloc group size result to %d*4bytes" +msgstr "" + +#: forder.c:260 +#, c-format +msgid "" +"Logical error. counts[0]=%d in cradix but should have been decremented to 0. " +"radix=%d" +msgstr "" + +#: forder.c:275 +msgid "Failed to alloc cradix_counts" +msgstr "" + +#: forder.c:277 +msgid "Failed to alloc cradix_tmp" +msgstr "" + +#: forder.c:288 +#, c-format +msgid "" +"Internal error: ustr isn't empty when starting range_str: ustr_n=%d, " +"ustr_alloc=%d" +msgstr "" + +#: forder.c:289 +msgid "Internal error: ustr_maxlen isn't 0 when starting range_str" +msgstr "" + +#: forder.c:309 +#, c-format +msgid "Unable to realloc %d * %d bytes in range_str" +msgstr "" + +#: forder.c:327 +msgid "Failed to alloc ustr3 when converting strings to UTF8" +msgstr "" + +#: forder.c:345 +msgid "Failed to alloc tl when converting strings to UTF8" +msgstr "" + +#: forder.c:374 +msgid "Must an integer or numeric vector length 1" +msgstr "" + +#: forder.c:375 +msgid "Must be 2, 1 or 0" +msgstr "" + +#: forder.c:409 +msgid "Unknown non-finite value; not NA, NaN, -Inf or +Inf" +msgstr "" + +#: forder.c:431 +msgid "" +"Internal error: input is not either a list of columns, or an atomic vector." +msgstr "" + +#: forder.c:433 +msgid "" +"Internal error: input is an atomic vector (not a list of columns) but by= is " +"not NULL" +msgstr "" + +#: forder.c:435 +msgid "" +"Input is an atomic vector (not a list of columns) but order= is not a length " +"1 integer" +msgstr "" + +#: forder.c:437 +#, c-format +msgid "forder.c received a vector type '%s' length %d\n" +msgstr "" + +#: forder.c:445 +#, c-format +msgid "forder.c received %d rows and %d columns\n" +msgstr "" + +#: forder.c:448 +msgid "Internal error: DT is an empty list() of 0 columns" +msgstr "" + +#: forder.c:450 +#, c-format +msgid "" +"Internal error: DT has %d columns but 'by' is either not integer or is " +"length 0" +msgstr "" + +#: forder.c:452 +#, c-format +msgid "" +"Either order= is not integer or its length (%d) is different to by='s length " +"(%d)" +msgstr "" + +#: forder.c:458 +#, c-format +msgid "internal error: 'by' value %d out of range [1,%d]" +msgstr "" + +#: forder.c:460 +#, c-format +msgid "Column %d is length %d which differs from length of column 1 (%d)\n" +msgstr "" + +#: forder.c:464 +msgid "retGrp= must be TRUE or FALSE" +msgstr "" + +#: forder.c:467 +msgid "sort= must be TRUE or FALSE" +msgstr "" + +#: forder.c:470 +msgid "At least one of retGrp= or sort= must be TRUE" +msgstr "" + +#: forder.c:472 +msgid "na.last must be logical TRUE, FALSE or NA of length 1" +msgstr "" + +#: forder.c:514 +#, c-format +msgid "Item %d of order (ascending/descending) is %d. Must be +1 or -1." +msgstr "" + +#: forder.c:540 +#, c-format +msgid "" +"\n" +"*** Column %d passed to forder is a date stored as an 8 byte double but no " +"fractions are present. Please consider a 4 byte integer date such as IDate " +"to save space and time.\n" +msgstr "" + +#: forder.c:556 +#, c-format +msgid "Column %d passed to [f]order is type '%s', not yet supported." +msgstr "" + +#: forder.c:705 +msgid "Internal error: column not supported not caught earlier" +msgstr "" + +#: forder.c:713 +#, c-format +msgid "nradix=%d\n" +msgstr "" + +#: forder.c:719 +#, c-format +msgid "" +"Failed to allocate TMP or UGRP or they weren't cache line aligned: nth=%d" +msgstr "" + +#: forder.c:724 +msgid "Could not allocate (very tiny) group size thread buffers" +msgstr "" + +#: forder.c:785 +#, c-format +msgid "Timing block %2d%s = %8.3f %8d\n" +msgstr "" + +#: forder.c:788 +#, c-format +msgid "stat[%03d]==%10zd\n" +msgstr "" + +#: forder.c:1044 +#, c-format +msgid "Failed to allocate parallel counts. my_n=%d, nBatch=%d" +msgstr "" + +#: forder.c:1153 +#, c-format +msgid "Unable to allocate TMP for my_n=%d items in parallel batch counting" +msgstr "" + +#: forder.c:1260 +msgid "" +"is.sorted (R level) and fsorted (C level) only to be used on vectors. If " +"needed on a list/data.table, you'll need the order anyway if not sorted, so " +"use if (length(o<-forder(...))) for efficiency in one step, or equivalent at " +"C level" +msgstr "" + +#: forder.c:1292 +#, c-format +msgid "type '%s' is not yet supported" +msgstr "" + +#: forder.c:1301 +msgid "x must be either NULL or an integer vector" +msgstr "" + +#: forder.c:1303 +msgid "nrow must be integer vector length 1" +msgstr "" + +#: forder.c:1305 +#, c-format +msgid "nrow==%d but must be >=0" +msgstr "" + +#: forder.c:1322 +msgid "x must be type 'double'" +msgstr "" + +#: frank.c:11 +#, c-format +msgid "Internal error. Argument 'x' to Cdt_na is type '%s' not 'list'" +msgstr "" + +#: frank.c:12 +#, 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 +#, 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 +#, 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 +#, c-format +msgid "Unsupported column type '%s'" +msgstr "" + +#: frank.c:83 +msgid "" +"Internal error: invalid ties.method for frankv(), should have been caught " +"before. please report to data.table issue tracker" +msgstr "" + +#: frank.c:130 +#, c-format +msgid "Internal error: unknown ties value in frank: %d" +msgstr "" + +#: frank.c:141 +#, c-format +msgid "Internal error. Argument 'x' to CanyNA is type '%s' not 'list'" +msgstr "" + +#: frank.c:142 +#, c-format +msgid "Internal error. Argument 'cols' to CanyNA is type '%s' not 'integer'" +msgstr "" + +#: fread.c:106 +#, c-format +msgid "" +"Internal error in line %d of fread.c, please report on data.table GitHub: " +msgstr "" + +#: fread.c:149 +#, c-format +msgid "System error %d unmapping view of file\n" +msgstr "" + +#: fread.c:152 +#, c-format +msgid "System errno %d unmapping file: %s\n" +msgstr "" + +#: fread.c:212 +#, c-format +msgid "Internal error: NUMTYPE(%d) > nLetters(%d)" +msgstr "" + +#: fread.c:437 +#, c-format +msgid "Unable to allocate %s of contiguous virtual RAM. %s allocation." +msgstr "" + +#: fread.c:442 +#, c-format +msgid "Avoidable %.3f seconds. %s time to copy.\n" +msgstr "" + +#: fread.c:443 +#, c-format +msgid " File copy in RAM took %.3f seconds.\n" +msgstr "" + +#: fread.c:1095 +msgid "" +"Previous fread() session was not cleaned up properly. Cleaned up ok at the " +"beginning of this fread() call.\n" +msgstr "" + +#: fread.c:1098 +msgid "[01] Check arguments\n" +msgstr "" + +#: fread.c:1105 +#, c-format +msgid " Using %d threads (omp_get_max_threads()=%d, nth=%d)\n" +msgstr "" + +#: fread.c:1113 +msgid "" +"Internal error: NAstrings is itself NULL. When empty it should be pointer to " +"NULL." +msgstr "" + +#: fread.c:1131 +#, c-format +msgid "freadMain: NAstring <<%s>> has whitespace at the beginning or end" +msgstr "" + +#: fread.c:1136 +#, c-format +msgid "" +"freadMain: NAstring <<%s>> is recognized as type boolean, this is not " +"permitted." +msgstr "" + +#: fread.c:1146 +msgid " No NAstrings provided.\n" +msgstr "" + +#: fread.c:1148 +msgid " NAstrings = [" +msgstr "" + +#: fread.c:1151 +msgid "]\n" +msgstr "" + +#: fread.c:1153 +msgid " One or more of the NAstrings looks like a number.\n" +msgstr "" + +#: fread.c:1155 +msgid " None of the NAstrings look like numbers.\n" +msgstr "" + +#: fread.c:1157 +#, c-format +msgid " skip num lines = %llu\n" +msgstr "" + +#: fread.c:1158 +#, c-format +msgid " skip to string = <<%s>>\n" +msgstr "" + +#: fread.c:1159 +#, c-format +msgid " show progress = %d\n" +msgstr "" + +#: fread.c:1160 +#, c-format +msgid " 0/1 column will be read as %s\n" +msgstr "" + +#: fread.c:1168 +#, c-format +msgid "sep == quote ('%c') is not allowed" +msgstr "" + +#: fread.c:1169 +msgid "dec='' not allowed. Should be '.' or ','" +msgstr "" + +#: fread.c:1170 +#, c-format +msgid "sep == dec ('%c') is not allowed" +msgstr "" + +#: fread.c:1171 +#, c-format +msgid "quote == dec ('%c') is not allowed" +msgstr "" + +#: fread.c:1188 +msgid "[02] Opening the file\n" +msgstr "" + +#: fread.c:1191 +msgid "" +" `input` argument is provided rather than a file name, interpreting as raw " +"text to read\n" +msgstr "" + +#: fread.c:1195 +msgid "Internal error: last byte of character input isn't \\0" +msgstr "" + +#: fread.c:1198 +#, c-format +msgid " Opening file %s\n" +msgstr "" + +#: fread.c:1202 +#, c-format +msgid "file not found: %s" +msgstr "" + +#: fread.c:1206 +#, c-format +msgid "Opened file ok but couldn't obtain its size: %s" +msgstr "" + +#: fread.c:1209 fread.c:1237 +#, c-format +msgid "File is empty: %s" +msgstr "" + +#: fread.c:1210 fread.c:1238 +#, c-format +msgid " File opened, size = %s.\n" +msgstr "" + +#: fread.c:1227 +#, c-format +msgid "File not found: %s" +msgstr "" + +#: fread.c:1233 +#, c-format +msgid "Unable to open file after %d attempts (error %d): %s" +msgstr "" + +#: fread.c:1235 +#, c-format +msgid "GetFileSizeEx failed (returned 0) on file: %s" +msgstr "" + +#: fread.c:1240 +#, c-format +msgid "This is Windows, CreateFileMapping returned error %d for file %s" +msgstr "" + +#: fread.c:1247 +#, c-format +msgid "" +"Opened %s file ok but could not memory map it. This is a %dbit process. %s." +msgstr "" + +#: fread.c:1248 +msgid "Please upgrade to 64bit" +msgstr "" + +#: fread.c:1248 +msgid "There is probably not enough contiguous virtual memory available" +msgstr "" + +#: fread.c:1251 +msgid " Memory mapped ok\n" +msgstr "" + +#: fread.c:1253 +msgid "" +"Internal error: Neither `input` nor `filename` are given, nothing to read." +msgstr "" + +#: fread.c:1270 +msgid "[03] Detect and skip BOM\n" +msgstr "" + +#: fread.c:1274 +msgid "" +" UTF-8 byte order mark EF BB BF found at the start of the file and " +"skipped.\n" +msgstr "" + +#: fread.c:1279 +msgid "" +"GB-18030 encoding detected, however fread() is unable to decode it. Some " +"character fields may be garbled.\n" +msgstr "" + +#: fread.c:1282 +msgid "" +"File is encoded in UTF-16, this encoding is not supported by fread(). Please " +"recode the file to UTF-8." +msgstr "" + +#: fread.c:1287 +#, c-format +msgid " Last byte(s) of input found to be %s and removed.\n" +msgstr "" + +#: fread.c:1290 +msgid "Input is empty or only contains BOM or terminal control characters" +msgstr "" + +#: fread.c:1297 +msgid "[04] Arrange mmap to be \\0 terminated\n" +msgstr "" + +#: fread.c:1304 +msgid "" +" No \\n exists in the file at all, so single \\r (if any) will be taken as " +"one line ending. This is unusual but will happen normally when there is no " +"\\r either; e.g. a single line missing its end of line.\n" +msgstr "" + +#: fread.c:1305 +msgid "" +" \\n has been found in the input and different lines can end with different " +"line endings (e.g. mixed \\n and \\r\\n in one file). This is common and " +"ideal.\n" +msgstr "" + +#: fread.c:1329 +#, c-format +msgid "" +" File ends abruptly with '%c'. Final end-of-line is missing. Using cow page " +"to write 0 to the last byte.\n" +msgstr "" + +#: fread.c:1336 +#, c-format +msgid " File ends abruptly with '%c'. Copying file in RAM. %s copy.\n" +msgstr "" + +#: fread.c:1370 +msgid "[05] Skipping initial rows if needed\n" +msgstr "" + +#: fread.c:1376 +#, c-format +msgid "" +"skip='%s' not found in input (it is case sensitive and literal; i.e., no " +"patterns, wildcards or regex)" +msgstr "" + +#: fread.c:1382 +#, c-format +msgid "" +"Found skip='%s' on line %llu. Taking this to be header row or first row of " +"data.\n" +msgstr "" + +#: fread.c:1395 +#, c-format +msgid " Skipped to line %llu in the file" +msgstr "" + +#: fread.c:1396 +#, c-format +msgid "skip=%llu but the input only has %llu line%s" +msgstr "" + +#: fread.c:1405 +msgid "" +"Input is either empty, fully whitespace, or skip has been set after the last " +"non-whitespace." +msgstr "" + +#: fread.c:1407 +#, c-format +msgid " Moved forward to first non-blank line (%d)\n" +msgstr "" + +#: fread.c:1408 +#, c-format +msgid " Positioned on line %d starting: <<%s>>\n" +msgstr "" + +#: fread.c:1426 +msgid "[06] Detect separator, quoting rule, and ncolumns\n" +msgstr "" + +#: fread.c:1430 +msgid " sep='\\n' passed in meaning read lines as single character column\n" +msgstr "" + +#: fread.c:1449 +msgid " Detecting sep automatically ...\n" +msgstr "" + +#: fread.c:1456 +#, c-format +msgid " Using supplied sep '%s'\n" +msgstr "" + +#: fread.c:1490 +#, c-format +msgid " with %d fields using quote rule %d\n" +msgstr "" + +#: fread.c:1540 +#, c-format +msgid " with %d lines of %d fields using quote rule %d\n" +msgstr "" + +#: fread.c:1547 +msgid "" +" No sep and quote rule found a block of 2x2 or greater. Single column " +"input.\n" +msgstr "" + +#: fread.c:1563 +msgid "" +"Single column input contains invalid quotes. Self healing only effective " +"when ncol>1" +msgstr "" + +#: fread.c:1568 +#, c-format +msgid "" +"Found and resolved improper quoting in first %d rows. If the fields are not " +"quoted (e.g. field separator does not appear within any field), try quote=" +"\")\" to avoid this warning." +msgstr "" + +#: fread.c:1584 +#, c-format +msgid "" +"Internal error: ncol==%d line==%d after detecting sep, ncol and first line" +msgstr "" + +#: fread.c:1587 +#, c-format +msgid "Internal error: first line has field count %d but expecting %d" +msgstr "" + +#: fread.c:1589 +#, c-format +msgid "" +" Detected %d columns on line %d. This line is either column names or first " +"data row. Line starts as: <<%s>>\n" +msgstr "" + +#: fread.c:1591 +#, c-format +msgid " Quote rule picked = %d\n" +msgstr "" + +#: fread.c:1592 +#, c-format +msgid " fill=%s and the most number of columns found is %d\n" +msgstr "" + +#: fread.c:1598 +msgid "" +"This file is very unusual: it's one single column, ends with 2 or more end-" +"of-line (representing several NA at the end), and is a multiple of 4096, too." +msgstr "" + +#: fread.c:1599 +#, c-format +msgid " Copying file in RAM. %s\n" +msgstr "" + +#: fread.c:1605 +msgid "" +" 1-column file ends with 2 or more end-of-line. Restoring last eol using " +"extra byte in cow page.\n" +msgstr "" + +#: fread.c:1624 +msgid "" +"[07] Detect column types, good nrow estimate and whether first row is column " +"names\n" +msgstr "" + +#: fread.c:1625 +#, c-format +msgid " 'header' changed by user from 'auto' to %s\n" +msgstr "" + +#: fread.c:1629 +#, c-format +msgid "Failed to allocate 2 x %d bytes for type and tmpType: %s" +msgstr "" + +#: fread.c:1650 +#, c-format +msgid " Number of sampling jump points = %d because " +msgstr "" + +#: fread.c:1651 +#, c-format +msgid "nrow limit (%llu) supplied\n" +msgstr "" + +#: fread.c:1652 +msgid "jump0size==0\n" +msgstr "" + +#: fread.c:1653 +#, c-format +msgid "(%llu bytes from row 1 to eof) / (2 * %llu jump0size) == %llu\n" +msgstr "" + +#: fread.c:1691 +#, c-format +msgid "" +" A line with too-%s fields (%d/%d) was found on line %d of sample jump %d. " +"%s\n" +msgstr "" + +#: fread.c:1718 +#, c-format +msgid " Type codes (jump %03d) : %s Quote rule %d\n" +msgstr "" + +#: fread.c:1731 +#, c-format +msgid "" +" 'header' determined to be true due to column %d containing a string on row " +"1 and a lower type (%s) in the rest of the %d sample rows\n" +msgstr "" + +#: fread.c:1743 +msgid "" +"Internal error: row before first data row has the same number of fields but " +"we're not using it." +msgstr "" + +#: fread.c:1744 +msgid "" +"Internal error: ch!=pos after counting fields in the line before the first " +"data row." +msgstr "" + +#: fread.c:1745 +#, c-format +msgid "" +"Types in 1st data row match types in 2nd data row but previous row has %d " +"fields. Taking previous row as column names." +msgstr "" + +#: fread.c:1748 +#, c-format +msgid "" +"Detected %d column names but the data has %d columns (i.e. invalid file). " +"Added %d extra default column name%s\n" +msgstr "" + +#: fread.c:1751 +msgid "" +"Internal error: fill=true but there is a previous row which should already " +"have been filled." +msgstr "" + +#: fread.c:1752 +#, c-format +msgid "" +"Detected %d column names but the data has %d columns. Filling rows " +"automatically. Set fill=TRUE explicitly to avoid this warning.\n" +msgstr "" + +#: fread.c:1756 +#, c-format +msgid "Failed to realloc 2 x %d bytes for type and tmpType: %s" +msgstr "" + +#: fread.c:1776 +#, c-format +msgid "" +" 'header' determined to be %s because there are%s number fields in the " +"first and only row\n" +msgstr "" + +#: fread.c:1779 +msgid "" +" 'header' determined to be true because all columns are type string and a " +"better guess is not possible\n" +msgstr "" + +#: fread.c:1781 +msgid "" +" 'header' determined to be false because there are some number columns and " +"those columns do not have a string field at the top of them\n" +msgstr "" + +#: fread.c:1797 +#, c-format +msgid " Type codes (first row) : %s Quote rule %d\n" +msgstr "" + +#: fread.c:1806 +#, c-format +msgid "" +" All rows were sampled since file is small so we know nrow=%llu exactly\n" +msgstr "" + +#: fread.c:1818 fread.c:1825 +msgid " =====\n" +msgstr "" + +#: fread.c:1819 +#, c-format +msgid "" +" Sampled %llu rows (handled \\n inside quoted fields) at %d jump points\n" +msgstr "" + +#: fread.c:1820 +#, c-format +msgid " Bytes from first data row on line %d to the end of last row: %llu\n" +msgstr "" + +#: fread.c:1821 +#, c-format +msgid " Line length: mean=%.2f sd=%.2f min=%d max=%d\n" +msgstr "" + +#: fread.c:1822 +#, c-format +msgid " Estimated number of rows: %llu / %.2f = %llu\n" +msgstr "" + +#: fread.c:1823 +#, c-format +msgid "" +" Initial alloc = %llu rows (%llu + %d%%) using bytes/max(mean-2*sd,min) " +"clamped between [1.1*estn, 2.0*estn]\n" +msgstr "" + +#: fread.c:1827 +#, c-format +msgid "Internal error: sampleLines(%llu) > allocnrow(%llu)" +msgstr "" + +#: fread.c:1831 +#, c-format +msgid " Alloc limited to lower nrows=%llu passed in.\n" +msgstr "" + +#: fread.c:1843 +msgid "[08] Assign column names\n" +msgstr "" + +#: fread.c:1851 +#, c-format +msgid "Unable to allocate %d*%d bytes for column name pointers: %s" +msgstr "" + +#: fread.c:1873 +#, c-format +msgid "Internal error: reading colnames ending on '%c'" +msgstr "" + +#: fread.c:1891 +msgid "[09] Apply user overrides on column types\n" +msgstr "" + +#: fread.c:1895 +msgid " Cancelled by user: userOverride() returned false." +msgstr "" + +#: fread.c:1905 +#, c-format +msgid "Failed to allocate %d bytes for size array: %s" +msgstr "" + +#: fread.c:1912 +#, c-format +msgid "" +"Attempt to override column %d <<%.*s>> of inherent type '%s' down to '%s' " +"ignored. Only overrides to a higher type are currently supported. If this " +"was intended, please coerce to the lower type afterwards." +msgstr "" + +#: fread.c:1926 +#, c-format +msgid " After %d type and %d drop user overrides : %s\n" +msgstr "" + +#: fread.c:1934 +msgid "[10] Allocate memory for the datatable\n" +msgstr "" + +#: fread.c:1935 +#, c-format +msgid " Allocating %d column slots (%d - %d dropped) with %llu rows\n" +msgstr "" + +#: fread.c:1989 +#, c-format +msgid "Buffer size %lld is too large\n" +msgstr "" + +#: fread.c:1992 +msgid "[11] Read the data\n" +msgstr "" + +#: fread.c:1995 +#, c-format +msgid " jumps=[%d..%d), chunk_size=%llu, total_size=%llu\n" +msgstr "" + +#: fread.c:2215 +#, c-format +msgid "" +"Column %d (\"%.*s\") bumped from '%s' to '%s' due to <<%.*s>> on row %llu\n" +msgstr "" + +#: fread.c:2330 fread.c:2465 freadR.c:660 +#, c-format +msgid "%s" +msgstr "" + +#: fread.c:2337 +#, c-format +msgid "" +" Too few rows allocated. Allocating additional %llu rows (now nrows=%llu) " +"and continue reading from jump %d\n" +msgstr "" + +#: fread.c:2344 +#, c-format +msgid " Restarting team from jump %d. nSwept==%d quoteRule==%d\n" +msgstr "" + +#: fread.c:2364 +#, c-format +msgid " %d out-of-sample type bumps: %s\n" +msgstr "" + +#: fread.c:2400 +#, c-format +msgid "" +"Read %llu rows x %d columns from %s file in %02d:%06.3f wall clock time\n" +msgstr "" + +#: fread.c:2407 +msgid "[12] Finalizing the datatable\n" +msgstr "" + +#: fread.c:2408 +msgid " Type counts:\n" +msgstr "" + +#: fread.c:2410 +#, c-format +msgid "%10d : %-9s '%c'\n" +msgstr "" + +#: fread.c:2426 +#, c-format +msgid "Discarded single-line footer: <<%s>>" +msgstr "" + +#: fread.c:2431 +#, c-format +msgid "" +"Stopped early on line %llu. Expected %d fields but found %d. Consider " +"fill=TRUE and comment.char=. First discarded non-empty line: <<%s>>" +msgstr "" + +#: fread.c:2437 +#, c-format +msgid "" +"Found and resolved improper quoting out-of-sample. First healed line %llu: <<" +"%s>>. If the fields are not quoted (e.g. field separator does not appear " +"within any field), try quote=\")\" to avoid this warning." +msgstr "" + +#: fread.c:2441 +msgid "=============================\n" +msgstr "" + +#: fread.c:2443 +#, c-format +msgid "%8.3fs (%3.0f%%) Memory map %.3fGB file\n" +msgstr "" + +#: fread.c:2444 +#, c-format +msgid "%8.3fs (%3.0f%%) sep=" +msgstr "" + +#: fread.c:2446 +#, c-format +msgid " ncol=%d and header detection\n" +msgstr "" + +#: fread.c:2447 +#, c-format +msgid "%8.3fs (%3.0f%%) Column type detection using %llu sample rows\n" +msgstr "" + +#: fread.c:2449 +#, c-format +msgid "" +"%8.3fs (%3.0f%%) Allocation of %llu rows x %d cols (%.3fGB) of which %llu " +"(%3.0f%%) rows used\n" +msgstr "" + +#: fread.c:2453 +#, c-format +msgid "" +"%8.3fs (%3.0f%%) Reading %d chunks (%d swept) of %.3fMB (each chunk %d rows) " +"using %d threads\n" +msgstr "" + +#: fread.c:2455 +#, c-format +msgid "" +" + %8.3fs (%3.0f%%) Parse to row-major thread buffers (grown %d times)\n" +msgstr "" + +#: fread.c:2456 +#, c-format +msgid " + %8.3fs (%3.0f%%) Transpose\n" +msgstr "" + +#: fread.c:2457 +#, c-format +msgid " + %8.3fs (%3.0f%%) Waiting\n" +msgstr "" + +#: fread.c:2458 +#, c-format +msgid "" +"%8.3fs (%3.0f%%) Rereading %d columns due to out-of-sample type exceptions\n" +msgstr "" + +#: fread.c:2460 +#, c-format +msgid "%8.3fs Total\n" +msgstr "" + +#: freadR.c:84 +msgid "" +"Internal error: freadR input not a single character string: a filename or " +"the data itself. Should have been caught at R level." +msgstr "" + +#: freadR.c:92 +msgid "" +"Input contains a \\n or is \")\". Taking this to be text input (not a " +"filename)\n" +msgstr "" + +#: freadR.c:95 +msgid "Input contains no \\n. Taking this to be a filename to open\n" +msgstr "" + +#: freadR.c:101 +msgid "" +"Internal error: freadR sep not a single character. R level catches this." +msgstr "" + +#: freadR.c:105 +msgid "" +"Internal error: freadR dec not a single character. R level catches this." +msgstr "" + +#: freadR.c:112 +msgid "quote= must be a single character, blank \")\", or FALSE" +msgstr "" + +#: freadR.c:137 +msgid "Internal error: skip not integer or string in freadR.c" +msgstr "" + +#: freadR.c:140 +#, c-format +msgid "Internal error: NAstringsArg is type '%s'. R level catches this" +msgstr "" + +#: freadR.c:153 +#, c-format +msgid "nThread(%d)<1" +msgstr "" + +#: freadR.c:160 +msgid "'integer64' must be a single character string" +msgstr "" + +#: freadR.c:168 +#, c-format +msgid "" +"Invalid value integer64='%s'. Must be 'integer64', 'character', 'double' or " +"'numeric'" +msgstr "" + +#: freadR.c:176 +msgid "Use either select= or drop= but not both." +msgstr "" + +#: freadR.c:179 +msgid "" +"select= is type list for specifying types in select=, but colClasses= has " +"been provided as well. Please remove colClasses=." +msgstr "" + +#: freadR.c:181 +msgid "" +"select= is type list but has no names; expecting list(type1=cols1, " +"type2=cols2, ...)" +msgstr "" + +#: freadR.c:188 +msgid "" +"select= is a named vector specifying the columns to select and their types, " +"but colClasses= has been provided as well. Please remove colClasses=." +msgstr "" + +#: freadR.c:196 freadR.c:346 +msgid "colClasses is type list but has no names" +msgstr "" + +#: freadR.c:206 +#, c-format +msgid "encoding='%s' invalid. Must be 'unknown', 'Latin-1' or 'UTF-8'" +msgstr "" + +#: freadR.c:229 +#, c-format +msgid "Column name '%s' (%s) not found" +msgstr "" + +#: freadR.c:231 +#, c-format +msgid "%s is NA" +msgstr "" + +#: freadR.c:233 +#, c-format +msgid "%s is %d which is out of range [1,ncol=%d]" +msgstr "" + +#: freadR.c:247 +msgid "Internal error: typeSize[CT_BOOL8_N] != 1" +msgstr "" + +#: freadR.c:248 +msgid "Internal error: typeSize[CT_STRING] != 1" +msgstr "" + +#: freadR.c:282 +#, c-format +msgid "" +"Column name '%s' not found in column name header (case sensitive), skipping." +msgstr "" + +#: freadR.c:292 +#, c-format +msgid "" +"Column number %d (select[%d]) is negative but should be in the range [1,ncol=" +"%d]. Consider drop= for column exclusion." +msgstr "" + +#: freadR.c:293 +#, c-format +msgid "" +"select = 0 (select[%d]) has no meaning. All values of select should be in " +"the range [1,ncol=%d]." +msgstr "" + +#: freadR.c:294 +#, c-format +msgid "" +"Column number %d (select[%d]) is too large for this table, which only has %d " +"columns." +msgstr "" + +#: freadR.c:295 +#, c-format +msgid "Column number %d ('%s') has been selected twice by select=" +msgstr "" + +#: freadR.c:313 +msgid "" +"colClasses='NULL' is not permitted; i.e. to drop all columns and load nothing" +msgstr "" + +#: freadR.c:318 +#, c-format +msgid "" +"colClasses= is an unnamed vector of types, length %d, but there are %d " +"columns in the input. To specify types for a subset of columns, you can use " +msgstr "" + +#: freadR.c:319 +msgid "" +"a named vector, list format, or specify types using select= instead of " +"colClasses=. Please see examples in ?fread." +msgstr "" + +#: freadR.c:329 +msgid "Internal error: selectInts is NULL but selectColClasses is true" +msgstr "" + +#: freadR.c:330 +msgid "" +"Internal error: length(selectSxp)!=length(colClassesSxp) but " +"selectColClasses is true" +msgstr "" + +#: freadR.c:344 +#, c-format +msgid "colClasses is type '%s' but should be list or character" +msgstr "" + +#: freadR.c:368 +#, c-format +msgid "Column name '%s' (colClasses[[%d]][%d]) not found" +msgstr "" + +#: freadR.c:370 +#, c-format +msgid "colClasses[[%d]][%d] is NA" +msgstr "" + +#: freadR.c:374 +#, c-format +msgid "" +"Column %d ('%s') appears more than once in colClasses. The second time is " +"colClasses[[%d]][%d]." +msgstr "" + +#: freadR.c:381 +#, c-format +msgid "Column number %d (colClasses[[%d]][%d]) is out of range [1,ncol=%d]" +msgstr "" + +#: freadR.c:583 +#, c-format +msgid "Field size is 1 but the field is of type %d\n" +msgstr "" + +#: freadR.c:592 +#, c-format +msgid "Internal error: unexpected field of size %d\n" +msgstr "" + +#: froll.c:18 froll.c:227 froll.c:411 +#, c-format +msgid "%s: window width longer than input vector, returning all NA vector\n" +msgstr "" + +#: froll.c:36 froll.c:244 froll.c:460 +#, c-format +msgid "%s: align %d, shift answer by %d\n" +msgstr "" + +#: froll.c:43 froll.c:251 frolladaptive.c:23 frolladaptive.c:218 +#, c-format +msgid "%s: processing algo %u took %.3fs\n" +msgstr "" + +#: froll.c:52 froll.c:255 +#, c-format +msgid "%s: running for input length %llu, window %d, hasna %d, narm %d\n" +msgstr "" + +#: froll.c:72 froll.c:82 froll.c:173 froll.c:275 froll.c:285 froll.c:366 +#: frolladaptive.c:62 frolladaptive.c:151 frolladaptive.c:251 +#: frolladaptive.c:330 +#, c-format +msgid "" +"%s: hasNA=FALSE used but NA (or other non-finite) value(s) are present in " +"input, use default hasNA=NA to avoid this warning" +msgstr "" + +#: froll.c:75 froll.c:177 froll.c:278 froll.c:370 frolladaptive.c:65 +#: frolladaptive.c:155 frolladaptive.c:254 frolladaptive.c:334 +#, c-format +msgid "" +"%s: NA (or other non-finite) value(s) are present in input, re-running with " +"extra care for NAs\n" +msgstr "" + +#: froll.c:85 froll.c:288 +#, c-format +msgid "" +"%s: NA (or other non-finite) value(s) are present in input, skip non-NA " +"attempt and run with extra care for NAs\n" +msgstr "" + +#: froll.c:141 froll.c:339 +#, c-format +msgid "" +"%s: running in parallel for input length %llu, window %d, hasna %d, narm %d\n" +msgstr "" + +#: froll.c:179 froll.c:372 frolladaptive.c:157 frolladaptive.c:336 +#, c-format +msgid "" +"%s: NA (or other non-finite) value(s) are present in input, na.rm was FALSE " +"so in 'exact' implementation NAs were handled already, no need to re-run\n" +msgstr "" + +#: froll.c:428 +#, c-format +msgid "%s: results from provided FUN are not length 1" +msgstr "" + +#: froll.c:435 +#, c-format +msgid "" +"%s: results from provided FUN are not of type double, coercion from integer " +"or logical will be applied on each iteration\n" +msgstr "" + +#: froll.c:438 +#, c-format +msgid "%s: results from provided FUN are not of type double" +msgstr "" + +#: froll.c:467 +#, c-format +msgid "%s: took %.3fs\n" +msgstr "" + +#: frollR.c:15 +msgid "x must be of type numeric or logical" +msgstr "" + +#: frollR.c:26 +msgid "x must be list, data.frame or data.table of numeric or logical types" +msgstr "" + +#: frollR.c:47 frollR.c:264 +msgid "n must be non 0 length" +msgstr "" + +#: frollR.c:50 +msgid "adaptive must be TRUE or FALSE" +msgstr "" + +#: frollR.c:58 +msgid "n must be integer, list is accepted for adaptive TRUE" +msgstr "" + +#: frollR.c:65 frollR.c:256 frollR.c:259 +msgid "n must be integer" +msgstr "" + +#: frollR.c:72 +msgid "n must be positive integer values (> 0)" +msgstr "" + +#: frollR.c:81 frollR.c:93 +msgid "n must be integer vector or list of integer vectors" +msgstr "" + +#: frollR.c:104 gsumm.c:342 gsumm.c:577 gsumm.c:686 gsumm.c:805 gsumm.c:950 +#: gsumm.c:1261 gsumm.c:1402 uniqlist.c:350 +msgid "na.rm must be TRUE or FALSE" +msgstr "" + +#: frollR.c:107 +msgid "hasNA must be TRUE, FALSE or NA" +msgstr "" + +#: frollR.c:109 +msgid "" +"using hasNA FALSE and na.rm TRUE does not make sense, if you know there are " +"NA values use hasNA TRUE, otherwise leave it as default NA" +msgstr "" + +#: frollR.c:119 frollR.c:275 +msgid "" +"Internal error: invalid align argument in rolling function, should have been " +"caught before. please report to data.table issue tracker." +msgstr "" + +#: frollR.c:122 +msgid "" +"using adaptive TRUE and align argument different than 'right' is not " +"implemented" +msgstr "" + +#: frollR.c:126 frollR.c:297 types.c:64 +#, c-format +msgid "%s: allocating memory for results %dx%d\n" +msgstr "" + +#: frollR.c:135 +msgid "" +"adaptive rolling function can only process 'x' having equal length of " +"elements, like data.table or data.frame; If you want to call rolling " +"function on list having variable length of elements call it for each field " +"separately" +msgstr "" + +#: frollR.c:137 +msgid "" +"length of integer vector(s) provided as list to 'n' argument must be equal " +"to number of observations provided in 'x'" +msgstr "" + +#: frollR.c:151 +msgid "" +"Internal error: invalid fun argument in rolling function, should have been " +"caught before. please report to data.table issue tracker." +msgstr "" + +#: frollR.c:155 frollR.c:279 nafill.c:136 shift.c:21 +msgid "fill must be a vector of length 1" +msgstr "" + +#: frollR.c:169 frollR.c:292 +msgid "fill must be numeric" +msgstr "" + +#: frollR.c:185 +msgid "" +"Internal error: invalid algo argument in rolling function, should have been " +"caught before. please report to data.table issue tracker." +msgstr "" + +#: frollR.c:190 +#, c-format +msgid "Internal error: badaptive=%d but ik is not integer" +msgstr "" + +#: frollR.c:198 +#, c-format +msgid "" +"%s: %d column(s) and %d window(s), if product > 1 then entering parallel " +"execution\n" +msgstr "" + +#: frollR.c:200 +#, c-format +msgid "" +"%s: %d column(s) and %d window(s), not entering parallel execution here " +"because algo='exact' will compute results in parallel\n" +msgstr "" + +#: frollR.c:219 +#, c-format +msgid "Internal error: Unknown sfun value in froll: %d" +msgstr "" + +#: frollR.c:227 frollR.c:328 +#, c-format +msgid "%s: processing of %d column(s) and %d window(s) took %.3fs\n" +msgstr "" + +#: frollR.c:238 +msgid "internal error: 'fun' must be a function" +msgstr "" + +#: frollR.c:240 +msgid "internal error: 'rho' should be an environment" +msgstr "" + +#: frolladaptive.c:33 frolladaptive.c:222 +#, c-format +msgid "%s: running for input length %llu, hasna %d, narm %d\n" +msgstr "" + +#: frolladaptive.c:39 frolladaptive.c:228 +#, c-format +msgid "%s: Unable to allocate memory for cumsum" +msgstr "" + +#: frolladaptive.c:75 frolladaptive.c:264 +#, c-format +msgid "%s: Unable to allocate memory for cum NA counter" +msgstr "" + +#: frolladaptive.c:118 frolladaptive.c:302 +#, c-format +msgid "%s: running in parallel for input length %llu, hasna %d, narm %d\n" +msgstr "" + +#: fsort.c:111 +msgid "x must be a vector of type 'double' currently" +msgstr "" + +#: fsort.c:122 +#, c-format +msgid "nth=%d, nBatch=%d\n" +msgstr "" + +#: fsort.c:156 +#, c-format +msgid "Range = [%g,%g]\n" +msgstr "" + +#: fsort.c:157 +msgid "Cannot yet handle negatives." +msgstr "" + +#: fsort.c:170 +#, c-format +msgid "maxBit=%d; MSBNbits=%d; shift=%d; MSBsize=%d\n" +msgstr "" + +#: fsort.c:173 +msgid "Unable to allocate working memory" +msgstr "" + +#: fsort.c:177 +#, c-format +msgid "" +"counts is %dMB (%d pages per nBatch=%d, batchSize=%lld, lastBatchSize=%lld)\n" +msgstr "" + +#: fsort.c:230 +msgid "Internal error: counts[nBatch-1][MSBsize-1] != length(x)" +msgstr "" + +#: fsort.c:246 +msgid "Top 5 MSB counts: " +msgstr "" + +#: fsort.c:246 +#, c-format +msgid "%lld " +msgstr "" + +#: fsort.c:246 fwrite.c:692 fwrite.c:779 fwrite.c:890 fwrite.c:934 +msgid "\n" +msgstr "" + +#: fsort.c:247 +#, c-format +msgid "Reduced MSBsize from %d to " +msgstr "" + +#: fsort.c:251 +#, c-format +msgid "%d by excluding 0 and 1 counts\n" +msgstr "" + +#: fsort.c:308 +#, c-format +msgid "%d: %.3f (%4.1f%%)\n" +msgstr "" + +#: fwrite.c:603 +#, c-format +msgid "buffMB=%d outside [1,1024]" +msgstr "" + +#: fwrite.c:610 +#, c-format +msgid "" +"eol must be 1 or more bytes (usually either \\n or \\r\\n) but is length %d" +msgstr "" + +#: fwrite.c:613 +msgid "Column writers: " +msgstr "" + +#: fwrite.c:615 fwrite.c:617 fwrite.c:619 +#, c-format +msgid "%d " +msgstr "" + +#: fwrite.c:618 +msgid "... " +msgstr "" + +#: fwrite.c:621 +#, c-format +msgid "" +"\n" +"args.doRowNames=%d args.rowNames=%d doQuote=%d args.nrow=%d args.ncol=%d " +"eolLen=%d\n" +msgstr "" + +#: fwrite.c:654 +#, c-format +msgid "Internal error: type %d has no max length method implemented" +msgstr "" + +#: fwrite.c:661 +#, c-format +msgid "maxLineLen=%zd. Found in %.3fs\n" +msgstr "" + +#: fwrite.c:681 +#, c-format +msgid "" +"%s: '%s'. Failed to open existing file for writing. Do you have write " +"permission to it? Is this Windows and does another process such as Excel " +"have it open?" +msgstr "" + +#: fwrite.c:682 +#, c-format +msgid "" +"%s: '%s'. Unable to create new file for writing (it does not exist already). " +"Do you have permission to write here, is there space on the disk and does " +"the path exist?" +msgstr "" + +#: fwrite.c:690 +#, c-format +msgid "Writing bom (%s), yaml (%d characters) and column names (%s) ... " +msgstr "" + +#: fwrite.c:703 +#, c-format +msgid "Unable to allocate %d MiB for header: %s" +msgstr "" + +#: fwrite.c:731 fwrite.c:793 +msgid "Can't allocate gzip stream structure" +msgstr "" + +#: fwrite.c:737 +#, c-format +msgid "Unable to allocate %d MiB for zbuffer: %s" +msgstr "" + +#: fwrite.c:752 +#, c-format +msgid "Compress gzip error: %d" +msgstr "" + +#: fwrite.c:753 fwrite.c:761 fwrite.c:940 fwrite.c:949 +#, c-format +msgid "%s: '%s'" +msgstr "" + +#: fwrite.c:758 +#, c-format +msgid "done in %.3fs\n" +msgstr "" + +#: fwrite.c:760 +msgid "No data rows present (nrow==0)\n" +msgstr "" + +#: fwrite.c:777 +#, c-format +msgid "" +"Writing %d rows in %d batches of %d rows (each buffer size %dMB, " +"showProgress=%d, nth=%d) ... " +msgstr "" + +#: fwrite.c:946 +#, c-format +msgid "" +"Error %d: one or more threads failed to allocate buffers or there was a " +"compression error." +msgstr "" + +#: fwrite.c:947 +msgid "" +" Please try again with verbose=TRUE and try searching online for this error " +"message.\n" +msgstr "" + +#: fwriteR.c:41 +msgid "Internal error: col passed to getMaxCategLen is missing levels" +msgstr "" + +#: fwriteR.c:75 +msgid "Internal error: getMaxListItemLen should have caught this up front." +msgstr "" + +#: fwriteR.c:98 +#, c-format +msgid "" +"Row %d of list column is type '%s' - not yet implemented. fwrite() can write " +"list columns containing items which are atomic vectors of type logical, " +"integer, integer64, double, complex and character." +msgstr "" + +#: fwriteR.c:103 +#, c-format +msgid "" +"Internal error: row %d of list column has no max length method implemented" +msgstr "" + +#: fwriteR.c:170 +msgid "" +"fwrite must be passed an object of type list; e.g. data.frame, data.table" +msgstr "" + +#: fwriteR.c:179 +msgid "fwrite was passed an empty list of no columns. Nothing to write." +msgstr "" + +#: fwriteR.c:234 +#, c-format +msgid "Column %d's length (%d) is not the same as column 1's length (%d)" +msgstr "" + +#: fwriteR.c:237 +#, c-format +msgid "Column %d's type is '%s' - not yet implemented in fwrite." +msgstr "" + +#: fwriteR.c:262 +msgid "" +"No list columns are present. Setting sep2='' otherwise quote='auto' would " +"quote fields containing sep2.\n" +msgstr "" + +#: fwriteR.c:266 +#, 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 +#, c-format +msgid "" +"sep ('%c'), sep2 ('%c') and dec ('%c') must all be different. Column %d is a " +"list column." +msgstr "" + +#: gsumm.c:43 +msgid "env is not an environment" +msgstr "" + +#: gsumm.c:45 +msgid "o is not an integer vector" +msgstr "" + +#: gsumm.c:46 +msgid "f is not an integer vector" +msgstr "" + +#: gsumm.c:47 +msgid "l is not an integer vector" +msgstr "" + +#: gsumm.c:56 +msgid "irowsArg is neither an integer vector nor NULL" +msgstr "" + +#: gsumm.c:58 +#, c-format +msgid "length(f)=%d != length(l)=%d" +msgstr "" + +#: gsumm.c:66 +#, c-format +msgid "o has length %d but sum(l)=%d" +msgstr "" + +#: gsumm.c:69 +msgid "Internal error: o's maxgrpn attribute mismatches recalculated maxgrpn" +msgstr "" + +#: gsumm.c:89 +#, c-format +msgid "" +"Internal error: nrow=%d ngrp=%d nbit=%d shift=%d highSize=%d nBatch=%d " +"batchSize=%d lastBatchSize=%d\n" +msgstr "" + +#: gsumm.c:98 +#, c-format +msgid "gforce initial population of grp took %.3f\n" +msgstr "" + +#: gsumm.c:116 +msgid "" +"Internal error: Failed to allocate counts or TMP when assigning g in gforce" +msgstr "" + +#: gsumm.c:194 +#, c-format +msgid "gforce assign high and low took %.3f\n" +msgstr "" + +#: gsumm.c:200 +#, c-format +msgid "gforce eval took %.3f\n" +msgstr "" + +#: gsumm.c:216 +msgid "gather took ... " +msgstr "" + +#: gsumm.c:334 +#, c-format +msgid "gather implemented for INTSXP, REALSXP, and CPLXSXP but not '%s'" +msgstr "" + +#: gsumm.c:336 gsumm.c:568 +#, c-format +msgid "%.3fs\n" +msgstr "" + +#: gsumm.c:345 +msgid "sum is not meaningful for factors." +msgstr "" + +#: gsumm.c:349 +#, c-format +msgid "This gsum took (narm=%s) ... " +msgstr "" + +#: gsumm.c:350 gsumm.c:606 +#, c-format +msgid "nrow [%d] != length(x) [%d] in gsum" +msgstr "" + +#: gsumm.c:404 +msgid "" +"The sum of an integer column for a group was more than type 'integer' can " +"hold so the result has been coerced to 'numeric' automatically for " +"convenience." +msgstr "" + +#: gsumm.c:565 +#, c-format +msgid "" +"Type '%s' not supported by GForce sum (gsum). Either add the prefix base::" +"sum(.) or turn off GForce optimization using options(datatable.optimize=1)" +msgstr "" + +#: gsumm.c:578 +msgid "" +"GForce mean can only be applied to columns, not .SD or similar. Likely " +"you're looking for 'DT[,lapply(.SD,mean),by=,.SDcols=]'. See ?data.table." +msgstr "" + +#: gsumm.c:579 +msgid "mean is not meaningful for factors." +msgstr "" + +#: gsumm.c:599 +#, c-format +msgid "Internal error: gsum returned type '%s'. typeof(x) is '%s'" +msgstr "" + +#: gsumm.c:609 +#, c-format +msgid "Unable to allocate %d * %d bytes for sum in gmean na.rm=TRUE" +msgstr "" + +#: gsumm.c:612 +#, c-format +msgid "Unable to allocate %d * %d bytes for counts in gmean na.rm=TRUE" +msgstr "" + +#: gsumm.c:638 +#, c-format +msgid "Unable to allocate %d * %d bytes for si in gmean na.rm=TRUE" +msgstr "" + +#: gsumm.c:650 +#, c-format +msgid "" +"Type '%s' not supported by GForce mean (gmean) na.rm=TRUE. Either add the " +"prefix base::mean(.) or turn off GForce optimization using options(datatable." +"optimize=1)" +msgstr "" + +#: gsumm.c:674 +msgid "Internal error: unsupported type at the end of gmean" +msgstr "" + +#: gsumm.c:687 +msgid "" +"GForce min can only be applied to columns, not .SD or similar. To find min " +"of all items in a list such as .SD, either add the prefix base::min(.SD) or " +"turn off GForce optimization using options(datatable.optimize=1). More " +"likely, you may be looking for 'DT[,lapply(.SD,min),by=,.SDcols=]'" +msgstr "" + +#: gsumm.c:688 +msgid "min is not meaningful for factors." +msgstr "" + +#: gsumm.c:693 +#, c-format +msgid "nrow [%d] != length(x) [%d] in gmin" +msgstr "" + +#: gsumm.c:717 gsumm.c:850 +msgid "" +"No non-missing values found in at least one group. Coercing to numeric type " +"and returning 'Inf' for such groups to be consistent with base" +msgstr "" + +#: gsumm.c:756 gsumm.c:891 +msgid "" +"No non-missing values found in at least one group. Returning 'NA' for such " +"groups to be consistent with base" +msgstr "" + +#: gsumm.c:783 +msgid "" +"No non-missing values found in at least one group. Returning 'Inf' for such " +"groups to be consistent with base" +msgstr "" + +#: gsumm.c:791 +msgid "Type 'complex' has no well-defined min" +msgstr "" + +#: gsumm.c:794 +#, c-format +msgid "" +"Type '%s' not supported by GForce min (gmin). Either add the prefix base::" +"min(.) or turn off GForce optimization using options(datatable.optimize=1)" +msgstr "" + +#: gsumm.c:806 +msgid "" +"GForce max can only be applied to columns, not .SD or similar. To find max " +"of all items in a list such as .SD, either add the prefix base::max(.SD) or " +"turn off GForce optimization using options(datatable.optimize=1). More " +"likely, you may be looking for 'DT[,lapply(.SD,max),by=,.SDcols=]'" +msgstr "" + +#: gsumm.c:807 +msgid "max is not meaningful for factors." +msgstr "" + +#: gsumm.c:812 +#, c-format +msgid "nrow [%d] != length(x) [%d] in gmax" +msgstr "" + +#: gsumm.c:930 +msgid "" +"No non-missing values found in at least one group. Returning '-Inf' for such " +"groups to be consistent with base" +msgstr "" + +#: gsumm.c:937 +msgid "Type 'complex' has no well-defined max" +msgstr "" + +#: gsumm.c:940 +#, c-format +msgid "" +"Type '%s' not supported by GForce max (gmax). Either add the prefix base::" +"max(.) or turn off GForce optimization using options(datatable.optimize=1)" +msgstr "" + +#: gsumm.c:951 +msgid "" +"GForce median can only be applied to columns, not .SD or similar. To find " +"median of all items in a list such as .SD, either add the prefix stats::" +"median(.SD) or turn off GForce optimization using options(datatable." +"optimize=1). More likely, you may be looking for 'DT[,lapply(.SD,median)," +"by=,.SDcols=]'" +msgstr "" + +#: gsumm.c:952 +msgid "median is not meaningful for factors." +msgstr "" + +#: gsumm.c:955 +#, c-format +msgid "nrow [%d] != length(x) [%d] in gmedian" +msgstr "" + +#: gsumm.c:992 +#, c-format +msgid "" +"Type '%s' not supported by GForce median (gmedian). Either add the prefix " +"stats::median(.) or turn off GForce optimization using options(datatable." +"optimize=1)" +msgstr "" + +#: gsumm.c:1005 +#, c-format +msgid "nrow [%d] != length(x) [%d] in gtail" +msgstr "" + +#: gsumm.c:1073 +#, c-format +msgid "" +"Type '%s' not supported by GForce tail (gtail). Either add the prefix utils::" +"tail(.) or turn off GForce optimization using options(datatable.optimize=1)" +msgstr "" + +#: gsumm.c:1085 gsumm.c:1176 +#, c-format +msgid "nrow [%d] != length(x) [%d] in ghead" +msgstr "" + +#: gsumm.c:1153 +#, c-format +msgid "" +"Type '%s' not supported by GForce head (ghead). Either add the prefix utils::" +"head(.) or turn off GForce optimization using options(datatable.optimize=1)" +msgstr "" + +#: gsumm.c:1161 +msgid "" +"Internal error, gtail is only implemented for n=1. This should have been " +"caught before. please report to data.table issue tracker." +msgstr "" + +#: 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 "" + +#: 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 "" + +#: gsumm.c:1250 +#, c-format +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 "" + +#: gsumm.c:1262 +msgid "" +"GForce var/sd can only be applied to columns, not .SD or similar. For the " +"full covariance matrix of all items in a list such as .SD, either add the " +"prefix stats::var(.SD) (or stats::sd(.SD)) or turn off GForce optimization " +"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 "" + +#: gsumm.c:1263 +msgid "var/sd is not meaningful for factors." +msgstr "" + +#: gsumm.c:1266 +#, c-format +msgid "nrow [%d] != length(x) [%d] in gvar" +msgstr "" + +#: gsumm.c:1382 +#, c-format +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 "" + +#: gsumm.c:1384 +#, c-format +msgid "" +"Type '%s' not supported by GForce sd (gsd). Either add the prefix stats::" +"sd(.) or turn off GForce optimization using options(datatable.optimize=1)" +msgstr "" + +#: gsumm.c:1403 +msgid "" +"GForce prod can only be applied to columns, not .SD or similar. To multiply " +"all items in a list such as .SD, either add the prefix base::prod(.SD) or " +"turn off GForce optimization using options(datatable.optimize=1). More " +"likely, you may be looking for 'DT[,lapply(.SD,prod),by=,.SDcols=]'" +msgstr "" + +#: gsumm.c:1404 +msgid "prod is not meaningful for factors." +msgstr "" + +#: gsumm.c:1409 +#, c-format +msgid "nrow [%d] != length(x) [%d] in gprod" +msgstr "" + +#: gsumm.c:1411 +#, c-format +msgid "Unable to allocate %d * %d bytes for gprod" +msgstr "" + +#: gsumm.c:1446 +#, c-format +msgid "" +"Type '%s' not supported by GForce prod (gprod). Either add the prefix base::" +"prod(.) or turn off GForce optimization using options(datatable.optimize=1)" +msgstr "" + +#: ijoin.c:22 ijoin.c:243 +msgid "" +"Internal error: invalid value for 'mult'; this should have been caught " +"before. please report to data.table issue tracker" +msgstr "" + +#: ijoin.c:29 ijoin.c:250 +msgid "" +"Internal error: invalid value for 'type'; this should have been caught " +"before. please report to data.table issue tracker" +msgstr "" + +#: ijoin.c:56 ijoin.c:121 +#, c-format +msgid "Internal error: unknown type in mult=%d in lookup: %d" +msgstr "" + +#: ijoin.c:124 ijoin.c:215 +#, c-format +msgid "Internal error: unknown mult in lookup: %d" +msgstr "" + +#: ijoin.c:128 +#, c-format +msgid "First pass on calculating lengths in lookup ... done in %8.3f seconds\n" +msgstr "" + +#: ijoin.c:141 +#, c-format +msgid "Second pass on allocation in lookup ... done in %8.3f seconds\n" +msgstr "" + +#: ijoin.c:160 +#, c-format +msgid "Internal error: unknown type lookup should have been caught earlier: %d" +msgstr "" + +#: ijoin.c:212 +#, c-format +msgid "" +"Internal error: unknown type in mult=%d in lookup should have been caught " +"earlier: %d" +msgstr "" + +#: ijoin.c:220 +#, c-format +msgid "Final step in generating lookup ... done in %8.3f seconds\n" +msgstr "" + +#: ijoin.c:323 +#, c-format +msgid "Internal error: unknown type in mult=ALL in overlaps: %d" +msgstr "" + +#: ijoin.c:328 +#, c-format +msgid "" +"First pass on calculating lengths in overlaps ... done in %8.3f seconds\n" +msgstr "" + +#: ijoin.c:464 ijoin.c:571 ijoin.c:720 +#, c-format +msgid "Internal error: unknown type in mult=%d in overlaps: %d" +msgstr "" + +#: ijoin.c:723 +#, c-format +msgid "Internal error: unknown mult in overlaps: %d" +msgstr "" + +#: ijoin.c:727 +#, c-format +msgid "Final step, fetching indices in overlaps ... done in %8.3f seconds\n" +msgstr "" + +#: init.c:198 +#, c-format +msgid "" +"Pointers are %d bytes, greater than 8. We have not tested on any " +"architecture greater than 64bit yet." +msgstr "" + +#: init.c:209 +#, c-format +msgid "Checking NA_INTEGER [%d] == INT_MIN [%d] %s" +msgstr "" + +#: init.c:210 +#, c-format +msgid "Checking NA_INTEGER [%d] == NA_LOGICAL [%d] %s" +msgstr "" + +#: init.c:211 +#, c-format +msgid "Checking sizeof(int) [%d] is 4 %s" +msgstr "" + +#: init.c:212 +#, c-format +msgid "Checking sizeof(double) [%d] is 8 %s" +msgstr "" + +#: init.c:214 +#, c-format +msgid "Checking sizeof(long long) [%d] is 8 %s" +msgstr "" + +#: init.c:215 +#, c-format +msgid "Checking sizeof(pointer) [%d] is 4 or 8 %s" +msgstr "" + +#: init.c:216 +#, c-format +msgid "Checking sizeof(SEXP) [%d] == sizeof(pointer) [%d] %s" +msgstr "" + +#: init.c:217 +#, c-format +msgid "Checking sizeof(uint64_t) [%d] is 8 %s" +msgstr "" + +#: init.c:218 +#, c-format +msgid "Checking sizeof(int64_t) [%d] is 8 %s" +msgstr "" + +#: init.c:219 +#, c-format +msgid "Checking sizeof(signed char) [%d] is 1 %s" +msgstr "" + +#: init.c:220 +#, c-format +msgid "Checking sizeof(int8_t) [%d] is 1 %s" +msgstr "" + +#: init.c:221 +#, c-format +msgid "Checking sizeof(uint8_t) [%d] is 1 %s" +msgstr "" + +#: init.c:222 +#, c-format +msgid "Checking sizeof(int16_t) [%d] is 2 %s" +msgstr "" + +#: init.c:223 +#, c-format +msgid "Checking sizeof(uint16_t) [%d] is 2 %s" +msgstr "" + +#: init.c:226 +#, c-format +msgid "Checking LENGTH(allocVector(INTSXP,2)) [%d] is 2 %s" +msgstr "" + +#: init.c:227 +#, c-format +msgid "Checking TRUELENGTH(allocVector(INTSXP,2)) [%d] is 0 %s" +msgstr "" + +#: init.c:234 +#, c-format +msgid "Checking memset(&i,0,sizeof(int)); i == (int)0 %s" +msgstr "" + +#: init.c:237 +#, c-format +msgid "Checking memset(&ui, 0, sizeof(unsigned int)); ui == (unsigned int)0 %s" +msgstr "" + +#: init.c:240 +#, c-format +msgid "Checking memset(&d, 0, sizeof(double)); d == (double)0.0 %s" +msgstr "" + +#: init.c:243 +#, c-format +msgid "Checking memset(&ld, 0, sizeof(long double)); ld == (long double)0.0 %s" +msgstr "" + +#: init.c:246 +msgid "The ascii character '/' is not just before '0'" +msgstr "" + +#: init.c:247 +msgid "The C expression (uint_fast8_t)('/'-'0')<10 is true. Should be false." +msgstr "" + +#: init.c:248 +msgid "The ascii character ':' is not just after '9'" +msgstr "" + +#: init.c:249 +msgid "The C expression (uint_fast8_t)('9'-':')<10 is true. Should be false." +msgstr "" + +#: init.c:254 +#, c-format +msgid "Conversion of NA_INT64 via double failed %lld!=%lld" +msgstr "" + +#: init.c:258 +msgid "NA_INT64_D (negative -0.0) is not == 0.0." +msgstr "" + +#: init.c:259 +msgid "NA_INT64_D (negative -0.0) is not ==-0.0." +msgstr "" + +#: init.c:260 +msgid "ISNAN(NA_INT64_D) is TRUE but should not be" +msgstr "" + +#: init.c:261 +msgid "isnan(NA_INT64_D) is TRUE but should not be" +msgstr "" + +#: init.c:290 +#, c-format +msgid "PRINTNAME(install(\")integer64\")) has returned %s not %s" +msgstr "" + +#: init.c:359 +msgid ".Last.value in namespace is not a length 1 integer" +msgstr "" + +#: nafill.c:83 +msgid "" +"'x' argument is atomic vector, in-place update is supported only for list/" +"data.table" +msgstr "" + +#: nafill.c:85 nafill.c:95 +msgid "'x' argument must be numeric type, or list/data.table of numeric types" +msgstr "" + +#: nafill.c:133 nafill.c:161 +msgid "" +"Internal error: invalid type argument in nafillR function, should have been " +"caught before. Please report to data.table issue tracker." +msgstr "" + +#: nafill.c:177 +#, c-format +msgid "%s: parallel processing of %d column(s) took %.3fs\n" +msgstr "" + +#: openmp-utils.c:22 +#, c-format +msgid "" +"Ignoring invalid %s==\")%s\". Not an integer >= 1. Please remove any " +"characters that are not a digit [0-9]. See ?data.table::setDTthreads." +msgstr "" + +#: openmp-utils.c:40 +#, c-format +msgid "" +"Ignoring invalid R_DATATABLE_NUM_PROCS_PERCENT==%d. If used it must be an " +"integer between 2 and 100. Default is 50. See ?setDTtheads." +msgstr "" + +#: openmp-utils.c:67 +msgid "'verbose' must be TRUE or FALSE" +msgstr "" + +#: openmp-utils.c:70 +msgid "" +"This installation of data.table has not been compiled with OpenMP support.\n" +msgstr "" + +#: openmp-utils.c:75 +#, c-format +msgid " omp_get_num_procs() %d\n" +msgstr "" + +#: openmp-utils.c:76 +#, c-format +msgid " R_DATATABLE_NUM_PROCS_PERCENT %s\n" +msgstr "" + +#: openmp-utils.c:77 +#, c-format +msgid " R_DATATABLE_NUM_THREADS %s\n" +msgstr "" + +#: openmp-utils.c:78 +#, c-format +msgid " omp_get_thread_limit() %d\n" +msgstr "" + +#: openmp-utils.c:79 +#, c-format +msgid " omp_get_max_threads() %d\n" +msgstr "" + +#: openmp-utils.c:80 +#, c-format +msgid " OMP_THREAD_LIMIT %s\n" +msgstr "" + +#: openmp-utils.c:81 +#, c-format +msgid " OMP_NUM_THREADS %s\n" +msgstr "" + +#: openmp-utils.c:82 +#, c-format +msgid " RestoreAfterFork %s\n" +msgstr "" + +#: openmp-utils.c:83 +#, c-format +msgid " data.table is using %d threads. See ?setDTthreads.\n" +msgstr "" + +#: openmp-utils.c:91 +msgid "" +"restore_after_fork= must be TRUE, FALSE, or NULL (default). " +"getDTthreads(verbose=TRUE) reports the current setting.\n" +msgstr "" + +#: openmp-utils.c:105 +#, c-format +msgid "" +"threads= must be either NULL (default) or a single number. It has length %d" +msgstr "" + +#: openmp-utils.c:107 +msgid "threads= must be either NULL (default) or type integer/numeric" +msgstr "" + +#: openmp-utils.c:109 +msgid "" +"threads= must be either NULL or a single integer >= 0. See ?setDTthreads." +msgstr "" + +#: openmp-utils.c:114 +msgid "Internal error: percent= must be TRUE or FALSE at C level" +msgstr "" + +#: openmp-utils.c:117 +#, c-format +msgid "" +"Internal error: threads==%d should be between 2 and 100 (percent=TRUE at C " +"level)." +msgstr "" + +#: rbindlist.c:8 +msgid "fill= should be TRUE or FALSE" +msgstr "" + +#: rbindlist.c:10 +msgid "use.names= should be TRUE, FALSE, or not used (\")check\" by default)" +msgstr "" + +#: rbindlist.c:12 +msgid "" +"Input to rbindlist must be a list. This list can contain data.tables, data." +"frames or plain lists." +msgstr "" + +#: rbindlist.c:16 +msgid "use.names= cannot be FALSE when fill is TRUE. Setting use.names=TRUE." +msgstr "" + +#: rbindlist.c:20 +msgid "Internal error: rbindlist.c idcol is not a single string" +msgstr "" + +#: rbindlist.c:31 +#, c-format +msgid "Item %d of input is not a data.frame, data.table or list" +msgstr "" + +#: rbindlist.c:39 +#, c-format +msgid "" +"Item %d has %d columns, inconsistent with item %d which has %d columns. To " +"fill missing columns use fill=TRUE." +msgstr "" + +#: rbindlist.c:42 +#, c-format +msgid "Item %d has %d columns but %d column names. Invalid object." +msgstr "" + +#: rbindlist.c:49 +#, c-format +msgid "" +"Column %d of item %d is length %d inconsistent with column %d which is " +"length %d. Only length-1 columns are recycled." +msgstr "" + +#: rbindlist.c:58 +#, c-format +msgid "" +"Column %d ['%s'] of item %d is length 0. This (and %d other%s like it) has " +"been filled with NA (NULL for list columns) to make each item uniform." +msgstr "" + +#: rbindlist.c:62 +#, c-format +msgid "" +"Total rows in the list is %lld which is larger than the maximum number of " +"rows, currently %d" +msgstr "" + +#: rbindlist.c:63 +msgid "use.names=TRUE but no item of input list has any names" +msgstr "" + +#: rbindlist.c:71 +#, c-format +msgid "" +"Failed to allocate upper bound of %lld unique column names [sum(lapply(l," +"ncol))]" +msgstr "" + +#: rbindlist.c:102 +#, c-format +msgid "Failed to allocate nuniq=%d items working memory in rbindlist.c" +msgstr "" + +#: rbindlist.c:136 +#, c-format +msgid "Failed to allocate ncol=%d items working memory in rbindlist.c" +msgstr "" + +#: rbindlist.c:191 +msgid "" +"Internal error: usenames==NA but fill=TRUE. usenames should have been set to " +"TRUE earlier with warning." +msgstr "" + +#: rbindlist.c:196 +msgid "" +" use.names='check' (default from v1.12.2) emits this message and proceeds as " +"if use.names=FALSE for backwards compatibility. See news item 5 in v1.12.2 " +"for options to control this message." +msgstr "" + +#: rbindlist.c:206 +msgid "" +"Internal error: could not find the first column name not present in earlier " +"item" +msgstr "" + +#: rbindlist.c:210 +#, c-format +msgid "" +"Column %d ['%s'] of item %d is missing in item %d. Use fill=TRUE to fill " +"with NA (NULL for list columns), or use.names=FALSE to ignore column names.%s" +msgstr "" + +#: rbindlist.c:218 +#, c-format +msgid "" +"Internal error: usenames==NA but an out-of-order name has been found in an " +"item with no names or the first item. [%d]" +msgstr "" + +#: rbindlist.c:219 +#, c-format +msgid "" +"Column %d ['%s'] of item %d appears in position %d in item %d. Set use." +"names=TRUE to match by column name, or use.names=FALSE to ignore column " +"names.%s" +msgstr "" + +#: rbindlist.c:228 +msgid "" +"options()$datatable.rbindlist.check is set but is not a single string. See " +"news item 5 in v1.12.2." +msgstr "" + +#: rbindlist.c:235 +#, c-format +msgid "" +"options()$datatable.rbindlist.check=='%s' which is not " +"'message'|'warning'|'error'|'none'. See news item 5 in v1.12.2." +msgstr "" + +#: rbindlist.c:297 +#, c-format +msgid "" +"Column %d of item %d has type 'factor' but has no levels; i.e. malformed." +msgstr "" + +#: rbindlist.c:315 +#, c-format +msgid "" +"Class attribute on column %d of item %d does not match with column %d of " +"item %d." +msgstr "" + +#: rbindlist.c:325 +#, c-format +msgid "" +"Internal error: column %d of result is determined to be integer64 but " +"maxType=='%s' != REALSXP" +msgstr "" + +#: rbindlist.c:361 +#, c-format +msgid "" +"Failed to allocate working memory for %d ordered factor levels of result " +"column %d" +msgstr "" + +#: rbindlist.c:382 +#, c-format +msgid "" +"Column %d of item %d is an ordered factor but level %d ['%s'] is missing " +"from the ordered levels from column %d of item %d. Each set of ordered " +"factor levels should be an ordered subset of the first longest. A regular " +"factor will be created for this column." +msgstr "" + +#: rbindlist.c:387 +#, c-format +msgid "" +"Column %d of item %d is an ordered factor with '%s'<'%s' in its levels. But " +"'%s'<'%s' in the ordered levels from column %d of item %d. A regular factor " +"will be created for this column due to this ambiguity." +msgstr "" + +#: rbindlist.c:432 +#, c-format +msgid "" +"Failed to allocate working memory for %d factor levels of result column %d " +"when reading item %d of item %d" +msgstr "" + +#: rbindlist.c:522 +#, c-format +msgid "Column %d of item %d: %s" +msgstr "" + +#: reorder.c:17 +#, c-format +msgid "Item %d of list is type '%s' which isn't yet supported (SIZEOF=%d)" +msgstr "" + +#: reorder.c:19 +#, c-format +msgid "" +"Column %d is length %d which differs from length of column 1 (%d). Invalid " +"data.table." +msgstr "" + +#: reorder.c:27 +#, c-format +msgid "" +"reorder accepts vectors but this non-VECSXP is type '%s' which isn't yet " +"supported (SIZEOF=%d)" +msgstr "" + +#: reorder.c:28 +msgid "" +"Internal error in reorder.c: cannot reorder an ALTREP vector. Please see " +"NEWS item 2 in v1.11.4 and report this as a bug." +msgstr "" + +#: reorder.c:33 +msgid "order must be an integer vector" +msgstr "" + +#: reorder.c:34 +#, c-format +msgid "nrow(x)[%d]!=length(order)[%d]" +msgstr "" + +#: reorder.c:48 +#, c-format +msgid "order is not a permutation of 1:nrow[%d]" +msgstr "" + +#: reorder.c:57 +#, c-format +msgid "" +"Unable to allocate %d * %d bytes of working memory for reordering data.table" +msgstr "" + +#: shift.c:17 +#, c-format +msgid "" +"type '%s' passed to shift(). Must be a vector, list, data.frame or data.table" +msgstr "" + +#: shift.c:24 shift.c:28 +msgid "" +"Internal error: invalid type for shift(), should have been caught before. " +"please report to data.table issue tracker" +msgstr "" + +#: shift.c:31 +msgid "Internal error: k must be integer" +msgstr "" + +#: shift.c:33 +#, c-format +msgid "Item %d of n is NA" +msgstr "" + +#: shift.c:158 +#, c-format +msgid "Unsupported type '%s'" +msgstr "" + +#: subset.c:7 +#, c-format +msgid "Internal error: subsetVectorRaw length(ans)==%d n=%d" +msgstr "" + +#: subset.c:88 +#, 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 +#, c-format +msgid "Internal error. 'idx' is type '%s' not 'integer'" +msgstr "" + +#: subset.c:122 +#, c-format +msgid "" +"Internal error. 'maxArg' is type '%s' and length %d, should be an integer " +"singleton" +msgstr "" + +#: subset.c:123 +msgid "Internal error: allowOverMax must be TRUE/FALSE" +msgstr "" + +#: subset.c:125 +#, c-format +msgid "Internal error. max is %d, must be >= 0." +msgstr "" + +#: subset.c:149 +#, c-format +msgid "i[%d] is %d which is out of range [1,nrow=%d]" +msgstr "" + +#: subset.c:161 +#, c-format +msgid "" +"Item %d of i is %d and item %d is %d. Cannot mix positives and negatives." +msgstr "" + +#: subset.c:171 +#, c-format +msgid "Item %d of i is %d and item %d is NA. Cannot mix negatives and NA." +msgstr "" + +#: subset.c:207 +#, 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 +#, 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 +#, c-format +msgid "Column %d is NULL; malformed data.table." +msgstr "" + +#: subset.c:226 +#, c-format +msgid "Column %d ['%s'] is a data.frame or data.table; malformed data.table." +msgstr "" + +#: subset.c:231 +#, c-format +msgid "" +"Column %d ['%s'] is length %d but column 1 is length %d; malformed data." +"table." +msgstr "" + +#: subset.c:247 +#, c-format +msgid "Internal error. Argument 'x' to CsubsetDT is type '%s' not 'list'" +msgstr "" + +#: subset.c:260 +#, c-format +msgid "Internal error. Argument 'cols' to Csubset is type '%s' not 'integer'" +msgstr "" + +#: subset.c:337 +msgid "" +"Internal error: NULL can not be subset. It is invalid for a data.table to " +"contain a NULL column." +msgstr "" + +#: subset.c:339 +msgid "" +"Internal error: CsubsetVector is internal-use-only but has received " +"negatives, zeros or out-of-range" +msgstr "" + +#: transpose.c:9 +msgid "l must be a list." +msgstr "" + +#: transpose.c:13 +msgid "ignore.empty should be logical TRUE/FALSE." +msgstr "" + +#: transpose.c:16 +msgid "" +"keep.names should be either NULL, or the name of the first column of the " +"result in which to place the names of the input" +msgstr "" + +#: transpose.c:19 +msgid "fill must be a length 1 vector, such as the default NA" +msgstr "" + +#: transpose.c:28 +#, c-format +msgid "Item %d of list input is not an atomic vector" +msgstr "" + +#: types.c:17 types.c:21 +#, c-format +msgid "" +"%s: %d:\n" +"%s" +msgstr "" + +#: types.c:23 +#, c-format +msgid "" +"%s: %d:\n" +"%s:" +msgstr "" + +#: types.c:55 +msgid "internal error: status, nx, nk must be integer" +msgstr "" + +#: uniqlist.c:14 +msgid "Internal error: uniqlist has not been passed a list of columns" +msgstr "" + +#: uniqlist.c:17 +msgid "Internal error: uniqlist has been passed a non-integer order" +msgstr "" + +#: uniqlist.c:18 +msgid "Internal error: uniqlist has been passed a length-0 order" +msgstr "" + +#: uniqlist.c:19 +#, c-format +msgid "Internal error: uniqlist has been passed length(order)==%d but nrow==%d" +msgstr "" + +#: uniqlist.c:96 uniqlist.c:127 uniqlist.c:208 uniqlist.c:245 uniqlist.c:318 +#, c-format +msgid "Type '%s' not supported" +msgstr "" + +#: uniqlist.c:148 +msgid "Input argument 'x' to 'uniqlengths' must be an integer vector" +msgstr "" + +#: uniqlist.c:149 +msgid "" +"Input argument 'n' to 'uniqlengths' must be an integer vector of length 1" +msgstr "" + +#: uniqlist.c:167 +msgid "cols must be an integer vector with length >= 1" +msgstr "" + +#: uniqlist.c:171 +#, c-format +msgid "Item %d of cols is %d which is outside range of l [1,length(l)=%d]" +msgstr "" + +#: uniqlist.c:174 +#, c-format +msgid "" +"All elements to input list must be of same length. Element [%d] has length " +"%llu != length of first element = %llu." +msgstr "" + +#: uniqlist.c:255 +msgid "Internal error: nestedid was not passed a list length 1 or more" +msgstr "" + +#: uniqlist.c:262 +#, c-format +msgid "Internal error: nrows[%d]>0 but ngrps==0" +msgstr "" + +#: uniqlist.c:264 +msgid "cols must be an integer vector of positive length" +msgstr "" + +#: uniqlist.c:349 +msgid "x is not a logical vector" +msgstr "" + +#: utils.c:73 +#, c-format +msgid "Unsupported type '%s' passed to allNA()" +msgstr "" + +#: utils.c:92 +msgid "'x' argument must be data.table compatible" +msgstr "" + +#: utils.c:94 +msgid "'check_dups' argument must be TRUE or FALSE" +msgstr "" + +#: utils.c:110 +msgid "" +"argument specifying columns is type 'double' and one or more items in it are " +"not whole integers" +msgstr "" + +#: utils.c:116 +#, c-format +msgid "argument specifying columns specify non existing column(s): cols[%d]=%d" +msgstr "" + +#: utils.c:121 +msgid "'x' argument data.table has no names" +msgstr "" + +#: utils.c:126 +#, c-format +msgid "" +"argument specifying columns specify non existing column(s): cols[%d]='%s'" +msgstr "" + +#: utils.c:129 +msgid "argument specifying columns must be character or numeric" +msgstr "" + +#: utils.c:132 +msgid "argument specifying columns specify duplicated column(s)" +msgstr "" + +#: utils.c:138 +#, c-format +msgid "%s: fill argument must be length 1" +msgstr "" + +#: utils.c:171 +#, c-format +msgid "%s: fill argument must be numeric" +msgstr "" + +#: utils.c:274 +#, c-format +msgid "Internal error: unsupported type '%s' passed to copyAsPlain()" +msgstr "" + +#: utils.c:278 +#, c-format +msgid "" +"Internal error: type '%s' passed to copyAsPlain() but it seems " +"copyMostAttrib() retains ALTREP attributes" +msgstr "" + +#: utils.c:313 +#, c-format +msgid "Found and copied %d column%s with a shared memory address\n" +msgstr "" + +#: vecseq.c:13 +msgid "x must be an integer vector" +msgstr "" + +#: vecseq.c:14 +msgid "len must be an integer vector" +msgstr "" + +#: vecseq.c:15 +msgid "x and len must be the same length" +msgstr "" + +#: vecseq.c:21 +msgid "" +"Join results in more than 2^31 rows (internal vecseq reached physical " +"limit). Very likely misspecified join. Check for duplicate key values in i " +"each of which join to the same group in x over and over again. If that's ok, " +"try by=.EACHI to run j for each group to avoid the large allocation. " +"Otherwise, please search for this error message in the FAQ, Wiki, Stack " +"Overflow and data.table issue tracker for advice." +msgstr "" + +#: vecseq.c:25 +msgid "clamp must be a double vector length 1" +msgstr "" + +#: vecseq.c:27 +msgid "clamp must be positive" +msgstr "" + +#: vecseq.c:28 +#, c-format +msgid "" +"Join results in %d rows; more than %d = nrow(x)+nrow(i). Check for duplicate " +"key values in i each of which join to the same group in x over and over " +"again. If that's ok, try by=.EACHI to run j for each group to avoid the " +"large allocation. If you are sure you wish to proceed, rerun with allow." +"cartesian=TRUE. Otherwise, please search for this error message in the FAQ, " +"Wiki, Stack Overflow and data.table issue tracker for advice." +msgstr "" + +#: wrappers.c:11 +msgid "Attribute name must be a character vector of length 1" +msgstr "" + +#: wrappers.c:16 +msgid "" +"Internal structure doesn't seem to be a list. Can't set class to be 'data." +"table' or 'data.frame'. Use 'as.data.table()' or 'as.data.frame()' methods " +"instead." +msgstr "" + +#: wrappers.c:59 +msgid "First argument to setlistelt must be a list()" +msgstr "" + +#: wrappers.c:60 +msgid "Second argument to setlistelt must a length 1 integer vector" +msgstr "" + +#: wrappers.c:62 +#, c-format +msgid "i (%d) is outside the range of items [1,%d]" +msgstr "" + +#: wrappers.c:84 +msgid "x isn't a VECSXP" +msgstr "" + +#: wrappers.c:99 +#, c-format +msgid "" +"dim.data.table expects a data.table as input (which is a list), but seems to " +"be of type %s" +msgstr "" From 1c98859598c14ff869161228437d03c5e4a37863 Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Wed, 16 Oct 2019 01:57:42 +0800 Subject: [PATCH 13/22] update header metadata for src .pot --- po/data.table.pot | 16 +- src/data.table.pot | 2482 -------------------------------------------- 2 files changed, 8 insertions(+), 2490 deletions(-) delete mode 100644 src/data.table.pot diff --git a/po/data.table.pot b/po/data.table.pot index 1bb137587e..5b964b681e 100644 --- a/po/data.table.pot +++ b/po/data.table.pot @@ -1,20 +1,20 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. +# R::data.table src/ portability +# Copyright (C) 2019 +# This file is distributed under the same license as the data.table package. +# Michael Chirico , 2019. # #, fuzzy msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" +"Project-Id-Version: data.table 1.12.5\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-10-16 01:42+0800\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2019-10-16 01:42+0800\n" +"Last-Translator: Michael Chirico \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=CHARSET\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: assign.c:9 diff --git a/src/data.table.pot b/src/data.table.pot deleted file mode 100644 index eef36dc413..0000000000 --- a/src/data.table.pot +++ /dev/null @@ -1,2482 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) 2019 -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-10-13 16:58+0800\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=CHARSET\n" -"Content-Transfer-Encoding: 8bit\n" - -#: assign.c:9 -msgid "Internal error: finalizer hasn't received an ExternalPtr" -msgstr "" - -#: assign.c:11 -msgid "Internal error: finalizer's ExternalPtr doesn't see names in tag" -msgstr "" - -#: assign.c:14 -#, c-format -msgid "Internal error: finalizer sees l=%d, tl=%d" -msgstr "" - -#: assign.c:126 -msgid "Internal error: .internal.selfref ptr is not NULL or R_NilValue" -msgstr "" - -#: assign.c:128 -msgid "Internal error: .internal.selfref tag isn't NULL or a character vector" -msgstr "" - -#: assign.c:170 -msgid "Internal error: length(names)>0 but =0 and not NA." -msgstr "" - -#: assign.c:241 fsort.c:109 nafill.c:73 -msgid "verbose must be TRUE or FALSE" -msgstr "" - -#: assign.c:289 -msgid "assign has been passed a NULL dt" -msgstr "" - -#: assign.c:290 -msgid "dt passed to assign isn't type VECSXP" -msgstr "" - -#: assign.c:292 -msgid "" -".SD is locked. Updating .SD by reference using := or set are reserved for " -"future use. Use := in j directly. Or use copy(.SD) as a (slow) last resort, " -"until shallow() is exported." -msgstr "" - -#: assign.c:300 -msgid "Internal error: dt passed to Cassign is not a data.table or data.frame" -msgstr "" - -#: assign.c:304 -msgid "dt passed to assign has no names" -msgstr "" - -#: assign.c:306 -#, c-format -msgid "Internal error in assign: length of names (%d) is not length of dt (%d)" -msgstr "" - -#: assign.c:308 -msgid "" -"data.table is NULL; malformed. A null data.table should be an empty list. " -"typeof() should always return 'list' for data.table." -msgstr "" - -#: assign.c:325 -#, c-format -msgid "" -"i is type '%s'. Must be integer, or numeric is coerced with warning. If i is " -"a logical subset, simply wrap with which(), and take the which() outside the " -"loop if possible for efficiency." -msgstr "" - -#: assign.c:331 -#, c-format -msgid "i[%d] is %d which is out of range [1,nrow=%d]." -msgstr "" - -#: assign.c:361 -msgid "" -"set() on a data.frame is for changing existing columns, not adding new ones. " -"Please use a data.table for that. data.table's are over-allocated and don't " -"shallow copy." -msgstr "" - -#: assign.c:375 -#, c-format -msgid "" -"j is type '%s'. Must be integer, character, or numeric is coerced with " -"warning." -msgstr "" - -#: assign.c:377 -msgid "" -"Can't assign to the same column twice in the same query (duplicates " -"detected)." -msgstr "" - -#: assign.c:378 -msgid "newcolnames is supplied but isn't a character vector" -msgstr "" - -#: assign.c:390 -#, c-format -msgid "" -"Supplied %d columns to be assigned an empty list (which may be an empty data." -"table or data.frame since they are lists too). " -msgstr "" - -#: assign.c:398 -#, c-format -msgid "" -"Supplied %d columns to be assigned %d items. Please see NEWS for v1.12.2." -msgstr "" - -#: assign.c:406 -#, c-format -msgid "" -"Item %d of column numbers in j is %d which is outside range [1,ncol=%d]. " -"set() on a data.frame is for changing existing columns, not adding new ones. " -"Please use a data.table for that." -msgstr "" - -#: assign.c:407 -#, c-format -msgid "" -"Item %d of column numbers in j is %d which is outside range [1,ncol=%d]. Use " -"column names instead in j to add new columns." -msgstr "" - -#: assign.c:412 -msgid "When deleting columns, i should not be provided" -msgstr "" - -#: assign.c:418 -#, c-format -msgid "" -"RHS of assignment to existing column '%s' is zero length but not NULL. If " -"you intend to delete the column use NULL. Otherwise, the RHS must have " -"length > 0; e.g., NA_integer_. If you are trying to change the column type " -"to be an empty list column then, as with all column type changes, provide a " -"full length RHS vector such as vector('list',nrow(DT)); i.e., 'plonk' in the " -"new column." -msgstr "" - -#: assign.c:423 -#, c-format -msgid "" -"Internal error in assign.c: length(newcolnames)=%d, length(names)=%d, coln=%d" -msgstr "" - -#: assign.c:435 -#, c-format -msgid "" -"Can't assign to column '%s' (type 'factor') a value of type '%s' (not " -"character, factor, integer or numeric)" -msgstr "" - -#: assign.c:440 -#, c-format -msgid "" -"Supplied %d items to be assigned to %d items of column '%s'. If you wish to " -"'recycle' the RHS please " -msgstr "" - -#: assign.c:451 -msgid "" -"This data.table has either been loaded from disk (e.g. using readRDS()/" -"load()) or constructed manually (e.g. using structure()). Please run setDT() " -"or setalloccol() on it first (to pre-allocate space for new columns) before " -"assigning by reference to it." -msgstr "" - -#: assign.c:452 -#, c-format -msgid "" -"Internal error: oldtncol(%d) < oldncol(%d). Please report to data.table " -"issue tracker, including result of sessionInfo()." -msgstr "" - -#: assign.c:456 -#, c-format -msgid "" -"Internal error: DT passed to assign has not been allocated enough column " -"slots. l=%d, tl=%d, adding %d" -msgstr "" - -#: assign.c:458 -msgid "" -"It appears that at some earlier point, names of this data.table have been " -"reassigned. Please ensure to use setnames() rather than names<- or " -"colnames<-. Otherwise, please report to data.table issue tracker." -msgstr "" - -#: assign.c:462 -#, c-format -msgid "Internal error: selfrefnames is ok but tl names [%d] != tl [%d]" -msgstr "" - -#: assign.c:473 -msgid "" -"Internal error: earlier error 'When deleting columns, i should not be " -"provided' did not happen." -msgstr "" - -#: assign.c:566 -msgid "Internal error: index name ends with trailing __" -msgstr "" - -#: assign.c:571 -msgid "Internal error: Couldn't allocate memory for s4." -msgstr "" - -#: assign.c:582 -msgid "Internal error: Couldn't allocate memory for s5." -msgstr "" - -#: assign.c:689 -#, c-format -msgid "Internal error: recycle length error not caught earlier. slen=%d len=%d" -msgstr "" - -#: assign.c:693 -msgid "Internal error: memrecycle has received NULL colname" -msgstr "" - -#: assign.c:719 -#, c-format -msgid "" -"Cannot assign 'factor' to '%s'. Factors can only be assigned to factor, " -"character or list columns." -msgstr "" - -#: assign.c:733 -#, c-format -msgid "" -"Assigning factor numbers to column %d named '%s'. But %d is outside the " -"level range [1,%d]" -msgstr "" - -#: assign.c:741 -#, 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:747 -#, 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:768 -msgid "" -"Internal error: levels of target are either not unique or have truelength<0" -msgstr "" - -#: assign.c:807 -#, c-format -msgid "Unable to allocate working memory of %d bytes to combine factor levels" -msgstr "" - -#: assign.c:814 -msgid "Internal error: extra level check sum failed" -msgstr "" - -#: assign.c:839 -#, c-format -msgid "" -"Cannot coerce 'list' RHS to 'integer64' to match the type of the target " -"column (column %d named '%s')." -msgstr "" - -#: assign.c:945 -#, c-format -msgid "type '%s' cannot be coerced to '%s'" -msgstr "" - -#: assign.c:1065 -msgid "" -"To assign integer64 to a character column, please use as.character() for " -"clarity." -msgstr "" - -#: assign.c:1076 -#, c-format -msgid "Unsupported column type in assign.c:memrecycle '%s'" -msgstr "" - -#: assign.c:1123 -#, c-format -msgid "Internal error: writeNA passed a vector of type '%s'" -msgstr "" - -#: 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:1162 -#, c-format -msgid "Failed to allocate initial %d items in savetl_init" -msgstr "" - -#: assign.c:1171 -#, c-format -msgid "" -"Internal error: reached maximum %d items for savetl. Please report to data." -"table issue tracker." -msgstr "" - -#: assign.c:1178 -#, c-format -msgid "Failed to realloc saveds to %d items in savetl" -msgstr "" - -#: assign.c:1184 -#, c-format -msgid "Failed to realloc savedtl to %d items in savetl" -msgstr "" - -#: 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 -#, c-format -msgid "'new' is length %d. Should be the same as length of 'which' (%d)" -msgstr "" - -#: 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:1223 -msgid "dt passed to setcolorder has no names" -msgstr "" - -#: assign.c:1225 -#, c-format -msgid "Internal error: dt passed to setcolorder has %d columns but %d names" -msgstr "" - -#: assign.c:1232 -msgid "" -"Internal error: o passed to Csetcolorder contains an NA or out-of-bounds" -msgstr "" - -#: assign.c:1234 -msgid "Internal error: o passed to Csetcolorder contains a duplicate" -msgstr "" - -#: between.c:12 -#, c-format -msgid "" -"Incompatible vector lengths: length(x)==%d length(lower)==%d length(upper)==" -"%d. Each should be either length 1 or the length of the longest." -msgstr "" - -#: between.c:16 -msgid "incbounds must be TRUE or FALSE" -msgstr "" - -#: between.c:19 -msgid "NAbounds must be TRUE or NA" -msgstr "" - -#: between.c:22 -msgid "check must be TRUE or FALSE" -msgstr "" - -#: between.c:64 -#, c-format -msgid "Item %d of lower (%d) is greater than item %d of upper (%d)" -msgstr "" - -#: between.c:88 -msgid "x is integer64 but lower and/or upper are not." -msgstr "" - -#: between.c:95 -#, c-format -msgid "Item %d of lower (%lld) is greater than item %d of upper (%lld)" -msgstr "" - -#: between.c:115 -msgid "" -"x is not integer64 but lower and/or upper is integer64. Please align classes." -msgstr "" - -#: between.c:122 -#, c-format -msgid "Item %d of lower (%f) is greater than item %d of upper (%f)" -msgstr "" - -#: between.c:172 -#, c-format -msgid "Item %d of lower ('%s') is greater than item %d of upper ('%s')" -msgstr "" - -#: between.c:190 -#, c-format -msgid "" -"Internal error: between.c unsupported type '%s' should have been caught at R " -"level" -msgstr "" - -#: bmerge.c:48 -msgid "Internal error: icols is not integer vector" -msgstr "" - -#: bmerge.c:49 -msgid "Internal error: xcols is not integer vector" -msgstr "" - -#: bmerge.c:50 -#, c-format -msgid "Internal error: length(icols) [%d] > length(xcols) [%d]" -msgstr "" - -#: bmerge.c:57 -#, c-format -msgid "Internal error. icols[%d] is NA" -msgstr "" - -#: bmerge.c:58 -#, c-format -msgid "Internal error. xcols[%d] is NA" -msgstr "" - -#: bmerge.c:59 -#, c-format -msgid "icols[%d]=%d outside range [1,length(i)=%d]" -msgstr "" - -#: bmerge.c:60 -#, c-format -msgid "xcols[%d]=%d outside range [1,length(x)=%d]" -msgstr "" - -#: bmerge.c:63 -#, c-format -msgid "typeof x.%s (%s) != typeof i.%s (%s)" -msgstr "" - -#: bmerge.c:70 -msgid "roll is character but not 'nearest'" -msgstr "" - -#: bmerge.c:71 -msgid "roll='nearest' can't be applied to a character column, yet." -msgstr "" - -#: bmerge.c:74 -msgid "Internal error: roll is not character or double" -msgstr "" - -#: bmerge.c:79 -msgid "rollends must be a length 2 logical vector" -msgstr "" - -#: bmerge.c:89 uniqlist.c:270 -msgid "" -"Internal error: invalid value for 'mult'. please report to data.table issue " -"tracker" -msgstr "" - -#: bmerge.c:93 -msgid "" -"Internal error: opArg is not an integer vector of length equal to length(on)" -msgstr "" - -#: bmerge.c:96 -msgid "Internal error: nqgrpArg must be an integer vector" -msgstr "" - -#: bmerge.c:102 -msgid "Intrnal error: nqmaxgrpArg is not a positive length-1 integer vector" -msgstr "" - -#: bmerge.c:111 -msgid "Internal error in allocating memory for non-equi join" -msgstr "" - -#: bmerge.c:156 -msgid "Internal error: xoArg is not an integer vector" -msgstr "" - -#: bmerge.c:271 bmerge.c:379 -#, c-format -msgid "" -"Internal error in bmerge_r for '%s' column. Unrecognized value op[col]=%d" -msgstr "" - -#: bmerge.c:303 -#, c-format -msgid "Only '==' operator is supported for columns of type %s." -msgstr "" - -#: bmerge.c:410 -#, c-format -msgid "Type '%s' not supported for joining/merging" -msgstr "" - -#: bmerge.c:468 -msgid "Internal error: xlow!=xupp-1 || xlowxuppIn" -msgstr "" - -#: chmatch.c:4 -#, c-format -msgid "x is type '%s' (must be 'character' or NULL)" -msgstr "" - -#: chmatch.c:5 -#, c-format -msgid "table is type '%s' (must be 'character' or NULL)" -msgstr "" - -#: chmatch.c:6 -msgid "Internal error: either chin or chmatchdup should be true not both" -msgstr "" - -#: chmatch.c:30 -#, c-format -msgid "" -"Internal error: CHARSXP '%s' has a negative truelength (%d). Please file an " -"issue on the data.table tracker." -msgstr "" - -#: chmatch.c:60 -#, c-format -msgid "" -"Failed to allocate %lld bytes working memory in chmatchdup: length(table)=%d " -"length(unique(table))=%d" -msgstr "" - -#: cj.c:89 -#, c-format -msgid "Type '%s' not supported by CJ." -msgstr "" - -#: coalesce.c:5 -msgid "Internal error in coalesce.c: input is list(...) at R level" -msgstr "" - -#: coalesce.c:7 -msgid "" -"Internal error in coalesce.c: argument 'inplaceArg' must be TRUE or FALSE" -msgstr "" - -#: coalesce.c:16 -msgid "" -"The first argument is a list, data.table or data.frame. In this case there " -"should be no other arguments provided." -msgstr "" - -#: coalesce.c:32 -#, c-format -msgid "" -"Item 1 is a factor but item %d is not a factor. When factors are involved, " -"all items must be factor." -msgstr "" - -#: coalesce.c:34 -#, c-format -msgid "" -"Item %d is a factor but its levels are not identical to the first item's " -"levels." -msgstr "" - -#: coalesce.c:38 -#, c-format -msgid "" -"Item %d is a factor but item 1 is not a factor. When factors are involved, " -"all items must be factor." -msgstr "" - -#: coalesce.c:41 -#, c-format -msgid "" -"Item %d is type %s but the first item is type %s. Please coerce before " -"coalescing." -msgstr "" - -#: coalesce.c:43 -#, c-format -msgid "Item %d has a different class than item 1." -msgstr "" - -#: coalesce.c:46 -#, c-format -msgid "" -"Item %d is length %d but the first item is length %d. Only singletons are " -"recycled." -msgstr "" - -#: coalesce.c:166 -#, c-format -msgid "Unsupported type: %s" -msgstr "" - -#: dogroups.c:14 -msgid "Internal error: order not integer vector" -msgstr "" - -#: dogroups.c:15 -msgid "Internal error: starts not integer" -msgstr "" - -#: dogroups.c:16 -msgid "Internal error: lens not integer" -msgstr "" - -#: dogroups.c:18 -msgid "Internal error: jiscols not NULL but o__ has length" -msgstr "" - -#: dogroups.c:19 -msgid "Internal error: xjiscols not NULL but o__ has length" -msgstr "" - -#: dogroups.c:20 -msgid "'env' should be an environment" -msgstr "" - -#: dogroups.c:39 -#, c-format -msgid "" -"Internal error: unsupported size-0 type '%s' in column %d of 'by' should " -"have been caught earlier" -msgstr "" - -#: dogroups.c:43 -#, c-format -msgid "!length(bynames)[%d]==length(groups)[%d]==length(grpcols)[%d]" -msgstr "" - -#: dogroups.c:62 -msgid "row.names attribute of .SD not found" -msgstr "" - -#: dogroups.c:64 -#, 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 -msgid "length(names)!=length(SD)" -msgstr "" - -#: dogroups.c:73 -#, c-format -msgid "" -"Internal error: size-0 type %d in .SD column %d should have been caught " -"earlier" -msgstr "" - -#: dogroups.c:83 -msgid "length(xknames)!=length(xSD)" -msgstr "" - -#: dogroups.c:87 -#, c-format -msgid "" -"Internal error: type %d in .xSD column %d should have been caught by now" -msgstr "" - -#: dogroups.c:91 -#, c-format -msgid "length(iSD)[%d] != length(jiscols)[%d]" -msgstr "" - -#: dogroups.c:92 -#, 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 -#, c-format -msgid "j evaluates to type '%s'. Must evaluate to atomic vector or list." -msgstr "" - -#: dogroups.c:281 -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:291 -msgid "" -"RHS is NULL when grouping :=. Makes no sense to delete a column by group. " -"Perhaps use an empty vector instead." -msgstr "" - -#: dogroups.c:295 -#, c-format -msgid "" -"Supplied %d items to be assigned to group %d of size %d in column '%s'. The " -"RHS length must either be 1 (single values are ok) or match the LHS length " -"exactly. If you wish to 'recycle' the RHS please use rep() explicitly to " -"make this intent clear to readers of your code." -msgstr "" - -#: dogroups.c:304 -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:326 -msgid "j doesn't evaluate to the same number of columns for each group" -msgstr "" - -#: dogroups.c:360 -#, c-format -msgid "" -"Column %d of j's result for the first group is NULL. We rely on the column " -"types of the first result to decide the type expected for the remaining " -"groups (and require consistency). NULL columns are acceptable for later " -"groups (and those are replaced with NA of appropriate type and recycled) but " -"not for the first. Please use a typed empty vector instead, such as " -"integer() or numeric()." -msgstr "" - -#: dogroups.c:386 -#, c-format -msgid "dogroups: length(ans)[%d]!=ngrpcols[%d]+njval[%d]" -msgstr "" - -#: dogroups.c:426 -#, 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:428 -#, c-format -msgid "" -"Supplied %d items for column %d of group %d which has %d rows. The RHS " -"length must either be 1 (single values are ok) or match the LHS length " -"exactly. If you wish to 'recycle' the RHS please use rep() explicitly to " -"make this intent clear to readers of your code." -msgstr "" - -#: dogroups.c:453 -#, c-format -msgid "Internal error: block 0 [%d] and block 1 [%d] have both run" -msgstr "" - -#: dogroups.c:481 -msgid "growVector passed NULL" -msgstr "" - -#: fastmean.c:39 -msgid "narm should be TRUE or FALSE" -msgstr "" - -#: fastmean.c:45 -#, c-format -msgid "fastmean was passed type %s, not numeric or logical" -msgstr "" - -#: fastmean.c:83 fastmean.c:111 -#, c-format -msgid "Internal error: type '%s' not caught earlier in fastmean" -msgstr "" - -#: fcast.c:80 -#, c-format -msgid "Unsupported column type in fcast val: '%s'" -msgstr "" - -#: fifelse.c:5 -msgid "Argument 'test' must be logical." -msgstr "" - -#: fifelse.c:23 -#, 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 -msgid "" -"'yes' has different class than 'no'. Please make sure that both arguments " -"have the same class." -msgstr "" - -#: fifelse.c:33 -msgid "'yes' and 'no' are both type factor but their levels are different." -msgstr "" - -#: fifelse.c:38 -#, c-format -msgid "Length of 'yes' is %lld but must be 1 or length of 'test' (%lld)." -msgstr "" - -#: fifelse.c:40 -#, c-format -msgid "Length of 'no' is %lld but must be 1 or length of 'test' (%lld)." -msgstr "" - -#: fifelse.c:51 -#, c-format -msgid "Length of 'na' is %lld but must be 1" -msgstr "" - -#: fifelse.c:57 -#, 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 -msgid "" -"'yes' has different class than 'na'. Please make sure that both arguments " -"have the same class." -msgstr "" - -#: fifelse.c:63 -msgid "'yes' and 'na' are both type factor but their levels are different." -msgstr "" - -#: fifelse.c:133 -#, c-format -msgid "Type %s is not supported." -msgstr "" - -#: fmelt.c:18 -msgid "'x' must be an integer" -msgstr "" - -#: fmelt.c:19 -msgid "'n' must be a positive integer" -msgstr "" - -#: fmelt.c:41 -msgid "Argument to 'which' must be logical" -msgstr "" - -#: fmelt.c:70 -msgid "concat: 'vec must be a character vector" -msgstr "" - -#: fmelt.c:71 -msgid "concat: 'idx' must be an integer vector of length >= 0" -msgstr "" - -#: fmelt.c:75 -msgid "" -"concat: 'idx' must take values between 0 and length(vec); 0 <= idx <= " -"length(vec)" -msgstr "" - -#: fmelt.c:102 -#, c-format -msgid "Unknown 'measure.vars' type %s at index %d of list" -msgstr "" - -#: fmelt.c:154 fmelt.c:219 -#, c-format -msgid "Unknown 'id.vars' type %s, must be character or integer vector" -msgstr "" - -#: fmelt.c:159 fmelt.c:223 -msgid "One or more values in 'id.vars' is invalid." -msgstr "" - -#: fmelt.c:184 -#, c-format -msgid "" -"Unknown 'measure.vars' type %s, must be character or integer vector/list" -msgstr "" - -#: fmelt.c:193 fmelt.c:239 -msgid "One or more values in 'measure.vars' is invalid." -msgstr "" - -#: fmelt.c:231 -#, c-format -msgid "Unknown 'measure.vars' type %s, must be character or integer vector" -msgstr "" - -#: fmelt.c:276 -msgid "" -"When 'measure.vars' is a list, 'value.name' must be a character vector of " -"length =1 or =length(measure.vars)." -msgstr "" - -#: fmelt.c:277 -msgid "" -"When 'measure.vars' is either not specified or a character/integer vector, " -"'value.name' must be a character vector of length =1." -msgstr "" - -#: fmelt.c:280 -msgid "'variable.name' must be a character/integer vector of length=1." -msgstr "" - -#: fmelt.c:329 -msgid "" -"Internal error: combineFactorLevels in fmelt.c expects all-character input" -msgstr "" - -#: fmelt.c:332 -msgid "" -"Internal error: combineFactorLevels in fmelt.c expects a character target to " -"factorize" -msgstr "" - -#: fmelt.c:490 -#, c-format -msgid "Unknown column type '%s' for column '%s'." -msgstr "" - -#: fmelt.c:514 -#, c-format -msgid "Internal error: fmelt.c:getvarcols %d %d" -msgstr "" - -#: fmelt.c:662 -#, c-format -msgid "Unknown column type '%s' for column '%s' in 'data'" -msgstr "" - -#: fmelt.c:673 -msgid "Input is not of type VECSXP, expected a data.table, data.frame or list" -msgstr "" - -#: fmelt.c:674 -msgid "Argument 'value.factor' should be logical TRUE/FALSE" -msgstr "" - -#: fmelt.c:675 -msgid "Argument 'variable.factor' should be logical TRUE/FALSE" -msgstr "" - -#: fmelt.c:676 -msgid "Argument 'na.rm' should be logical TRUE/FALSE." -msgstr "" - -#: fmelt.c:677 -msgid "Argument 'variable.name' must be a character vector" -msgstr "" - -#: fmelt.c:678 -msgid "Argument 'value.name' must be a character vector" -msgstr "" - -#: fmelt.c:679 -msgid "Argument 'verbose' should be logical TRUE/FALSE" -msgstr "" - -#: fmelt.c:687 -msgid "names(data) is NULL. Please report to data.table-help" -msgstr "" - -#: forder.c:374 -msgid "Must an integer or numeric vector length 1" -msgstr "" - -#: forder.c:375 -msgid "Must be 2, 1 or 0" -msgstr "" - -#: forder.c:431 -msgid "" -"Internal error: input is not either a list of columns, or an atomic vector." -msgstr "" - -#: forder.c:433 -msgid "" -"Internal error: input is an atomic vector (not a list of columns) but by= is " -"not NULL" -msgstr "" - -#: forder.c:435 -msgid "" -"Input is an atomic vector (not a list of columns) but order= is not a length " -"1 integer" -msgstr "" - -#: forder.c:448 -msgid "Internal error: DT is an empty list() of 0 columns" -msgstr "" - -#: forder.c:450 -#, c-format -msgid "" -"Internal error: DT has %d columns but 'by' is either not integer or is " -"length 0" -msgstr "" - -#: forder.c:452 -#, c-format -msgid "" -"Either order= is not integer or its length (%d) is different to by='s length " -"(%d)" -msgstr "" - -#: forder.c:458 -#, c-format -msgid "internal error: 'by' value %d out of range [1,%d]" -msgstr "" - -#: forder.c:460 -#, c-format -msgid "Column %d is length %d which differs from length of column 1 (%d)\n" -msgstr "" - -#: forder.c:464 -msgid "retGrp= must be TRUE or FALSE" -msgstr "" - -#: forder.c:467 -msgid "sort= must be TRUE or FALSE" -msgstr "" - -#: forder.c:470 -msgid "At least one of retGrp= or sort= must be TRUE" -msgstr "" - -#: forder.c:472 -msgid "na.last must be logical TRUE, FALSE or NA of length 1" -msgstr "" - -#: forder.c:1301 -msgid "x must be either NULL or an integer vector" -msgstr "" - -#: forder.c:1303 -msgid "nrow must be integer vector length 1" -msgstr "" - -#: forder.c:1305 -#, c-format -msgid "nrow==%d but must be >=0" -msgstr "" - -#: forder.c:1322 -msgid "x must be type 'double'" -msgstr "" - -#: frank.c:11 -#, c-format -msgid "Internal error. Argument 'x' to Cdt_na is type '%s' not 'list'" -msgstr "" - -#: frank.c:12 -#, 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 -#, 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 -#, 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 -#, c-format -msgid "Unsupported column type '%s'" -msgstr "" - -#: frank.c:83 -msgid "" -"Internal error: invalid ties.method for frankv(), should have been caught " -"before. please report to data.table issue tracker" -msgstr "" - -#: frank.c:130 -#, c-format -msgid "Internal error: unknown ties value in frank: %d" -msgstr "" - -#: frank.c:141 -#, c-format -msgid "Internal error. Argument 'x' to CanyNA is type '%s' not 'list'" -msgstr "" - -#: frank.c:142 -#, c-format -msgid "Internal error. Argument 'cols' to CanyNA is type '%s' not 'integer'" -msgstr "" - -#: freadR.c:84 -msgid "" -"Internal error: freadR input not a single character string: a filename or " -"the data itself. Should have been caught at R level." -msgstr "" - -#: freadR.c:101 -msgid "" -"Internal error: freadR sep not a single character. R level catches this." -msgstr "" - -#: freadR.c:105 -msgid "" -"Internal error: freadR dec not a single character. R level catches this." -msgstr "" - -#: freadR.c:112 -msgid "quote= must be a single character, blank \")\", or FALSE" -msgstr "" - -#: freadR.c:137 -msgid "Internal error: skip not integer or string in freadR.c" -msgstr "" - -#: freadR.c:140 -#, c-format -msgid "Internal error: NAstringsArg is type '%s'. R level catches this" -msgstr "" - -#: freadR.c:153 -#, c-format -msgid "nThread(%d)<1" -msgstr "" - -#: freadR.c:160 -msgid "'integer64' must be a single character string" -msgstr "" - -#: freadR.c:660 -#, c-format -msgid "%s" -msgstr "" - -#: froll.c:428 -#, c-format -msgid "%s: results from provided FUN are not length 1" -msgstr "" - -#: froll.c:438 -#, c-format -msgid "%s: results from provided FUN are not of type double" -msgstr "" - -#: frollR.c:15 -msgid "x must be of type numeric or logical" -msgstr "" - -#: frollR.c:26 -msgid "x must be list, data.frame or data.table of numeric or logical types" -msgstr "" - -#: frollR.c:47 frollR.c:264 -msgid "n must be non 0 length" -msgstr "" - -#: frollR.c:50 -msgid "adaptive must be TRUE or FALSE" -msgstr "" - -#: frollR.c:58 -msgid "n must be integer, list is accepted for adaptive TRUE" -msgstr "" - -#: frollR.c:65 frollR.c:256 frollR.c:259 -msgid "n must be integer" -msgstr "" - -#: frollR.c:72 -msgid "n must be positive integer values (> 0)" -msgstr "" - -#: frollR.c:81 frollR.c:93 -msgid "n must be integer vector or list of integer vectors" -msgstr "" - -#: frollR.c:104 gsumm.c:342 gsumm.c:577 gsumm.c:686 gsumm.c:805 gsumm.c:950 -#: gsumm.c:1262 gsumm.c:1403 uniqlist.c:350 -msgid "na.rm must be TRUE or FALSE" -msgstr "" - -#: frollR.c:107 -msgid "hasNA must be TRUE, FALSE or NA" -msgstr "" - -#: frollR.c:109 -msgid "" -"using hasNA FALSE and na.rm TRUE does not make sense, if you know there are " -"NA values use hasNA TRUE, otherwise leave it as default NA" -msgstr "" - -#: frollR.c:119 frollR.c:275 -msgid "" -"Internal error: invalid align argument in rolling function, should have been " -"caught before. please report to data.table issue tracker." -msgstr "" - -#: frollR.c:122 -msgid "" -"using adaptive TRUE and align argument different than 'right' is not " -"implemented" -msgstr "" - -#: frollR.c:135 -msgid "" -"adaptive rolling function can only process 'x' having equal length of " -"elements, like data.table or data.frame; If you want to call rolling " -"function on list having variable length of elements call it for each field " -"separately" -msgstr "" - -#: frollR.c:137 -msgid "" -"length of integer vector(s) provided as list to 'n' argument must be equal " -"to number of observations provided in 'x'" -msgstr "" - -#: frollR.c:151 -msgid "" -"Internal error: invalid fun argument in rolling function, should have been " -"caught before. please report to data.table issue tracker." -msgstr "" - -#: frollR.c:155 frollR.c:279 nafill.c:136 shift.c:21 -msgid "fill must be a vector of length 1" -msgstr "" - -#: frollR.c:169 frollR.c:292 -msgid "fill must be numeric" -msgstr "" - -#: frollR.c:185 -msgid "" -"Internal error: invalid algo argument in rolling function, should have been " -"caught before. please report to data.table issue tracker." -msgstr "" - -#: frollR.c:190 -#, c-format -msgid "Internal error: badaptive=%d but ik is not integer" -msgstr "" - -#: frollR.c:219 -#, c-format -msgid "Internal error: Unknown sfun value in froll: %d" -msgstr "" - -#: frollR.c:238 -msgid "internal error: 'fun' must be a function" -msgstr "" - -#: frollR.c:240 -msgid "internal error: 'rho' should be an environment" -msgstr "" - -#: fsort.c:111 -msgid "x must be a vector of type 'double' currently" -msgstr "" - -#: fsort.c:157 -msgid "Cannot yet handle negatives." -msgstr "" - -#: fsort.c:173 -msgid "Unable to allocate working memory" -msgstr "" - -#: fsort.c:230 -msgid "Internal error: counts[nBatch-1][MSBsize-1] != length(x)" -msgstr "" - -#: fwriteR.c:41 -msgid "Internal error: col passed to getMaxCategLen is missing levels" -msgstr "" - -#: fwriteR.c:75 -msgid "Internal error: getMaxListItemLen should have caught this up front." -msgstr "" - -#: fwriteR.c:98 -#, c-format -msgid "" -"Row %d of list column is type '%s' - not yet implemented. fwrite() can write " -"list columns containing items which are atomic vectors of" -msgstr "" - -#: fwriteR.c:170 -msgid "" -"fwrite must be passed an object of type list; e.g. data.frame, data.table" -msgstr "" - -#: fwriteR.c:234 -#, c-format -msgid "Column %d's length (%d) is not the same as column 1's length (%d)" -msgstr "" - -#: fwriteR.c:237 -#, c-format -msgid "Column %d's type is '%s' - not yet implemented in fwrite." -msgstr "" - -#: fwriteR.c:270 -#, c-format -msgid "" -"sep ('%c'), sep2 ('%c') and dec ('%c') must all be different. Column %d is a " -"list column." -msgstr "" - -#: gsumm.c:43 -msgid "env is not an environment" -msgstr "" - -#: gsumm.c:45 -msgid "o is not an integer vector" -msgstr "" - -#: gsumm.c:46 -msgid "f is not an integer vector" -msgstr "" - -#: gsumm.c:47 -msgid "l is not an integer vector" -msgstr "" - -#: gsumm.c:56 -msgid "irowsArg is neither an integer vector nor NULL" -msgstr "" - -#: gsumm.c:58 -#, c-format -msgid "length(f)=%d != length(l)=%d" -msgstr "" - -#: gsumm.c:66 -#, c-format -msgid "o has length %d but sum(l)=%d" -msgstr "" - -#: gsumm.c:69 -msgid "Internal error: o's maxgrpn attribute mismatches recalculated maxgrpn" -msgstr "" - -#: gsumm.c:89 -#, c-format -msgid "" -"Internal error: nrow=%d ngrp=%d nbit=%d shift=%d highSize=%d nBatch=%d " -"batchSize=%d lastBatchSize=%d\n" -msgstr "" - -#: gsumm.c:116 -msgid "" -"Internal error: Failed to allocate counts or TMP when assigning g in gforce" -msgstr "" - -#: gsumm.c:334 -#, c-format -msgid "gather implemented for INTSXP, REALSXP, and CPLXSXP but not '%s'" -msgstr "" - -#: gsumm.c:345 -msgid "sum is not meaningful for factors." -msgstr "" - -#: gsumm.c:350 gsumm.c:606 -#, c-format -msgid "nrow [%d] != length(x) [%d] in gsum" -msgstr "" - -#: gsumm.c:565 -#, c-format -msgid "" -"Type '%s' not supported by GForce sum (gsum). Either add the prefix base::" -"sum(.) or turn off GForce optimization using options(datatable.optimize=1)" -msgstr "" - -#: gsumm.c:578 -msgid "" -"GForce mean can only be applied to columns, not .SD or similar. Likely " -"you're looking for 'DT[,lapply(.SD,mean),by=,.SDcols=]'. See ?data.table." -msgstr "" - -#: gsumm.c:579 -msgid "mean is not meaningful for factors." -msgstr "" - -#: gsumm.c:599 -#, c-format -msgid "Internal error: gsum returned type '%s'. typeof(x) is '%s'" -msgstr "" - -#: gsumm.c:609 -#, c-format -msgid "Unable to allocate %d * %d bytes for sum in gmean na.rm=TRUE" -msgstr "" - -#: gsumm.c:612 -#, c-format -msgid "Unable to allocate %d * %d bytes for counts in gmean na.rm=TRUE" -msgstr "" - -#: gsumm.c:638 -#, c-format -msgid "Unable to allocate %d * %d bytes for si in gmean na.rm=TRUE" -msgstr "" - -#: gsumm.c:650 -#, c-format -msgid "" -"Type '%s' not supported by GForce mean (gmean) na.rm=TRUE. Either add the " -"prefix base::mean(.) or turn off GForce optimization using options(datatable." -"optimize=1)" -msgstr "" - -#: gsumm.c:674 -msgid "Internal error: unsupported type at the end of gmean" -msgstr "" - -#: gsumm.c:687 -msgid "" -"GForce min can only be applied to columns, not .SD or similar. To find min " -"of all items in a list such as .SD, either add the prefix base::min(.SD) or " -"turn off GForce optimization using options(datatable.optimize=1). More " -"likely, you may be looking for 'DT[,lapply(.SD,min),by=,.SDcols=]'" -msgstr "" - -#: gsumm.c:688 -msgid "min is not meaningful for factors." -msgstr "" - -#: gsumm.c:693 -#, c-format -msgid "nrow [%d] != length(x) [%d] in gmin" -msgstr "" - -#: gsumm.c:791 -msgid "Type 'complex' has no well-defined min" -msgstr "" - -#: gsumm.c:794 -#, c-format -msgid "" -"Type '%s' not supported by GForce min (gmin). Either add the prefix base::" -"min(.) or turn off GForce optimization using options(datatable.optimize=1)" -msgstr "" - -#: gsumm.c:806 -msgid "" -"GForce max can only be applied to columns, not .SD or similar. To find max " -"of all items in a list such as .SD, either add the prefix base::max(.SD) or " -"turn off GForce optimization using options(datatable.optimize=1). More " -"likely, you may be looking for 'DT[,lapply(.SD,max),by=,.SDcols=]'" -msgstr "" - -#: gsumm.c:807 -msgid "max is not meaningful for factors." -msgstr "" - -#: gsumm.c:812 -#, c-format -msgid "nrow [%d] != length(x) [%d] in gmax" -msgstr "" - -#: gsumm.c:937 -msgid "Type 'complex' has no well-defined max" -msgstr "" - -#: gsumm.c:940 -#, c-format -msgid "" -"Type '%s' not supported by GForce max (gmax). Either add the prefix base::" -"max(.) or turn off GForce optimization using options(datatable.optimize=1)" -msgstr "" - -#: gsumm.c:951 -msgid "" -"GForce median can only be applied to columns, not .SD or similar. To find " -"median of all items in a list such as .SD, either add the prefix stats::" -"median(.SD) or turn off GForce optimization using options(datatable." -"optimize=1). More likely, you may be looking for 'DT[,lapply(.SD,median)," -"by=,.SDcols=]'" -msgstr "" - -#: gsumm.c:952 -msgid "median is not meaningful for factors." -msgstr "" - -#: gsumm.c:955 -#, c-format -msgid "nrow [%d] != length(x) [%d] in gmedian" -msgstr "" - -#: gsumm.c:992 -#, c-format -msgid "" -"Type '%s' not supported by GForce median (gmedian). Either add the prefix " -"stats::median(.) or turn " -msgstr "" - -#: gsumm.c:1006 -#, c-format -msgid "nrow [%d] != length(x) [%d] in gtail" -msgstr "" - -#: gsumm.c:1074 -#, c-format -msgid "" -"Type '%s' not supported by GForce tail (gtail). Either add the prefix utils::" -"tail(.) or turn off GForce optimization using options(datatable.optimize=1)" -msgstr "" - -#: gsumm.c:1086 gsumm.c:1177 -#, c-format -msgid "nrow [%d] != length(x) [%d] in ghead" -msgstr "" - -#: gsumm.c:1154 -#, c-format -msgid "" -"Type '%s' not supported by GForce head (ghead). Either add the prefix utils::" -"head(.) or turn off GForce optimization using options(datatable.optimize=1)" -msgstr "" - -#: gsumm.c:1162 -msgid "" -"Internal error, gtail is only implemented for n=1. This should have been " -"caught before. please report to data.table issue tracker." -msgstr "" - -#: gsumm.c:1167 -msgid "" -"Internal error, ghead is only implemented for n=1. This should have been " -"caught before. please report to data.table issue tracker." -msgstr "" - -#: gsumm.c:1173 -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 "" - -#: gsumm.c:1251 -#, c-format -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 "" - -#: gsumm.c:1263 -msgid "" -"GForce var/sd can only be applied to columns, not .SD or similar. For the " -"full covariance matrix of all items in a list such as .SD, either add the " -"prefix stats::var(.SD) (or stats::sd(.SD)) or turn off GForce optimization " -"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 "" - -#: gsumm.c:1264 -msgid "var/sd is not meaningful for factors." -msgstr "" - -#: gsumm.c:1267 -#, c-format -msgid "nrow [%d] != length(x) [%d] in gvar" -msgstr "" - -#: gsumm.c:1383 -#, c-format -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 "" - -#: gsumm.c:1385 -#, c-format -msgid "" -"Type '%s' not supported by GForce sd (gsd). Either add the prefix stats::" -"sd(.) or turn off GForce optimization using options(datatable.optimize=1)" -msgstr "" - -#: gsumm.c:1404 -msgid "" -"GForce prod can only be applied to columns, not .SD or similar. To multiply " -"all items in a list such as .SD, either add the prefix base::prod(.SD) or " -"turn off GForce optimization using options(datatable.optimize=1). More " -"likely, you may be looking for 'DT[,lapply(.SD,prod),by=,.SDcols=]'" -msgstr "" - -#: gsumm.c:1405 -msgid "prod is not meaningful for factors." -msgstr "" - -#: gsumm.c:1410 -#, c-format -msgid "nrow [%d] != length(x) [%d] in gprod" -msgstr "" - -#: gsumm.c:1412 -#, c-format -msgid "Unable to allocate %d * %d bytes for gprod" -msgstr "" - -#: gsumm.c:1447 -#, c-format -msgid "" -"Type '%s' not supported by GForce prod (gprod). Either add the prefix base::" -"prod(.) or turn off GForce optimization using options(datatable.optimize=1)" -msgstr "" - -#: ijoin.c:22 ijoin.c:243 -msgid "" -"Internal error: invalid value for 'mult'; this should have been caught " -"before. please report to data.table issue tracker" -msgstr "" - -#: ijoin.c:29 ijoin.c:250 -msgid "" -"Internal error: invalid value for 'type'; this should have been caught " -"before. please report to data.table issue tracker" -msgstr "" - -#: ijoin.c:56 ijoin.c:121 -#, c-format -msgid "Internal error: unknown type in mult=%d in lookup: %d" -msgstr "" - -#: ijoin.c:124 ijoin.c:215 -#, c-format -msgid "Internal error: unknown mult in lookup: %d" -msgstr "" - -#: ijoin.c:160 -#, c-format -msgid "Internal error: unknown type lookup should have been caught earlier: %d" -msgstr "" - -#: ijoin.c:212 -#, c-format -msgid "" -"Internal error: unknown type in mult=%d in lookup should have been caught " -"earlier: %d" -msgstr "" - -#: ijoin.c:323 -#, c-format -msgid "Internal error: unknown type in mult=ALL in overlaps: %d" -msgstr "" - -#: ijoin.c:464 ijoin.c:571 ijoin.c:720 -#, c-format -msgid "Internal error: unknown type in mult=%d in overlaps: %d" -msgstr "" - -#: ijoin.c:723 -#, c-format -msgid "Internal error: unknown mult in overlaps: %d" -msgstr "" - -#: init.c:198 -#, c-format -msgid "" -"Pointers are %d bytes, greater than 8. We have not tested on any " -"architecture greater than 64bit yet." -msgstr "" - -#: init.c:209 -#, c-format -msgid "Checking NA_INTEGER [%d] == INT_MIN [%d] %s" -msgstr "" - -#: init.c:210 -#, c-format -msgid "Checking NA_INTEGER [%d] == NA_LOGICAL [%d] %s" -msgstr "" - -#: init.c:211 -#, c-format -msgid "Checking sizeof(int) [%d] is 4 %s" -msgstr "" - -#: init.c:212 -#, c-format -msgid "Checking sizeof(double) [%d] is 8 %s" -msgstr "" - -#: init.c:214 -#, c-format -msgid "Checking sizeof(long long) [%d] is 8 %s" -msgstr "" - -#: init.c:215 -#, c-format -msgid "Checking sizeof(pointer) [%d] is 4 or 8 %s" -msgstr "" - -#: init.c:216 -#, c-format -msgid "Checking sizeof(SEXP) [%d] == sizeof(pointer) [%d] %s" -msgstr "" - -#: init.c:217 -#, c-format -msgid "Checking sizeof(uint64_t) [%d] is 8 %s" -msgstr "" - -#: init.c:218 -#, c-format -msgid "Checking sizeof(int64_t) [%d] is 8 %s" -msgstr "" - -#: init.c:219 -#, c-format -msgid "Checking sizeof(signed char) [%d] is 1 %s" -msgstr "" - -#: init.c:220 -#, c-format -msgid "Checking sizeof(int8_t) [%d] is 1 %s" -msgstr "" - -#: init.c:221 -#, c-format -msgid "Checking sizeof(uint8_t) [%d] is 1 %s" -msgstr "" - -#: init.c:222 -#, c-format -msgid "Checking sizeof(int16_t) [%d] is 2 %s" -msgstr "" - -#: init.c:223 -#, c-format -msgid "Checking sizeof(uint16_t) [%d] is 2 %s" -msgstr "" - -#: init.c:226 -#, c-format -msgid "Checking LENGTH(allocVector(INTSXP,2)) [%d] is 2 %s" -msgstr "" - -#: init.c:227 -#, c-format -msgid "Checking TRUELENGTH(allocVector(INTSXP,2)) [%d] is 0 %s" -msgstr "" - -#: init.c:234 -#, c-format -msgid "Checking memset(&i,0,sizeof(int)); i == (int)0 %s" -msgstr "" - -#: init.c:237 -#, c-format -msgid "Checking memset(&ui, 0, sizeof(unsigned int)); ui == (unsigned int)0 %s" -msgstr "" - -#: init.c:240 -#, c-format -msgid "Checking memset(&d, 0, sizeof(double)); d == (double)0.0 %s" -msgstr "" - -#: init.c:243 -#, c-format -msgid "Checking memset(&ld, 0, sizeof(long double)); ld == (long double)0.0 %s" -msgstr "" - -#: init.c:246 -msgid "The ascii character '/' is not just before '0'" -msgstr "" - -#: init.c:247 -msgid "The C expression (uint_fast8_t)('/'-'0')<10 is true. Should be false." -msgstr "" - -#: init.c:248 -msgid "The ascii character ':' is not just after '9'" -msgstr "" - -#: init.c:249 -msgid "The C expression (uint_fast8_t)('9'-':')<10 is true. Should be false." -msgstr "" - -#: init.c:254 -#, c-format -msgid "Conversion of NA_INT64 via double failed %lld!=%lld" -msgstr "" - -#: init.c:258 -msgid "NA_INT64_D (negative -0.0) is not == 0.0." -msgstr "" - -#: init.c:259 -msgid "NA_INT64_D (negative -0.0) is not ==-0.0." -msgstr "" - -#: init.c:260 -msgid "ISNAN(NA_INT64_D) is TRUE but should not be" -msgstr "" - -#: init.c:261 -msgid "isnan(NA_INT64_D) is TRUE but should not be" -msgstr "" - -#: init.c:290 -#, c-format -msgid "PRINTNAME(install(\")integer64\")) has returned %s not %s" -msgstr "" - -#: init.c:359 -msgid ".Last.value in namespace is not a length 1 integer" -msgstr "" - -#: nafill.c:83 -msgid "" -"'x' argument is atomic vector, in-place update is supported only for list/" -"data.table" -msgstr "" - -#: nafill.c:85 nafill.c:95 -msgid "'x' argument must be numeric type, or list/data.table of numeric types" -msgstr "" - -#: nafill.c:133 nafill.c:161 -msgid "" -"Internal error: invalid type argument in nafillR function, should have been " -"caught before. Please report to data.table issue tracker." -msgstr "" - -#: openmp-utils.c:67 -msgid "'verbose' must be TRUE or FALSE" -msgstr "" - -#: openmp-utils.c:91 -msgid "" -"restore_after_fork= must be TRUE, FALSE, or NULL (default). " -"getDTthreads(verbose=TRUE) reports the current setting.\n" -msgstr "" - -#: openmp-utils.c:105 -#, c-format -msgid "" -"threads= must be either NULL (default) or a single number. It has length %d" -msgstr "" - -#: openmp-utils.c:107 -msgid "threads= must be either NULL (default) or type integer/numeric" -msgstr "" - -#: openmp-utils.c:109 -msgid "" -"threads= must be either NULL or a single integer >= 0. See ?setDTthreads." -msgstr "" - -#: openmp-utils.c:114 -msgid "Internal error: percent= must be TRUE or FALSE at C level" -msgstr "" - -#: openmp-utils.c:117 -#, c-format -msgid "" -"Internal error: threads==%d should be between 2 and 100 (percent=TRUE at C " -"level)." -msgstr "" - -#: rbindlist.c:8 -msgid "fill= should be TRUE or FALSE" -msgstr "" - -#: rbindlist.c:10 -msgid "use.names= should be TRUE, FALSE, or not used (\")check\" by default)" -msgstr "" - -#: rbindlist.c:12 -msgid "" -"Input to rbindlist must be a list. This list can contain data.tables, data." -"frames or plain lists." -msgstr "" - -#: rbindlist.c:20 -msgid "Internal error: rbindlist.c idcol is not a single string" -msgstr "" - -#: rbindlist.c:31 -#, c-format -msgid "Item %d of input is not a data.frame, data.table or list" -msgstr "" - -#: rbindlist.c:39 -#, c-format -msgid "" -"Item %d has %d columns, inconsistent with item %d which has %d columns. To " -"fill missing columns use fill=TRUE." -msgstr "" - -#: rbindlist.c:42 -#, c-format -msgid "Item %d has %d columns but %d column names. Invalid object." -msgstr "" - -#: rbindlist.c:49 -#, c-format -msgid "" -"Column %d of item %d is length %d inconsistent with column %d which is " -"length %d. Only length-1 columns are recycled." -msgstr "" - -#: rbindlist.c:62 -#, c-format -msgid "" -"Total rows in the list is %lld which is larger than the maximum number of " -"rows, currently %d" -msgstr "" - -#: rbindlist.c:63 -msgid "use.names=TRUE but no item of input list has any names" -msgstr "" - -#: rbindlist.c:71 -#, c-format -msgid "" -"Failed to allocate upper bound of %lld unique column names [sum(lapply(l," -"ncol))]" -msgstr "" - -#: rbindlist.c:102 -#, c-format -msgid "Failed to allocate nuniq=%d items working memory in rbindlist.c" -msgstr "" - -#: rbindlist.c:136 -#, c-format -msgid "Failed to allocate ncol=%d items working memory in rbindlist.c" -msgstr "" - -#: rbindlist.c:191 -msgid "" -"Internal error: usenames==NA but fill=TRUE. usenames should have been set to " -"TRUE earlier with warning." -msgstr "" - -#: rbindlist.c:206 -msgid "" -"Internal error: could not find the first column name not present in earlier " -"item" -msgstr "" - -#: rbindlist.c:218 -#, c-format -msgid "" -"Internal error: usenames==NA but an out-of-order name has been found in an " -"item with no names or the first item. [%d]" -msgstr "" - -#: rbindlist.c:297 -#, c-format -msgid "" -"Column %d of item %d has type 'factor' but has no levels; i.e. malformed." -msgstr "" - -#: rbindlist.c:315 -#, c-format -msgid "" -"Class attribute on column %d of item %d does not match with column %d of " -"item %d." -msgstr "" - -#: rbindlist.c:325 -#, c-format -msgid "" -"Internal error: column %d of result is determined to be integer64 but " -"maxType=='%s' != REALSXP" -msgstr "" - -#: rbindlist.c:361 -#, c-format -msgid "" -"Failed to allocate working memory for %d ordered factor levels of result " -"column %d" -msgstr "" - -#: rbindlist.c:432 -#, c-format -msgid "" -"Failed to allocate working memory for %d factor levels of result column %d " -"when reading item %d of item %d" -msgstr "" - -#: reorder.c:17 -#, c-format -msgid "Item %d of list is type '%s' which isn't yet supported (SIZEOF=%d)" -msgstr "" - -#: reorder.c:19 -#, c-format -msgid "" -"Column %d is length %d which differs from length of column 1 (%d). Invalid " -"data.table." -msgstr "" - -#: reorder.c:27 -#, c-format -msgid "" -"reorder accepts vectors but this non-VECSXP is type '%s' which isn't yet " -"supported (SIZEOF=%d)" -msgstr "" - -#: reorder.c:28 -msgid "" -"Internal error in reorder.c: cannot reorder an ALTREP vector. Please see " -"NEWS item 2 in v1.11.4 and report this as a bug." -msgstr "" - -#: reorder.c:33 -msgid "order must be an integer vector" -msgstr "" - -#: reorder.c:34 -#, c-format -msgid "nrow(x)[%d]!=length(order)[%d]" -msgstr "" - -#: reorder.c:48 -#, c-format -msgid "order is not a permutation of 1:nrow[%d]" -msgstr "" - -#: reorder.c:57 -#, c-format -msgid "" -"Unable to allocate %d * %d bytes of working memory for reordering data.table" -msgstr "" - -#: shift.c:17 -#, c-format -msgid "" -"type '%s' passed to shift(). Must be a vector, list, data.frame or data.table" -msgstr "" - -#: shift.c:24 shift.c:28 -msgid "" -"Internal error: invalid type for shift(), should have been caught before. " -"please report to data.table issue tracker" -msgstr "" - -#: shift.c:31 -msgid "Internal error: k must be integer" -msgstr "" - -#: shift.c:33 -#, c-format -msgid "Item %d of n is NA" -msgstr "" - -#: shift.c:158 -#, c-format -msgid "Unsupported type '%s'" -msgstr "" - -#: subset.c:7 -#, c-format -msgid "Internal error: subsetVectorRaw length(ans)==%d n=%d" -msgstr "" - -#: subset.c:88 -#, 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 -#, c-format -msgid "Internal error. 'idx' is type '%s' not 'integer'" -msgstr "" - -#: subset.c:122 -#, c-format -msgid "" -"Internal error. 'maxArg' is type '%s' and length %d, should be an integer " -"singleton" -msgstr "" - -#: subset.c:123 -msgid "Internal error: allowOverMax must be TRUE/FALSE" -msgstr "" - -#: subset.c:125 -#, c-format -msgid "Internal error. max is %d, must be >= 0." -msgstr "" - -#: subset.c:149 -#, c-format -msgid "i[%d] is %d which is out of range [1,nrow=%d]" -msgstr "" - -#: subset.c:161 -#, c-format -msgid "" -"Item %d of i is %d and item %d is %d. Cannot mix positives and negatives." -msgstr "" - -#: subset.c:171 -#, c-format -msgid "Item %d of i is %d and item %d is NA. Cannot mix negatives and NA." -msgstr "" - -#: subset.c:223 -#, c-format -msgid "Column %d is NULL; malformed data.table." -msgstr "" - -#: subset.c:226 -#, c-format -msgid "Column %d ['%s'] is a data.frame or data.table; malformed data.table." -msgstr "" - -#: subset.c:231 -#, c-format -msgid "" -"Column %d ['%s'] is length %d but column 1 is length %d; malformed data." -"table." -msgstr "" - -#: subset.c:247 -#, c-format -msgid "Internal error. Argument 'x' to CsubsetDT is type '%s' not 'list'" -msgstr "" - -#: subset.c:260 -#, c-format -msgid "Internal error. Argument 'cols' to Csubset is type '%s' not 'integer'" -msgstr "" - -#: subset.c:337 -msgid "" -"Internal error: NULL can not be subset. It is invalid for a data.table to " -"contain a NULL column." -msgstr "" - -#: subset.c:339 -msgid "" -"Internal error: CsubsetVector is internal-use-only but has received " -"negatives, zeros or out-of-range" -msgstr "" - -#: transpose.c:9 -msgid "l must be a list." -msgstr "" - -#: transpose.c:13 -msgid "ignore.empty should be logical TRUE/FALSE." -msgstr "" - -#: transpose.c:16 -msgid "" -"keep.names should be either NULL, or the name of the first column of the " -"result in which to place the names of the input" -msgstr "" - -#: transpose.c:19 -msgid "fill must be a length 1 vector, such as the default NA" -msgstr "" - -#: transpose.c:28 -#, c-format -msgid "Item %d of list input is not an atomic vector" -msgstr "" - -#: types.c:23 -#, c-format -msgid "" -"%s: %d:\n" -"%s:" -msgstr "" - -#: types.c:55 -msgid "internal error: status, nx, nk must be integer" -msgstr "" - -#: uniqlist.c:14 -msgid "Internal error: uniqlist has not been passed a list of columns" -msgstr "" - -#: uniqlist.c:17 -msgid "Internal error: uniqlist has been passed a non-integer order" -msgstr "" - -#: uniqlist.c:18 -msgid "Internal error: uniqlist has been passed a length-0 order" -msgstr "" - -#: uniqlist.c:19 -#, c-format -msgid "Internal error: uniqlist has been passed length(order)==%d but nrow==%d" -msgstr "" - -#: uniqlist.c:96 uniqlist.c:127 uniqlist.c:208 uniqlist.c:245 uniqlist.c:318 -#, c-format -msgid "Type '%s' not supported" -msgstr "" - -#: uniqlist.c:148 -msgid "Input argument 'x' to 'uniqlengths' must be an integer vector" -msgstr "" - -#: uniqlist.c:149 -msgid "" -"Input argument 'n' to 'uniqlengths' must be an integer vector of length 1" -msgstr "" - -#: uniqlist.c:167 -msgid "cols must be an integer vector with length >= 1" -msgstr "" - -#: uniqlist.c:171 -#, c-format -msgid "Item %d of cols is %d which is outside range of l [1,length(l)=%d]" -msgstr "" - -#: uniqlist.c:174 -#, c-format -msgid "" -"All elements to input list must be of same length. Element [%d] has length " -"%llu != length of first element = %llu." -msgstr "" - -#: uniqlist.c:255 -msgid "Internal error: nestedid was not passed a list length 1 or more" -msgstr "" - -#: uniqlist.c:262 -#, c-format -msgid "Internal error: nrows[%d]>0 but ngrps==0" -msgstr "" - -#: uniqlist.c:264 -msgid "cols must be an integer vector of positive length" -msgstr "" - -#: uniqlist.c:349 -msgid "x is not a logical vector" -msgstr "" - -#: utils.c:73 -#, c-format -msgid "Unsupported type '%s' passed to allNA()" -msgstr "" - -#: utils.c:92 -msgid "'x' argument must be data.table compatible" -msgstr "" - -#: utils.c:94 -msgid "'check_dups' argument must be TRUE or FALSE" -msgstr "" - -#: utils.c:110 -msgid "" -"argument specifying columns is type 'double' and one or more items in it are " -"not whole integers" -msgstr "" - -#: utils.c:116 -#, c-format -msgid "argument specifying columns specify non existing column(s): cols[%d]=%d" -msgstr "" - -#: utils.c:121 -msgid "'x' argument data.table has no names" -msgstr "" - -#: utils.c:126 -#, c-format -msgid "" -"argument specifying columns specify non existing column(s): cols[%d]='%s'" -msgstr "" - -#: utils.c:129 -msgid "argument specifying columns must be character or numeric" -msgstr "" - -#: utils.c:132 -msgid "argument specifying columns specify duplicated column(s)" -msgstr "" - -#: utils.c:138 -#, c-format -msgid "%s: fill argument must be length 1" -msgstr "" - -#: utils.c:171 -#, c-format -msgid "%s: fill argument must be numeric" -msgstr "" - -#: utils.c:274 -#, c-format -msgid "Internal error: unsupported type '%s' passed to copyAsPlain()" -msgstr "" - -#: utils.c:278 -#, c-format -msgid "" -"Internal error: type '%s' passed to copyAsPlain() but it seems " -"copyMostAttrib() retains ALTREP attributes" -msgstr "" - -#: vecseq.c:13 -msgid "x must be an integer vector" -msgstr "" - -#: vecseq.c:14 -msgid "len must be an integer vector" -msgstr "" - -#: vecseq.c:15 -msgid "x and len must be the same length" -msgstr "" - -#: vecseq.c:21 -msgid "" -"Join results in more than 2^31 rows (internal vecseq reached physical " -"limit). Very likely misspecified join. Check for duplicate key values in i " -"each of which join to the same group in x over and over again. If that's ok, " -"try by=.EACHI to run j for each group to avoid the large allocation. " -"Otherwise, please search for this error message in the FAQ, Wiki, Stack " -"Overflow and data.table issue tracker for advice." -msgstr "" - -#: vecseq.c:25 -msgid "clamp must be a double vector length 1" -msgstr "" - -#: vecseq.c:27 -msgid "clamp must be positive" -msgstr "" - -#: vecseq.c:28 -#, c-format -msgid "" -"Join results in %d rows; more than %d = nrow(x)+nrow(i). Check for duplicate " -"key values in i each of which join to the same group in x over and over " -"again. If that's ok, try by=.EACHI to run j for each group to avoid the " -"large allocation. If you are sure you wish to proceed, rerun with allow." -"cartesian=TRUE. Otherwise, please search for this error message in the FAQ, " -"Wiki, Stack Overflow and data.table issue tracker for advice." -msgstr "" - -#: wrappers.c:11 -msgid "Attribute name must be a character vector of length 1" -msgstr "" - -#: wrappers.c:16 -msgid "" -"Internal structure doesn't seem to be a list. Can't set class to be 'data." -"table' or 'data.frame'. Use 'as.data.table()' or 'as.data.frame()' methods " -"instead." -msgstr "" - -#: wrappers.c:59 -msgid "First argument to setlistelt must be a list()" -msgstr "" - -#: wrappers.c:60 -msgid "Second argument to setlistelt must a length 1 integer vector" -msgstr "" - -#: wrappers.c:62 -#, c-format -msgid "i (%d) is outside the range of items [1,%d]" -msgstr "" - -#: wrappers.c:84 -msgid "x isn't a VECSXP" -msgstr "" - -#: wrappers.c:99 -#, c-format -msgid "" -"dim.data.table expects a data.table as input (which is a list), but seems to " -"be of type %s" -msgstr "" From 0832f48d454ff7d95ef57d6d6ab49c088535ae27 Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Wed, 16 Oct 2019 21:53:03 +0800 Subject: [PATCH 14/22] run update_pkg_po on the src to get mo files --- inst/po/en@quot/LC_MESSAGES/data.table.mo | Bin 0 -> 137184 bytes inst/po/zh_CN/LC_MESSAGES/data.table.mo | Bin 0 -> 351 bytes po/data.table.pot | 8 +- po/zh_CN.po | 4378 +++++++++++++++++++++ src/forder.c | 4 +- 5 files changed, 4384 insertions(+), 6 deletions(-) create mode 100644 inst/po/en@quot/LC_MESSAGES/data.table.mo create mode 100644 inst/po/zh_CN/LC_MESSAGES/data.table.mo create mode 100644 po/zh_CN.po diff --git a/inst/po/en@quot/LC_MESSAGES/data.table.mo b/inst/po/en@quot/LC_MESSAGES/data.table.mo new file mode 100644 index 0000000000000000000000000000000000000000..ed43e8115212e1195dc83280bb2c77328d7ad026 GIT binary patch literal 137184 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 vhf6^5(Jw&pY4S3s?*dSA=RM$|;A7w! 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

}*YQ4ViK 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 literal 0 HcmV?d00001 diff --git a/inst/po/zh_CN/LC_MESSAGES/data.table.mo b/inst/po/zh_CN/LC_MESSAGES/data.table.mo new file mode 100644 index 0000000000000000000000000000000000000000..494e694301b11f2fc6059ae7cb016f6ea0d15ac6 GIT binary patch literal 351 zcmYk1PfG(a5XCEc+M{O=Ip|4eO-j{m{DW946kIH2^*-Glw~^gsNm9`d;@9)DI18oq z!H_wIwr2(t>_$Oq%B78OQJBQ6^f zDpkYuB3V%9e1tsIrh\n" "Language-Team: LANGUAGE \n" "Language: \n" @@ -1451,11 +1451,11 @@ msgid "Column %d is length %d which differs from length of column 1 (%d)\n" msgstr "" #: forder.c:464 -msgid "retGrp= must be TRUE or FALSE" +msgid "retGrp must be TRUE or FALSE" msgstr "" #: forder.c:467 -msgid "sort= must be TRUE or FALSE" +msgid "sort must be TRUE or FALSE" msgstr "" #: forder.c:470 diff --git a/po/zh_CN.po b/po/zh_CN.po new file mode 100644 index 0000000000..3554bec910 --- /dev/null +++ b/po/zh_CN.po @@ -0,0 +1,4378 @@ +msgid "" +msgstr "" +"Project-Id-Version: data.table 1.12.5\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-10-16 15:03+0800\n" +"PO-Revision-Date: 2019-10-04 17:06+08\n" +"Last-Translator: Michael Chirico \n" +"Language-Team: Mandarin\n" +"Language: Mandarin\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: assign.c:9 +msgid "Internal error: finalizer hasn't received an ExternalPtr" +msgstr "" + +#: assign.c:11 +msgid "Internal error: finalizer's ExternalPtr doesn't see names in tag" +msgstr "" + +#: assign.c:14 +#, c-format +msgid "Internal error: finalizer sees l=%d, tl=%d" +msgstr "" + +#: assign.c:123 +msgid "" +".internal.selfref ptr is NULL. This is expected and normal for a data.table " +"loaded from disk. Please remember to always setDT() immediately after " +"loading to prevent unexpected behavior. If this table was not loaded from " +"disk or you've already run setDT(), please report to data.table issue " +"tracker.\n" +msgstr "" + +#: assign.c:126 +msgid "Internal error: .internal.selfref ptr is not NULL or R_NilValue" +msgstr "" + +#: assign.c:128 +msgid "Internal error: .internal.selfref tag isn't NULL or a character vector" +msgstr "" + +#: assign.c:170 +msgid "Internal error: length(names)>0 but =0 and not NA." +msgstr "" + +#: assign.c:241 fsort.c:109 nafill.c:73 +msgid "verbose must be TRUE or FALSE" +msgstr "" + +#: assign.c:289 +msgid "assign has been passed a NULL dt" +msgstr "" + +#: assign.c:290 +msgid "dt passed to assign isn't type VECSXP" +msgstr "" + +#: assign.c:292 +msgid "" +".SD is locked. Updating .SD by reference using := or set are reserved for " +"future use. Use := in j directly. Or use copy(.SD) as a (slow) last resort, " +"until shallow() is exported." +msgstr "" + +#: assign.c:300 +msgid "Internal error: dt passed to Cassign is not a data.table or data.frame" +msgstr "" + +#: assign.c:304 +msgid "dt passed to assign has no names" +msgstr "" + +#: assign.c:306 +#, c-format +msgid "Internal error in assign: length of names (%d) is not length of dt (%d)" +msgstr "" + +#: assign.c:308 +msgid "" +"data.table is NULL; malformed. A null data.table should be an empty list. " +"typeof() should always return 'list' for data.table." +msgstr "" + +#: assign.c:317 +#, c-format +msgid "Assigning to all %d rows\n" +msgstr "" + +#: assign.c:322 +msgid "" +"Coerced i from numeric to integer. Please pass integer for efficiency; e.g., " +"2L rather than 2" +msgstr "" + +#: assign.c:325 +#, c-format +msgid "" +"i is type '%s'. Must be integer, or numeric is coerced with warning. If i is " +"a logical subset, simply wrap with which(), and take the which() outside the " +"loop if possible for efficiency." +msgstr "" + +#: assign.c:331 +#, c-format +msgid "i[%d] is %d which is out of range [1,nrow=%d]." +msgstr "" + +#: assign.c:334 +#, c-format +msgid "Assigning to %d row subset of %d rows\n" +msgstr "" + +#: assign.c:342 +#, c-format +msgid "Added %d new column%s initialized with all-NA\n" +msgstr "" + +#: assign.c:347 +msgid "length(LHS)==0; no columns to delete or assign RHS to." +msgstr "" + +#: assign.c:361 +msgid "" +"set() on a data.frame is for changing existing columns, not adding new ones. " +"Please use a data.table for that. data.table's are over-allocated and don't " +"shallow copy." +msgstr "" + +#: assign.c:372 +msgid "" +"Coerced j from numeric to integer. Please pass integer for efficiency; e.g., " +"2L rather than 2" +msgstr "" + +#: assign.c:375 +#, c-format +msgid "" +"j is type '%s'. Must be integer, character, or numeric is coerced with " +"warning." +msgstr "" + +#: assign.c:377 +msgid "" +"Can't assign to the same column twice in the same query (duplicates " +"detected)." +msgstr "" + +#: assign.c:378 +msgid "newcolnames is supplied but isn't a character vector" +msgstr "" + +#: assign.c:380 +#, c-format +msgid "RHS_list_of_columns == %s\n" +msgstr "" + +#: assign.c:385 +#, c-format +msgid "" +"RHS_list_of_columns revised to true because RHS list has 1 item which is " +"NULL, or whose length %d is either 1 or targetlen (%d). Please unwrap RHS.\n" +msgstr "" + +#: assign.c:390 +#, c-format +msgid "" +"Supplied %d columns to be assigned an empty list (which may be an empty data." +"table or data.frame since they are lists too). To delete multiple columns " +"use NULL instead. To add multiple empty list columns, use list(list())." +msgstr "" + +#: assign.c:395 +#, c-format +msgid "Recycling single RHS list item across %d columns. Please unwrap RHS.\n" +msgstr "" + +#: assign.c:397 +#, c-format +msgid "" +"Supplied %d columns to be assigned %d items. Please see NEWS for v1.12.2." +msgstr "" + +#: assign.c:405 +#, c-format +msgid "" +"Item %d of column numbers in j is %d which is outside range [1,ncol=%d]. " +"set() on a data.frame is for changing existing columns, not adding new ones. " +"Please use a data.table for that." +msgstr "" + +#: assign.c:406 +#, c-format +msgid "" +"Item %d of column numbers in j is %d which is outside range [1,ncol=%d]. Use " +"column names instead in j to add new columns." +msgstr "" + +#: assign.c:411 +msgid "When deleting columns, i should not be provided" +msgstr "" + +#: assign.c:417 +#, c-format +msgid "" +"RHS of assignment to existing column '%s' is zero length but not NULL. If " +"you intend to delete the column use NULL. Otherwise, the RHS must have " +"length > 0; e.g., NA_integer_. If you are trying to change the column type " +"to be an empty list column then, as with all column type changes, provide a " +"full length RHS vector such as vector('list',nrow(DT)); i.e., 'plonk' in the " +"new column." +msgstr "" + +#: assign.c:422 +#, c-format +msgid "" +"Internal error in assign.c: length(newcolnames)=%d, length(names)=%d, coln=%d" +msgstr "" + +#: assign.c:424 +#, c-format +msgid "Column '%s' does not exist to remove" +msgstr "" + +#: assign.c:430 +#, c-format +msgid "%d column matrix RHS of := will be treated as one vector" +msgstr "" + +#: assign.c:434 +#, c-format +msgid "" +"Can't assign to column '%s' (type 'factor') a value of type '%s' (not " +"character, factor, integer or numeric)" +msgstr "" + +#: assign.c:439 +#, c-format +msgid "" +"Supplied %d items to be assigned to %d items of column '%s'. If you wish to " +"'recycle' the RHS please use rep() to make this intent clear to readers of " +"your code." +msgstr "" + +#: assign.c:449 +msgid "" +"This data.table has either been loaded from disk (e.g. using readRDS()/" +"load()) or constructed manually (e.g. using structure()). Please run setDT() " +"or setalloccol() on it first (to pre-allocate space for new columns) before " +"assigning by reference to it." +msgstr "" + +#: assign.c:450 +#, c-format +msgid "" +"Internal error: oldtncol(%d) < oldncol(%d). Please report to data.table " +"issue tracker, including result of sessionInfo()." +msgstr "" + +#: assign.c:452 +#, c-format +msgid "" +"truelength (%d) is greater than 10,000 items over-allocated (length = %d). " +"See ?truelength. If you didn't set the datatable.alloccol option very large, " +"please report to data.table issue tracker including the result of " +"sessionInfo()." +msgstr "" + +#: assign.c:454 +#, c-format +msgid "" +"Internal error: DT passed to assign has not been allocated enough column " +"slots. l=%d, tl=%d, adding %d" +msgstr "" + +#: assign.c:456 +msgid "" +"It appears that at some earlier point, names of this data.table have been " +"reassigned. Please ensure to use setnames() rather than names<- or " +"colnames<-. Otherwise, please report to data.table issue tracker." +msgstr "" + +#: assign.c:460 +#, c-format +msgid "Internal error: selfrefnames is ok but tl names [%d] != tl [%d]" +msgstr "" + +#: assign.c:471 +msgid "" +"Internal error: earlier error 'When deleting columns, i should not be " +"provided' did not happen." +msgstr "" + +#: assign.c:482 +#, c-format +msgid "" +"RHS for item %d has been duplicated because NAMED==%d MAYBE_SHARED==%d, but " +"then is being plonked. length(values)==%d; length(cols)==%d)\n" +msgstr "" + +#: assign.c:487 +#, c-format +msgid "Direct plonk of unnamed RHS, no copy. NAMED==%d, MAYBE_SHARED==%d\n" +msgstr "" + +#: assign.c:556 +#, c-format +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 "" + +#: assign.c:564 +msgid "Internal error: index name ends with trailing __" +msgstr "" + +#: assign.c:569 +msgid "Internal error: Couldn't allocate memory for s4." +msgstr "" + +#: assign.c:580 +msgid "Internal error: Couldn't allocate memory for s5." +msgstr "" + +#: assign.c:601 assign.c:617 +#, c-format +msgid "Dropping index '%s' due to an update on a key column\n" +msgstr "" + +#: assign.c:610 +#, c-format +msgid "Shortening index '%s' to '%s' due to an update on a key column\n" +msgstr "" + +#: assign.c:687 +#, c-format +msgid "Internal error: recycle length error not caught earlier. slen=%d len=%d" +msgstr "" + +#: assign.c:691 +msgid "Internal error: memrecycle has received NULL colname" +msgstr "" + +#: assign.c:717 +#, c-format +msgid "" +"Cannot assign 'factor' to '%s'. Factors can only be assigned to factor, " +"character or list columns." +msgstr "" + +#: assign.c:731 +#, c-format +msgid "" +"Assigning factor numbers to column %d named '%s'. But %d is outside the " +"level range [1,%d]" +msgstr "" + +#: assign.c:739 +#, 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:745 +#, 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:766 +msgid "" +"Internal error: levels of target are either not unique or have truelength<0" +msgstr "" + +#: assign.c:805 +#, c-format +msgid "Unable to allocate working memory of %d bytes to combine factor levels" +msgstr "" + +#: assign.c:812 +msgid "Internal error: extra level check sum failed" +msgstr "" + +#: assign.c:831 +#, c-format +msgid "" +"Coercing 'character' RHS to '%s' to match the type of the target column " +"(column %d named '%s')." +msgstr "" + +#: assign.c:837 +#, c-format +msgid "" +"Cannot coerce 'list' RHS to 'integer64' to match the type of the target " +"column (column %d named '%s')." +msgstr "" + +#: assign.c:842 +#, c-format +msgid "" +"Coercing 'list' RHS to '%s' to match the type of the target column (column " +"%d named '%s')." +msgstr "" + +#: assign.c:848 +#, c-format +msgid "Zero-copy coerce when assigning '%s' to '%s' column %d named '%s'.\n" +msgstr "" + +#: assign.c:943 +#, c-format +msgid "type '%s' cannot be coerced to '%s'" +msgstr "" + +#: assign.c:1063 +msgid "" +"To assign integer64 to a character column, please use as.character() for " +"clarity." +msgstr "" + +#: assign.c:1074 +#, c-format +msgid "Unsupported column type in assign.c:memrecycle '%s'" +msgstr "" + +#: assign.c:1121 +#, c-format +msgid "Internal error: writeNA passed a vector of type '%s'" +msgstr "" + +#: assign.c:1152 +#, c-format +msgid "" +"Internal error: savetl_init checks failed (%d %d %p %p). please report to " +"data.table issue tracker." +msgstr "" + +#: assign.c:1160 +#, c-format +msgid "Failed to allocate initial %d items in savetl_init" +msgstr "" + +#: assign.c:1169 +#, c-format +msgid "" +"Internal error: reached maximum %d items for savetl. Please report to data." +"table issue tracker." +msgstr "" + +#: assign.c:1176 +#, c-format +msgid "Failed to realloc saveds to %d items in savetl" +msgstr "" + +#: assign.c:1182 +#, c-format +msgid "Failed to realloc savedtl to %d items in savetl" +msgstr "" + +#: assign.c:1205 +msgid "x must be a character vector" +msgstr "" + +#: assign.c:1206 +msgid "'which' must be an integer vector" +msgstr "" + +#: assign.c:1207 +msgid "'new' must be a character vector" +msgstr "" + +#: assign.c:1208 +#, c-format +msgid "'new' is length %d. Should be the same as length of 'which' (%d)" +msgstr "" + +#: assign.c:1211 +#, c-format +msgid "" +"Item %d of 'which' is %d which is outside range of the length %d character " +"vector" +msgstr "" + +#: assign.c:1221 +msgid "dt passed to setcolorder has no names" +msgstr "" + +#: assign.c:1223 +#, c-format +msgid "Internal error: dt passed to setcolorder has %d columns but %d names" +msgstr "" + +#: assign.c:1230 +msgid "" +"Internal error: o passed to Csetcolorder contains an NA or out-of-bounds" +msgstr "" + +#: assign.c:1232 +msgid "Internal error: o passed to Csetcolorder contains a duplicate" +msgstr "" + +#: between.c:12 +#, c-format +msgid "" +"Incompatible vector lengths: length(x)==%d length(lower)==%d length(upper)==" +"%d. Each should be either length 1 or the length of the longest." +msgstr "" + +#: between.c:16 +msgid "incbounds must be TRUE or FALSE" +msgstr "" + +#: between.c:19 +msgid "NAbounds must be TRUE or NA" +msgstr "" + +#: between.c:22 +msgid "check must be TRUE or FALSE" +msgstr "" + +#: between.c:64 +#, c-format +msgid "Item %d of lower (%d) is greater than item %d of upper (%d)" +msgstr "" + +#: between.c:82 +#, c-format +msgid "between parallel processing of integer took %8.3fs\n" +msgstr "" + +#: between.c:88 +msgid "x is integer64 but lower and/or upper are not." +msgstr "" + +#: between.c:95 +#, c-format +msgid "Item %d of lower (%lld) is greater than item %d of upper (%lld)" +msgstr "" + +#: between.c:112 +#, c-format +msgid "between parallel processing of integer64 took %8.3fs\n" +msgstr "" + +#: between.c:115 +msgid "" +"x is not integer64 but lower and/or upper is integer64. Please align classes." +msgstr "" + +#: between.c:122 +#, c-format +msgid "Item %d of lower (%f) is greater than item %d of upper (%f)" +msgstr "" + +#: between.c:140 +#, c-format +msgid "between parallel processing of double with open bounds took %8.3fs\n" +msgstr "" + +#: between.c:157 +#, c-format +msgid "between parallel processing of double with closed bounds took %8.3fs\n" +msgstr "" + +#: between.c:172 +#, c-format +msgid "Item %d of lower ('%s') is greater than item %d of upper ('%s')" +msgstr "" + +#: between.c:187 +#, c-format +msgid "between non-parallel processing of character took %8.3fs\n" +msgstr "" + +#: between.c:190 +#, c-format +msgid "" +"Internal error: between.c unsupported type '%s' should have been caught at R " +"level" +msgstr "" + +#: bmerge.c:48 +msgid "Internal error: icols is not integer vector" +msgstr "" + +#: bmerge.c:49 +msgid "Internal error: xcols is not integer vector" +msgstr "" + +#: bmerge.c:50 +#, c-format +msgid "Internal error: length(icols) [%d] > length(xcols) [%d]" +msgstr "" + +#: bmerge.c:57 +#, c-format +msgid "Internal error. icols[%d] is NA" +msgstr "" + +#: bmerge.c:58 +#, c-format +msgid "Internal error. xcols[%d] is NA" +msgstr "" + +#: bmerge.c:59 +#, c-format +msgid "icols[%d]=%d outside range [1,length(i)=%d]" +msgstr "" + +#: bmerge.c:60 +#, c-format +msgid "xcols[%d]=%d outside range [1,length(x)=%d]" +msgstr "" + +#: bmerge.c:63 +#, c-format +msgid "typeof x.%s (%s) != typeof i.%s (%s)" +msgstr "" + +#: bmerge.c:70 +msgid "roll is character but not 'nearest'" +msgstr "" + +#: bmerge.c:71 +msgid "roll='nearest' can't be applied to a character column, yet." +msgstr "" + +#: bmerge.c:74 +msgid "Internal error: roll is not character or double" +msgstr "" + +#: bmerge.c:79 +msgid "rollends must be a length 2 logical vector" +msgstr "" + +#: bmerge.c:89 uniqlist.c:270 +msgid "" +"Internal error: invalid value for 'mult'. please report to data.table issue " +"tracker" +msgstr "" + +#: bmerge.c:93 +msgid "" +"Internal error: opArg is not an integer vector of length equal to length(on)" +msgstr "" + +#: bmerge.c:96 +msgid "Internal error: nqgrpArg must be an integer vector" +msgstr "" + +#: bmerge.c:102 +msgid "Intrnal error: nqmaxgrpArg is not a positive length-1 integer vector" +msgstr "" + +#: bmerge.c:111 +msgid "Internal error in allocating memory for non-equi join" +msgstr "" + +#: bmerge.c:156 +msgid "Internal error: xoArg is not an integer vector" +msgstr "" + +#: bmerge.c:271 bmerge.c:379 +#, c-format +msgid "" +"Internal error in bmerge_r for '%s' column. Unrecognized value op[col]=%d" +msgstr "" + +#: bmerge.c:303 +#, c-format +msgid "Only '==' operator is supported for columns of type %s." +msgstr "" + +#: bmerge.c:410 +#, c-format +msgid "Type '%s' not supported for joining/merging" +msgstr "" + +#: bmerge.c:468 +msgid "Internal error: xlow!=xupp-1 || xlowxuppIn" +msgstr "" + +#: chmatch.c:4 +#, c-format +msgid "x is type '%s' (must be 'character' or NULL)" +msgstr "" + +#: chmatch.c:5 +#, c-format +msgid "table is type '%s' (must be 'character' or NULL)" +msgstr "" + +#: chmatch.c:6 +msgid "Internal error: either chin or chmatchdup should be true not both" +msgstr "" + +#: chmatch.c:30 +#, c-format +msgid "" +"Internal error: CHARSXP '%s' has a negative truelength (%d). Please file an " +"issue on the data.table tracker." +msgstr "" + +#: chmatch.c:60 +#, c-format +msgid "" +"Failed to allocate %lld bytes working memory in chmatchdup: length(table)=%d " +"length(unique(table))=%d" +msgstr "" + +#: cj.c:89 +#, c-format +msgid "Type '%s' not supported by CJ." +msgstr "" + +#: coalesce.c:5 +msgid "Internal error in coalesce.c: input is list(...) at R level" +msgstr "" + +#: coalesce.c:7 +msgid "" +"Internal error in coalesce.c: argument 'inplaceArg' must be TRUE or FALSE" +msgstr "" + +#: coalesce.c:16 +msgid "" +"The first argument is a list, data.table or data.frame. In this case there " +"should be no other arguments provided." +msgstr "" + +#: coalesce.c:32 +#, c-format +msgid "" +"Item 1 is a factor but item %d is not a factor. When factors are involved, " +"all items must be factor." +msgstr "" + +#: coalesce.c:34 +#, c-format +msgid "" +"Item %d is a factor but its levels are not identical to the first item's " +"levels." +msgstr "" + +#: coalesce.c:38 +#, c-format +msgid "" +"Item %d is a factor but item 1 is not a factor. When factors are involved, " +"all items must be factor." +msgstr "" + +#: coalesce.c:41 +#, c-format +msgid "" +"Item %d is type %s but the first item is type %s. Please coerce before " +"coalescing." +msgstr "" + +#: coalesce.c:43 +#, c-format +msgid "Item %d has a different class than item 1." +msgstr "" + +#: coalesce.c:46 +#, c-format +msgid "" +"Item %d is length %d but the first item is length %d. Only singletons are " +"recycled." +msgstr "" + +#: coalesce.c:50 +msgid "coalesce copied first item (inplace=FALSE)\n" +msgstr "" + +#: coalesce.c:166 +#, c-format +msgid "Unsupported type: %s" +msgstr "" + +#: dogroups.c:14 +msgid "Internal error: order not integer vector" +msgstr "" + +#: dogroups.c:15 +msgid "Internal error: starts not integer" +msgstr "" + +#: dogroups.c:16 +msgid "Internal error: lens not integer" +msgstr "" + +#: dogroups.c:18 +msgid "Internal error: jiscols not NULL but o__ has length" +msgstr "" + +#: dogroups.c:19 +msgid "Internal error: xjiscols not NULL but o__ has length" +msgstr "" + +#: dogroups.c:20 +msgid "'env' should be an environment" +msgstr "" + +#: dogroups.c:39 +#, c-format +msgid "" +"Internal error: unsupported size-0 type '%s' in column %d of 'by' should " +"have been caught earlier" +msgstr "" + +#: dogroups.c:43 +#, c-format +msgid "!length(bynames)[%d]==length(groups)[%d]==length(grpcols)[%d]" +msgstr "" + +#: dogroups.c:62 +msgid "row.names attribute of .SD not found" +msgstr "" + +#: dogroups.c:64 +#, 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 +msgid "length(names)!=length(SD)" +msgstr "" + +#: dogroups.c:73 +#, c-format +msgid "" +"Internal error: size-0 type %d in .SD column %d should have been caught " +"earlier" +msgstr "" + +#: dogroups.c:83 +msgid "length(xknames)!=length(xSD)" +msgstr "" + +#: dogroups.c:87 +#, c-format +msgid "" +"Internal error: type %d in .xSD column %d should have been caught by now" +msgstr "" + +#: dogroups.c:91 +#, c-format +msgid "length(iSD)[%d] != length(jiscols)[%d]" +msgstr "" + +#: dogroups.c:92 +#, 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 +#, c-format +msgid "j evaluates to type '%s'. Must evaluate to atomic vector or list." +msgstr "" + +#: dogroups.c:281 +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:291 +msgid "" +"RHS is NULL when grouping :=. Makes no sense to delete a column by group. " +"Perhaps use an empty vector instead." +msgstr "" + +#: dogroups.c:295 +#, c-format +msgid "" +"Supplied %d items to be assigned to group %d of size %d in column '%s'. The " +"RHS length must either be 1 (single values are ok) or match the LHS length " +"exactly. If you wish to 'recycle' the RHS please use rep() explicitly to " +"make this intent clear to readers of your code." +msgstr "" + +#: dogroups.c:304 +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:319 +#, c-format +msgid "Group %d column '%s': %s" +msgstr "" + +#: dogroups.c:326 +msgid "j doesn't evaluate to the same number of columns for each group" +msgstr "" + +#: dogroups.c:360 +#, c-format +msgid "" +"Column %d of j's result for the first group is NULL. We rely on the column " +"types of the first result to decide the type expected for the remaining " +"groups (and require consistency). NULL columns are acceptable for later " +"groups (and those are replaced with NA of appropriate type and recycled) but " +"not for the first. Please use a typed empty vector instead, such as " +"integer() or numeric()." +msgstr "" + +#: dogroups.c:363 +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:365 +#, c-format +msgid "" +"Column %d of j is a named vector (each item down the rows is named, " +"somehow). Please remove those names for efficiency (to save creating them " +"over and over for each group). They are ignored anyway.\n" +msgstr "" + +#: dogroups.c:373 +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 " +"detected, removed and put back after grouping has completed, for efficiency. " +"Using j=transform(), for example, prevents that speedup (consider changing " +"to :=). This message may be upgraded to warning in future.\n" +msgstr "" + +#: dogroups.c:385 +#, c-format +msgid "dogroups: growing from %d to %d rows\n" +msgstr "" + +#: dogroups.c:386 +#, c-format +msgid "dogroups: length(ans)[%d]!=ngrpcols[%d]+njval[%d]" +msgstr "" + +#: dogroups.c:419 +#, c-format +msgid "" +"Item %d of j's result for group %d is zero length. This will be filled with " +"%d NAs to match the longest column in this result. Later groups may have a " +"similar problem but only the first is reported to save filling the warning " +"buffer." +msgstr "" + +#: dogroups.c:426 +#, 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:428 +#, c-format +msgid "" +"Supplied %d items for column %d of group %d which has %d rows. The RHS " +"length must either be 1 (single values are ok) or match the LHS length " +"exactly. If you wish to 'recycle' the RHS please use rep() explicitly to " +"make this intent clear to readers of your code." +msgstr "" + +#: dogroups.c:443 +#, c-format +msgid "Wrote less rows (%d) than allocated (%d).\n" +msgstr "" + +#: dogroups.c:453 +#, c-format +msgid "Internal error: block 0 [%d] and block 1 [%d] have both run" +msgstr "" + +#: dogroups.c:455 +#, c-format +msgid "" +"\n" +" %s took %.3fs for %d groups\n" +msgstr "" + +#: dogroups.c:457 +#, c-format +msgid " eval(j) took %.3fs for %d calls\n" +msgstr "" + +#: dogroups.c:481 +msgid "growVector passed NULL" +msgstr "" + +#: fastmean.c:39 +msgid "narm should be TRUE or FALSE" +msgstr "" + +#: fastmean.c:45 +#, c-format +msgid "fastmean was passed type %s, not numeric or logical" +msgstr "" + +#: fastmean.c:83 fastmean.c:111 +#, c-format +msgid "Internal error: type '%s' not caught earlier in fastmean" +msgstr "" + +#: fcast.c:80 +#, c-format +msgid "Unsupported column type in fcast val: '%s'" +msgstr "" + +#: fifelse.c:5 +msgid "Argument 'test' must be logical." +msgstr "" + +#: fifelse.c:23 +#, 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 +msgid "" +"'yes' has different class than 'no'. Please make sure that both arguments " +"have the same class." +msgstr "" + +#: fifelse.c:33 +msgid "'yes' and 'no' are both type factor but their levels are different." +msgstr "" + +#: fifelse.c:38 +#, c-format +msgid "Length of 'yes' is %lld but must be 1 or length of 'test' (%lld)." +msgstr "" + +#: fifelse.c:40 +#, c-format +msgid "Length of 'no' is %lld but must be 1 or length of 'test' (%lld)." +msgstr "" + +#: fifelse.c:51 +#, c-format +msgid "Length of 'na' is %lld but must be 1" +msgstr "" + +#: fifelse.c:57 +#, 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 +msgid "" +"'yes' has different class than 'na'. Please make sure that both arguments " +"have the same class." +msgstr "" + +#: fifelse.c:63 +msgid "'yes' and 'na' are both type factor but their levels are different." +msgstr "" + +#: fifelse.c:133 +#, c-format +msgid "Type %s is not supported." +msgstr "" + +#: fmelt.c:18 +msgid "'x' must be an integer" +msgstr "" + +#: fmelt.c:19 +msgid "'n' must be a positive integer" +msgstr "" + +#: fmelt.c:41 +msgid "Argument to 'which' must be logical" +msgstr "" + +#: fmelt.c:70 +msgid "concat: 'vec must be a character vector" +msgstr "" + +#: fmelt.c:71 +msgid "concat: 'idx' must be an integer vector of length >= 0" +msgstr "" + +#: fmelt.c:75 +msgid "" +"concat: 'idx' must take values between 0 and length(vec); 0 <= idx <= " +"length(vec)" +msgstr "" + +#: fmelt.c:102 +#, c-format +msgid "Unknown 'measure.vars' type %s at index %d of list" +msgstr "" + +#: fmelt.c:148 +#, c-format +msgid "" +"id.vars and measure.vars are internally guessed when both are 'NULL'. All " +"non-numeric/integer/logical type columns are considered id.vars, which in " +"this case are columns [%s]. Consider providing at least one of 'id' or " +"'measure' vars in future." +msgstr "" + +#: fmelt.c:154 fmelt.c:219 +#, c-format +msgid "Unknown 'id.vars' type %s, must be character or integer vector" +msgstr "" + +#: fmelt.c:159 fmelt.c:223 +msgid "One or more values in 'id.vars' is invalid." +msgstr "" + +#: fmelt.c:175 +msgid "" +"'measure.vars' is missing. Assigning all columns other than 'id.vars' " +"columns as 'measure.vars'.\n" +msgstr "" + +#: fmelt.c:176 +#, c-format +msgid "Assigned 'measure.vars' are [%s].\n" +msgstr "" + +#: fmelt.c:184 +#, c-format +msgid "" +"Unknown 'measure.vars' type %s, must be character or integer vector/list" +msgstr "" + +#: fmelt.c:193 fmelt.c:239 +msgid "One or more values in 'measure.vars' is invalid." +msgstr "" + +#: fmelt.c:211 +msgid "" +"'id.vars' is missing. Assigning all columns other than 'measure.vars' " +"columns as 'id.vars'.\n" +msgstr "" + +#: fmelt.c:212 +#, c-format +msgid "Assigned 'id.vars' are [%s].\n" +msgstr "" + +#: fmelt.c:231 +#, c-format +msgid "Unknown 'measure.vars' type %s, must be character or integer vector" +msgstr "" + +#: fmelt.c:276 +msgid "" +"When 'measure.vars' is a list, 'value.name' must be a character vector of " +"length =1 or =length(measure.vars)." +msgstr "" + +#: fmelt.c:277 +msgid "" +"When 'measure.vars' is either not specified or a character/integer vector, " +"'value.name' must be a character vector of length =1." +msgstr "" + +#: fmelt.c:280 +msgid "'variable.name' must be a character/integer vector of length=1." +msgstr "" + +#: fmelt.c:329 +msgid "" +"Internal error: combineFactorLevels in fmelt.c expects all-character input" +msgstr "" + +#: fmelt.c:332 +msgid "" +"Internal error: combineFactorLevels in fmelt.c expects a character target to " +"factorize" +msgstr "" + +#: fmelt.c:385 +#, c-format +msgid "" +"'measure.vars' [%s] are not all of the same type. By order of hierarchy, the " +"molten data value column will be of type '%s'. All measure variables not of " +"type '%s' will be coerced too. Check DETAILS in ?melt.data.table for more on " +"coercion.\n" +msgstr "" + +#: fmelt.c:387 +#, c-format +msgid "" +"The molten data value type is a list at item %d. 'na.rm=TRUE' is ignored.\n" +msgstr "" + +#: fmelt.c:490 +#, c-format +msgid "Unknown column type '%s' for column '%s'." +msgstr "" + +#: fmelt.c:514 +#, c-format +msgid "Internal error: fmelt.c:getvarcols %d %d" +msgstr "" + +#: fmelt.c:662 +#, c-format +msgid "Unknown column type '%s' for column '%s' in 'data'" +msgstr "" + +#: fmelt.c:673 +msgid "Input is not of type VECSXP, expected a data.table, data.frame or list" +msgstr "" + +#: fmelt.c:674 +msgid "Argument 'value.factor' should be logical TRUE/FALSE" +msgstr "" + +#: fmelt.c:675 +msgid "Argument 'variable.factor' should be logical TRUE/FALSE" +msgstr "" + +#: fmelt.c:676 +msgid "Argument 'na.rm' should be logical TRUE/FALSE." +msgstr "" + +#: fmelt.c:677 +msgid "Argument 'variable.name' must be a character vector" +msgstr "" + +#: fmelt.c:678 +msgid "Argument 'value.name' must be a character vector" +msgstr "" + +#: fmelt.c:679 +msgid "Argument 'verbose' should be logical TRUE/FALSE" +msgstr "" + +#: fmelt.c:682 +msgid "ncol(data) is 0. Nothing to melt. Returning original data.table." +msgstr "" + +#: fmelt.c:687 +msgid "names(data) is NULL. Please report to data.table-help" +msgstr "" + +#: forder.c:103 +#, c-format +msgid "Failed to realloc thread private group size buffer to %d*4bytes" +msgstr "" + +#: forder.c:117 +#, c-format +msgid "Failed to realloc group size result to %d*4bytes" +msgstr "" + +#: forder.c:260 +#, c-format +msgid "" +"Logical error. counts[0]=%d in cradix but should have been decremented to 0. " +"radix=%d" +msgstr "" + +#: forder.c:275 +msgid "Failed to alloc cradix_counts" +msgstr "" + +#: forder.c:277 +msgid "Failed to alloc cradix_tmp" +msgstr "" + +#: forder.c:288 +#, c-format +msgid "" +"Internal error: ustr isn't empty when starting range_str: ustr_n=%d, " +"ustr_alloc=%d" +msgstr "" + +#: forder.c:289 +msgid "Internal error: ustr_maxlen isn't 0 when starting range_str" +msgstr "" + +#: forder.c:309 +#, c-format +msgid "Unable to realloc %d * %d bytes in range_str" +msgstr "" + +#: forder.c:327 +msgid "Failed to alloc ustr3 when converting strings to UTF8" +msgstr "" + +#: forder.c:345 +msgid "Failed to alloc tl when converting strings to UTF8" +msgstr "" + +#: forder.c:374 +msgid "Must an integer or numeric vector length 1" +msgstr "" + +#: forder.c:375 +msgid "Must be 2, 1 or 0" +msgstr "" + +#: forder.c:409 +msgid "Unknown non-finite value; not NA, NaN, -Inf or +Inf" +msgstr "" + +#: forder.c:431 +msgid "" +"Internal error: input is not either a list of columns, or an atomic vector." +msgstr "" + +#: forder.c:433 +msgid "" +"Internal error: input is an atomic vector (not a list of columns) but by= is " +"not NULL" +msgstr "" + +#: forder.c:435 +msgid "" +"Input is an atomic vector (not a list of columns) but order= is not a length " +"1 integer" +msgstr "" + +#: forder.c:437 +#, c-format +msgid "forder.c received a vector type '%s' length %d\n" +msgstr "" + +#: forder.c:445 +#, c-format +msgid "forder.c received %d rows and %d columns\n" +msgstr "" + +#: forder.c:448 +msgid "Internal error: DT is an empty list() of 0 columns" +msgstr "" + +#: forder.c:450 +#, c-format +msgid "" +"Internal error: DT has %d columns but 'by' is either not integer or is " +"length 0" +msgstr "" + +#: forder.c:452 +#, c-format +msgid "" +"Either order= is not integer or its length (%d) is different to by='s length " +"(%d)" +msgstr "" + +#: forder.c:458 +#, c-format +msgid "internal error: 'by' value %d out of range [1,%d]" +msgstr "" + +#: forder.c:460 +#, c-format +msgid "Column %d is length %d which differs from length of column 1 (%d)\n" +msgstr "" + +#: forder.c:464 +msgid "retGrp must be TRUE or FALSE" +msgstr "" + +#: forder.c:467 +msgid "sort must be TRUE or FALSE" +msgstr "" + +#: forder.c:470 +msgid "At least one of retGrp= or sort= must be TRUE" +msgstr "" + +#: forder.c:472 +msgid "na.last must be logical TRUE, FALSE or NA of length 1" +msgstr "" + +#: forder.c:514 +#, c-format +msgid "Item %d of order (ascending/descending) is %d. Must be +1 or -1." +msgstr "" + +#: forder.c:540 +#, c-format +msgid "" +"\n" +"*** Column %d passed to forder is a date stored as an 8 byte double but no " +"fractions are present. Please consider a 4 byte integer date such as IDate " +"to save space and time.\n" +msgstr "" + +#: forder.c:556 +#, c-format +msgid "Column %d passed to [f]order is type '%s', not yet supported." +msgstr "" + +#: forder.c:705 +msgid "Internal error: column not supported not caught earlier" +msgstr "" + +#: forder.c:713 +#, c-format +msgid "nradix=%d\n" +msgstr "" + +#: forder.c:719 +#, c-format +msgid "" +"Failed to allocate TMP or UGRP or they weren't cache line aligned: nth=%d" +msgstr "" + +#: forder.c:724 +msgid "Could not allocate (very tiny) group size thread buffers" +msgstr "" + +#: forder.c:785 +#, c-format +msgid "Timing block %2d%s = %8.3f %8d\n" +msgstr "" + +#: forder.c:788 +#, c-format +msgid "stat[%03d]==%10zd\n" +msgstr "" + +#: forder.c:1044 +#, c-format +msgid "Failed to allocate parallel counts. my_n=%d, nBatch=%d" +msgstr "" + +#: forder.c:1153 +#, c-format +msgid "Unable to allocate TMP for my_n=%d items in parallel batch counting" +msgstr "" + +#: forder.c:1260 +msgid "" +"is.sorted (R level) and fsorted (C level) only to be used on vectors. If " +"needed on a list/data.table, you'll need the order anyway if not sorted, so " +"use if (length(o<-forder(...))) for efficiency in one step, or equivalent at " +"C level" +msgstr "" + +#: forder.c:1292 +#, c-format +msgid "type '%s' is not yet supported" +msgstr "" + +#: forder.c:1301 +msgid "x must be either NULL or an integer vector" +msgstr "" + +#: forder.c:1303 +msgid "nrow must be integer vector length 1" +msgstr "" + +#: forder.c:1305 +#, c-format +msgid "nrow==%d but must be >=0" +msgstr "" + +#: forder.c:1322 +msgid "x must be type 'double'" +msgstr "" + +#: frank.c:11 +#, c-format +msgid "Internal error. Argument 'x' to Cdt_na is type '%s' not 'list'" +msgstr "" + +#: frank.c:12 +#, 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 +#, 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 +#, 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 +#, c-format +msgid "Unsupported column type '%s'" +msgstr "" + +#: frank.c:83 +msgid "" +"Internal error: invalid ties.method for frankv(), should have been caught " +"before. please report to data.table issue tracker" +msgstr "" + +#: frank.c:130 +#, c-format +msgid "Internal error: unknown ties value in frank: %d" +msgstr "" + +#: frank.c:141 +#, c-format +msgid "Internal error. Argument 'x' to CanyNA is type '%s' not 'list'" +msgstr "" + +#: frank.c:142 +#, c-format +msgid "Internal error. Argument 'cols' to CanyNA is type '%s' not 'integer'" +msgstr "" + +#: fread.c:106 +#, c-format +msgid "" +"Internal error in line %d of fread.c, please report on data.table GitHub: " +msgstr "" + +#: fread.c:149 +#, c-format +msgid "System error %d unmapping view of file\n" +msgstr "" + +#: fread.c:152 +#, c-format +msgid "System errno %d unmapping file: %s\n" +msgstr "" + +#: fread.c:212 +#, c-format +msgid "Internal error: NUMTYPE(%d) > nLetters(%d)" +msgstr "" + +#: fread.c:437 +#, c-format +msgid "Unable to allocate %s of contiguous virtual RAM. %s allocation." +msgstr "" + +#: fread.c:442 +#, c-format +msgid "Avoidable %.3f seconds. %s time to copy.\n" +msgstr "" + +#: fread.c:443 +#, c-format +msgid " File copy in RAM took %.3f seconds.\n" +msgstr "" + +#: fread.c:1095 +msgid "" +"Previous fread() session was not cleaned up properly. Cleaned up ok at the " +"beginning of this fread() call.\n" +msgstr "" + +#: fread.c:1098 +msgid "[01] Check arguments\n" +msgstr "" + +#: fread.c:1105 +#, c-format +msgid " Using %d threads (omp_get_max_threads()=%d, nth=%d)\n" +msgstr "" + +#: fread.c:1113 +msgid "" +"Internal error: NAstrings is itself NULL. When empty it should be pointer to " +"NULL." +msgstr "" + +#: fread.c:1131 +#, c-format +msgid "freadMain: NAstring <<%s>> has whitespace at the beginning or end" +msgstr "" + +#: fread.c:1136 +#, c-format +msgid "" +"freadMain: NAstring <<%s>> is recognized as type boolean, this is not " +"permitted." +msgstr "" + +#: fread.c:1146 +msgid " No NAstrings provided.\n" +msgstr "" + +#: fread.c:1148 +msgid " NAstrings = [" +msgstr "" + +#: fread.c:1151 +msgid "]\n" +msgstr "" + +#: fread.c:1153 +msgid " One or more of the NAstrings looks like a number.\n" +msgstr "" + +#: fread.c:1155 +msgid " None of the NAstrings look like numbers.\n" +msgstr "" + +#: fread.c:1157 +#, c-format +msgid " skip num lines = %llu\n" +msgstr "" + +#: fread.c:1158 +#, c-format +msgid " skip to string = <<%s>>\n" +msgstr "" + +#: fread.c:1159 +#, c-format +msgid " show progress = %d\n" +msgstr "" + +#: fread.c:1160 +#, c-format +msgid " 0/1 column will be read as %s\n" +msgstr "" + +#: fread.c:1168 +#, c-format +msgid "sep == quote ('%c') is not allowed" +msgstr "" + +#: fread.c:1169 +msgid "dec='' not allowed. Should be '.' or ','" +msgstr "" + +#: fread.c:1170 +#, c-format +msgid "sep == dec ('%c') is not allowed" +msgstr "" + +#: fread.c:1171 +#, c-format +msgid "quote == dec ('%c') is not allowed" +msgstr "" + +#: fread.c:1188 +msgid "[02] Opening the file\n" +msgstr "" + +#: fread.c:1191 +msgid "" +" `input` argument is provided rather than a file name, interpreting as raw " +"text to read\n" +msgstr "" + +#: fread.c:1195 +msgid "Internal error: last byte of character input isn't \\0" +msgstr "" + +#: fread.c:1198 +#, c-format +msgid " Opening file %s\n" +msgstr "" + +#: fread.c:1202 +#, c-format +msgid "file not found: %s" +msgstr "" + +#: fread.c:1206 +#, c-format +msgid "Opened file ok but couldn't obtain its size: %s" +msgstr "" + +#: fread.c:1209 fread.c:1237 +#, c-format +msgid "File is empty: %s" +msgstr "" + +#: fread.c:1210 fread.c:1238 +#, c-format +msgid " File opened, size = %s.\n" +msgstr "" + +#: fread.c:1227 +#, c-format +msgid "File not found: %s" +msgstr "" + +#: fread.c:1233 +#, c-format +msgid "Unable to open file after %d attempts (error %d): %s" +msgstr "" + +#: fread.c:1235 +#, c-format +msgid "GetFileSizeEx failed (returned 0) on file: %s" +msgstr "" + +#: fread.c:1240 +#, c-format +msgid "This is Windows, CreateFileMapping returned error %d for file %s" +msgstr "" + +#: fread.c:1247 +#, c-format +msgid "" +"Opened %s file ok but could not memory map it. This is a %dbit process. %s." +msgstr "" + +#: fread.c:1248 +msgid "Please upgrade to 64bit" +msgstr "" + +#: fread.c:1248 +msgid "There is probably not enough contiguous virtual memory available" +msgstr "" + +#: fread.c:1251 +msgid " Memory mapped ok\n" +msgstr "" + +#: fread.c:1253 +msgid "" +"Internal error: Neither `input` nor `filename` are given, nothing to read." +msgstr "" + +#: fread.c:1270 +msgid "[03] Detect and skip BOM\n" +msgstr "" + +#: fread.c:1274 +msgid "" +" UTF-8 byte order mark EF BB BF found at the start of the file and " +"skipped.\n" +msgstr "" + +#: fread.c:1279 +msgid "" +"GB-18030 encoding detected, however fread() is unable to decode it. Some " +"character fields may be garbled.\n" +msgstr "" + +#: fread.c:1282 +msgid "" +"File is encoded in UTF-16, this encoding is not supported by fread(). Please " +"recode the file to UTF-8." +msgstr "" + +#: fread.c:1287 +#, c-format +msgid " Last byte(s) of input found to be %s and removed.\n" +msgstr "" + +#: fread.c:1290 +msgid "Input is empty or only contains BOM or terminal control characters" +msgstr "" + +#: fread.c:1297 +msgid "[04] Arrange mmap to be \\0 terminated\n" +msgstr "" + +#: fread.c:1304 +msgid "" +" No \\n exists in the file at all, so single \\r (if any) will be taken as " +"one line ending. This is unusual but will happen normally when there is no " +"\\r either; e.g. a single line missing its end of line.\n" +msgstr "" + +#: fread.c:1305 +msgid "" +" \\n has been found in the input and different lines can end with different " +"line endings (e.g. mixed \\n and \\r\\n in one file). This is common and " +"ideal.\n" +msgstr "" + +#: fread.c:1329 +#, c-format +msgid "" +" File ends abruptly with '%c'. Final end-of-line is missing. Using cow page " +"to write 0 to the last byte.\n" +msgstr "" + +#: fread.c:1336 +#, c-format +msgid " File ends abruptly with '%c'. Copying file in RAM. %s copy.\n" +msgstr "" + +#: fread.c:1370 +msgid "[05] Skipping initial rows if needed\n" +msgstr "" + +#: fread.c:1376 +#, c-format +msgid "" +"skip='%s' not found in input (it is case sensitive and literal; i.e., no " +"patterns, wildcards or regex)" +msgstr "" + +#: fread.c:1382 +#, c-format +msgid "" +"Found skip='%s' on line %llu. Taking this to be header row or first row of " +"data.\n" +msgstr "" + +#: fread.c:1395 +#, c-format +msgid " Skipped to line %llu in the file" +msgstr "" + +#: fread.c:1396 +#, c-format +msgid "skip=%llu but the input only has %llu line%s" +msgstr "" + +#: fread.c:1405 +msgid "" +"Input is either empty, fully whitespace, or skip has been set after the last " +"non-whitespace." +msgstr "" + +#: fread.c:1407 +#, c-format +msgid " Moved forward to first non-blank line (%d)\n" +msgstr "" + +#: fread.c:1408 +#, c-format +msgid " Positioned on line %d starting: <<%s>>\n" +msgstr "" + +#: fread.c:1426 +msgid "[06] Detect separator, quoting rule, and ncolumns\n" +msgstr "" + +#: fread.c:1430 +msgid " sep='\\n' passed in meaning read lines as single character column\n" +msgstr "" + +#: fread.c:1449 +msgid " Detecting sep automatically ...\n" +msgstr "" + +#: fread.c:1456 +#, c-format +msgid " Using supplied sep '%s'\n" +msgstr "" + +#: fread.c:1490 +#, c-format +msgid " with %d fields using quote rule %d\n" +msgstr "" + +#: fread.c:1540 +#, c-format +msgid " with %d lines of %d fields using quote rule %d\n" +msgstr "" + +#: fread.c:1547 +msgid "" +" No sep and quote rule found a block of 2x2 or greater. Single column " +"input.\n" +msgstr "" + +#: fread.c:1563 +msgid "" +"Single column input contains invalid quotes. Self healing only effective " +"when ncol>1" +msgstr "" + +#: fread.c:1568 +#, c-format +msgid "" +"Found and resolved improper quoting in first %d rows. If the fields are not " +"quoted (e.g. field separator does not appear within any field), try quote=" +"\")\" to avoid this warning." +msgstr "" + +#: fread.c:1584 +#, c-format +msgid "" +"Internal error: ncol==%d line==%d after detecting sep, ncol and first line" +msgstr "" + +#: fread.c:1587 +#, c-format +msgid "Internal error: first line has field count %d but expecting %d" +msgstr "" + +#: fread.c:1589 +#, c-format +msgid "" +" Detected %d columns on line %d. This line is either column names or first " +"data row. Line starts as: <<%s>>\n" +msgstr "" + +#: fread.c:1591 +#, c-format +msgid " Quote rule picked = %d\n" +msgstr "" + +#: fread.c:1592 +#, c-format +msgid " fill=%s and the most number of columns found is %d\n" +msgstr "" + +#: fread.c:1598 +msgid "" +"This file is very unusual: it's one single column, ends with 2 or more end-" +"of-line (representing several NA at the end), and is a multiple of 4096, too." +msgstr "" + +#: fread.c:1599 +#, c-format +msgid " Copying file in RAM. %s\n" +msgstr "" + +#: fread.c:1605 +msgid "" +" 1-column file ends with 2 or more end-of-line. Restoring last eol using " +"extra byte in cow page.\n" +msgstr "" + +#: fread.c:1624 +msgid "" +"[07] Detect column types, good nrow estimate and whether first row is column " +"names\n" +msgstr "" + +#: fread.c:1625 +#, c-format +msgid " 'header' changed by user from 'auto' to %s\n" +msgstr "" + +#: fread.c:1629 +#, c-format +msgid "Failed to allocate 2 x %d bytes for type and tmpType: %s" +msgstr "" + +#: fread.c:1650 +#, c-format +msgid " Number of sampling jump points = %d because " +msgstr "" + +#: fread.c:1651 +#, c-format +msgid "nrow limit (%llu) supplied\n" +msgstr "" + +#: fread.c:1652 +msgid "jump0size==0\n" +msgstr "" + +#: fread.c:1653 +#, c-format +msgid "(%llu bytes from row 1 to eof) / (2 * %llu jump0size) == %llu\n" +msgstr "" + +#: fread.c:1691 +#, c-format +msgid "" +" A line with too-%s fields (%d/%d) was found on line %d of sample jump %d. " +"%s\n" +msgstr "" + +#: fread.c:1718 +#, c-format +msgid " Type codes (jump %03d) : %s Quote rule %d\n" +msgstr "" + +#: fread.c:1731 +#, c-format +msgid "" +" 'header' determined to be true due to column %d containing a string on row " +"1 and a lower type (%s) in the rest of the %d sample rows\n" +msgstr "" + +#: fread.c:1743 +msgid "" +"Internal error: row before first data row has the same number of fields but " +"we're not using it." +msgstr "" + +#: fread.c:1744 +msgid "" +"Internal error: ch!=pos after counting fields in the line before the first " +"data row." +msgstr "" + +#: fread.c:1745 +#, c-format +msgid "" +"Types in 1st data row match types in 2nd data row but previous row has %d " +"fields. Taking previous row as column names." +msgstr "" + +#: fread.c:1748 +#, c-format +msgid "" +"Detected %d column names but the data has %d columns (i.e. invalid file). " +"Added %d extra default column name%s\n" +msgstr "" + +#: fread.c:1751 +msgid "" +"Internal error: fill=true but there is a previous row which should already " +"have been filled." +msgstr "" + +#: fread.c:1752 +#, c-format +msgid "" +"Detected %d column names but the data has %d columns. Filling rows " +"automatically. Set fill=TRUE explicitly to avoid this warning.\n" +msgstr "" + +#: fread.c:1756 +#, c-format +msgid "Failed to realloc 2 x %d bytes for type and tmpType: %s" +msgstr "" + +#: fread.c:1776 +#, c-format +msgid "" +" 'header' determined to be %s because there are%s number fields in the " +"first and only row\n" +msgstr "" + +#: fread.c:1779 +msgid "" +" 'header' determined to be true because all columns are type string and a " +"better guess is not possible\n" +msgstr "" + +#: fread.c:1781 +msgid "" +" 'header' determined to be false because there are some number columns and " +"those columns do not have a string field at the top of them\n" +msgstr "" + +#: fread.c:1797 +#, c-format +msgid " Type codes (first row) : %s Quote rule %d\n" +msgstr "" + +#: fread.c:1806 +#, c-format +msgid "" +" All rows were sampled since file is small so we know nrow=%llu exactly\n" +msgstr "" + +#: fread.c:1818 fread.c:1825 +msgid " =====\n" +msgstr "" + +#: fread.c:1819 +#, c-format +msgid "" +" Sampled %llu rows (handled \\n inside quoted fields) at %d jump points\n" +msgstr "" + +#: fread.c:1820 +#, c-format +msgid " Bytes from first data row on line %d to the end of last row: %llu\n" +msgstr "" + +#: fread.c:1821 +#, c-format +msgid " Line length: mean=%.2f sd=%.2f min=%d max=%d\n" +msgstr "" + +#: fread.c:1822 +#, c-format +msgid " Estimated number of rows: %llu / %.2f = %llu\n" +msgstr "" + +#: fread.c:1823 +#, c-format +msgid "" +" Initial alloc = %llu rows (%llu + %d%%) using bytes/max(mean-2*sd,min) " +"clamped between [1.1*estn, 2.0*estn]\n" +msgstr "" + +#: fread.c:1827 +#, c-format +msgid "Internal error: sampleLines(%llu) > allocnrow(%llu)" +msgstr "" + +#: fread.c:1831 +#, c-format +msgid " Alloc limited to lower nrows=%llu passed in.\n" +msgstr "" + +#: fread.c:1843 +msgid "[08] Assign column names\n" +msgstr "" + +#: fread.c:1851 +#, c-format +msgid "Unable to allocate %d*%d bytes for column name pointers: %s" +msgstr "" + +#: fread.c:1873 +#, c-format +msgid "Internal error: reading colnames ending on '%c'" +msgstr "" + +#: fread.c:1891 +msgid "[09] Apply user overrides on column types\n" +msgstr "" + +#: fread.c:1895 +msgid " Cancelled by user: userOverride() returned false." +msgstr "" + +#: fread.c:1905 +#, c-format +msgid "Failed to allocate %d bytes for size array: %s" +msgstr "" + +#: fread.c:1912 +#, c-format +msgid "" +"Attempt to override column %d <<%.*s>> of inherent type '%s' down to '%s' " +"ignored. Only overrides to a higher type are currently supported. If this " +"was intended, please coerce to the lower type afterwards." +msgstr "" + +#: fread.c:1926 +#, c-format +msgid " After %d type and %d drop user overrides : %s\n" +msgstr "" + +#: fread.c:1934 +msgid "[10] Allocate memory for the datatable\n" +msgstr "" + +#: fread.c:1935 +#, c-format +msgid " Allocating %d column slots (%d - %d dropped) with %llu rows\n" +msgstr "" + +#: fread.c:1989 +#, c-format +msgid "Buffer size %lld is too large\n" +msgstr "" + +#: fread.c:1992 +msgid "[11] Read the data\n" +msgstr "" + +#: fread.c:1995 +#, c-format +msgid " jumps=[%d..%d), chunk_size=%llu, total_size=%llu\n" +msgstr "" + +#: fread.c:2215 +#, c-format +msgid "" +"Column %d (\"%.*s\") bumped from '%s' to '%s' due to <<%.*s>> on row %llu\n" +msgstr "" + +#: fread.c:2330 fread.c:2465 freadR.c:660 +#, c-format +msgid "%s" +msgstr "" + +#: fread.c:2337 +#, c-format +msgid "" +" Too few rows allocated. Allocating additional %llu rows (now nrows=%llu) " +"and continue reading from jump %d\n" +msgstr "" + +#: fread.c:2344 +#, c-format +msgid " Restarting team from jump %d. nSwept==%d quoteRule==%d\n" +msgstr "" + +#: fread.c:2364 +#, c-format +msgid " %d out-of-sample type bumps: %s\n" +msgstr "" + +#: fread.c:2400 +#, c-format +msgid "" +"Read %llu rows x %d columns from %s file in %02d:%06.3f wall clock time\n" +msgstr "" + +#: fread.c:2407 +msgid "[12] Finalizing the datatable\n" +msgstr "" + +#: fread.c:2408 +msgid " Type counts:\n" +msgstr "" + +#: fread.c:2410 +#, c-format +msgid "%10d : %-9s '%c'\n" +msgstr "" + +#: fread.c:2426 +#, c-format +msgid "Discarded single-line footer: <<%s>>" +msgstr "" + +#: fread.c:2431 +#, c-format +msgid "" +"Stopped early on line %llu. Expected %d fields but found %d. Consider " +"fill=TRUE and comment.char=. First discarded non-empty line: <<%s>>" +msgstr "" + +#: fread.c:2437 +#, c-format +msgid "" +"Found and resolved improper quoting out-of-sample. First healed line %llu: <<" +"%s>>. If the fields are not quoted (e.g. field separator does not appear " +"within any field), try quote=\")\" to avoid this warning." +msgstr "" + +#: fread.c:2441 +msgid "=============================\n" +msgstr "" + +#: fread.c:2443 +#, c-format +msgid "%8.3fs (%3.0f%%) Memory map %.3fGB file\n" +msgstr "" + +#: fread.c:2444 +#, c-format +msgid "%8.3fs (%3.0f%%) sep=" +msgstr "" + +#: fread.c:2446 +#, c-format +msgid " ncol=%d and header detection\n" +msgstr "" + +#: fread.c:2447 +#, c-format +msgid "%8.3fs (%3.0f%%) Column type detection using %llu sample rows\n" +msgstr "" + +#: fread.c:2449 +#, c-format +msgid "" +"%8.3fs (%3.0f%%) Allocation of %llu rows x %d cols (%.3fGB) of which %llu " +"(%3.0f%%) rows used\n" +msgstr "" + +#: fread.c:2453 +#, c-format +msgid "" +"%8.3fs (%3.0f%%) Reading %d chunks (%d swept) of %.3fMB (each chunk %d rows) " +"using %d threads\n" +msgstr "" + +#: fread.c:2455 +#, c-format +msgid "" +" + %8.3fs (%3.0f%%) Parse to row-major thread buffers (grown %d times)\n" +msgstr "" + +#: fread.c:2456 +#, c-format +msgid " + %8.3fs (%3.0f%%) Transpose\n" +msgstr "" + +#: fread.c:2457 +#, c-format +msgid " + %8.3fs (%3.0f%%) Waiting\n" +msgstr "" + +#: fread.c:2458 +#, c-format +msgid "" +"%8.3fs (%3.0f%%) Rereading %d columns due to out-of-sample type exceptions\n" +msgstr "" + +#: fread.c:2460 +#, c-format +msgid "%8.3fs Total\n" +msgstr "" + +#: freadR.c:84 +msgid "" +"Internal error: freadR input not a single character string: a filename or " +"the data itself. Should have been caught at R level." +msgstr "" + +#: freadR.c:92 +msgid "" +"Input contains a \\n or is \")\". Taking this to be text input (not a " +"filename)\n" +msgstr "" + +#: freadR.c:95 +msgid "Input contains no \\n. Taking this to be a filename to open\n" +msgstr "" + +#: freadR.c:101 +msgid "" +"Internal error: freadR sep not a single character. R level catches this." +msgstr "" + +#: freadR.c:105 +msgid "" +"Internal error: freadR dec not a single character. R level catches this." +msgstr "" + +#: freadR.c:112 +msgid "quote= must be a single character, blank \")\", or FALSE" +msgstr "" + +#: freadR.c:137 +msgid "Internal error: skip not integer or string in freadR.c" +msgstr "" + +#: freadR.c:140 +#, c-format +msgid "Internal error: NAstringsArg is type '%s'. R level catches this" +msgstr "" + +#: freadR.c:153 +#, c-format +msgid "nThread(%d)<1" +msgstr "" + +#: freadR.c:160 +msgid "'integer64' must be a single character string" +msgstr "" + +#: freadR.c:168 +#, c-format +msgid "" +"Invalid value integer64='%s'. Must be 'integer64', 'character', 'double' or " +"'numeric'" +msgstr "" + +#: freadR.c:176 +msgid "Use either select= or drop= but not both." +msgstr "" + +#: freadR.c:179 +msgid "" +"select= is type list for specifying types in select=, but colClasses= has " +"been provided as well. Please remove colClasses=." +msgstr "" + +#: freadR.c:181 +msgid "" +"select= is type list but has no names; expecting list(type1=cols1, " +"type2=cols2, ...)" +msgstr "" + +#: freadR.c:188 +msgid "" +"select= is a named vector specifying the columns to select and their types, " +"but colClasses= has been provided as well. Please remove colClasses=." +msgstr "" + +#: freadR.c:196 freadR.c:346 +msgid "colClasses is type list but has no names" +msgstr "" + +#: freadR.c:206 +#, c-format +msgid "encoding='%s' invalid. Must be 'unknown', 'Latin-1' or 'UTF-8'" +msgstr "" + +#: freadR.c:229 +#, c-format +msgid "Column name '%s' (%s) not found" +msgstr "" + +#: freadR.c:231 +#, c-format +msgid "%s is NA" +msgstr "" + +#: freadR.c:233 +#, c-format +msgid "%s is %d which is out of range [1,ncol=%d]" +msgstr "" + +#: freadR.c:247 +msgid "Internal error: typeSize[CT_BOOL8_N] != 1" +msgstr "" + +#: freadR.c:248 +msgid "Internal error: typeSize[CT_STRING] != 1" +msgstr "" + +#: freadR.c:282 +#, c-format +msgid "" +"Column name '%s' not found in column name header (case sensitive), skipping." +msgstr "" + +#: freadR.c:292 +#, c-format +msgid "" +"Column number %d (select[%d]) is negative but should be in the range [1,ncol=" +"%d]. Consider drop= for column exclusion." +msgstr "" + +#: freadR.c:293 +#, c-format +msgid "" +"select = 0 (select[%d]) has no meaning. All values of select should be in " +"the range [1,ncol=%d]." +msgstr "" + +#: freadR.c:294 +#, c-format +msgid "" +"Column number %d (select[%d]) is too large for this table, which only has %d " +"columns." +msgstr "" + +#: freadR.c:295 +#, c-format +msgid "Column number %d ('%s') has been selected twice by select=" +msgstr "" + +#: freadR.c:313 +msgid "" +"colClasses='NULL' is not permitted; i.e. to drop all columns and load nothing" +msgstr "" + +#: freadR.c:318 +#, c-format +msgid "" +"colClasses= is an unnamed vector of types, length %d, but there are %d " +"columns in the input. To specify types for a subset of columns, you can use " +msgstr "" + +#: freadR.c:319 +msgid "" +"a named vector, list format, or specify types using select= instead of " +"colClasses=. Please see examples in ?fread." +msgstr "" + +#: freadR.c:329 +msgid "Internal error: selectInts is NULL but selectColClasses is true" +msgstr "" + +#: freadR.c:330 +msgid "" +"Internal error: length(selectSxp)!=length(colClassesSxp) but " +"selectColClasses is true" +msgstr "" + +#: freadR.c:344 +#, c-format +msgid "colClasses is type '%s' but should be list or character" +msgstr "" + +#: freadR.c:368 +#, c-format +msgid "Column name '%s' (colClasses[[%d]][%d]) not found" +msgstr "" + +#: freadR.c:370 +#, c-format +msgid "colClasses[[%d]][%d] is NA" +msgstr "" + +#: freadR.c:374 +#, c-format +msgid "" +"Column %d ('%s') appears more than once in colClasses. The second time is " +"colClasses[[%d]][%d]." +msgstr "" + +#: freadR.c:381 +#, c-format +msgid "Column number %d (colClasses[[%d]][%d]) is out of range [1,ncol=%d]" +msgstr "" + +#: freadR.c:583 +#, c-format +msgid "Field size is 1 but the field is of type %d\n" +msgstr "" + +#: freadR.c:592 +#, c-format +msgid "Internal error: unexpected field of size %d\n" +msgstr "" + +#: froll.c:18 froll.c:227 froll.c:411 +#, c-format +msgid "%s: window width longer than input vector, returning all NA vector\n" +msgstr "" + +#: froll.c:36 froll.c:244 froll.c:460 +#, c-format +msgid "%s: align %d, shift answer by %d\n" +msgstr "" + +#: froll.c:43 froll.c:251 frolladaptive.c:23 frolladaptive.c:218 +#, c-format +msgid "%s: processing algo %u took %.3fs\n" +msgstr "" + +#: froll.c:52 froll.c:255 +#, c-format +msgid "%s: running for input length %llu, window %d, hasna %d, narm %d\n" +msgstr "" + +#: froll.c:72 froll.c:82 froll.c:173 froll.c:275 froll.c:285 froll.c:366 +#: frolladaptive.c:62 frolladaptive.c:151 frolladaptive.c:251 +#: frolladaptive.c:330 +#, c-format +msgid "" +"%s: hasNA=FALSE used but NA (or other non-finite) value(s) are present in " +"input, use default hasNA=NA to avoid this warning" +msgstr "" + +#: froll.c:75 froll.c:177 froll.c:278 froll.c:370 frolladaptive.c:65 +#: frolladaptive.c:155 frolladaptive.c:254 frolladaptive.c:334 +#, c-format +msgid "" +"%s: NA (or other non-finite) value(s) are present in input, re-running with " +"extra care for NAs\n" +msgstr "" + +#: froll.c:85 froll.c:288 +#, c-format +msgid "" +"%s: NA (or other non-finite) value(s) are present in input, skip non-NA " +"attempt and run with extra care for NAs\n" +msgstr "" + +#: froll.c:141 froll.c:339 +#, c-format +msgid "" +"%s: running in parallel for input length %llu, window %d, hasna %d, narm %d\n" +msgstr "" + +#: froll.c:179 froll.c:372 frolladaptive.c:157 frolladaptive.c:336 +#, c-format +msgid "" +"%s: NA (or other non-finite) value(s) are present in input, na.rm was FALSE " +"so in 'exact' implementation NAs were handled already, no need to re-run\n" +msgstr "" + +#: froll.c:428 +#, c-format +msgid "%s: results from provided FUN are not length 1" +msgstr "" + +#: froll.c:435 +#, c-format +msgid "" +"%s: results from provided FUN are not of type double, coercion from integer " +"or logical will be applied on each iteration\n" +msgstr "" + +#: froll.c:438 +#, c-format +msgid "%s: results from provided FUN are not of type double" +msgstr "" + +#: froll.c:467 +#, c-format +msgid "%s: took %.3fs\n" +msgstr "" + +#: frollR.c:15 +msgid "x must be of type numeric or logical" +msgstr "" + +#: frollR.c:26 +msgid "x must be list, data.frame or data.table of numeric or logical types" +msgstr "" + +#: frollR.c:47 frollR.c:264 +msgid "n must be non 0 length" +msgstr "" + +#: frollR.c:50 +msgid "adaptive must be TRUE or FALSE" +msgstr "" + +#: frollR.c:58 +msgid "n must be integer, list is accepted for adaptive TRUE" +msgstr "" + +#: frollR.c:65 frollR.c:256 frollR.c:259 +msgid "n must be integer" +msgstr "" + +#: frollR.c:72 +msgid "n must be positive integer values (> 0)" +msgstr "" + +#: frollR.c:81 frollR.c:93 +msgid "n must be integer vector or list of integer vectors" +msgstr "" + +#: frollR.c:104 gsumm.c:342 gsumm.c:577 gsumm.c:686 gsumm.c:805 gsumm.c:950 +#: gsumm.c:1261 gsumm.c:1402 uniqlist.c:350 +msgid "na.rm must be TRUE or FALSE" +msgstr "" + +#: frollR.c:107 +msgid "hasNA must be TRUE, FALSE or NA" +msgstr "" + +#: frollR.c:109 +msgid "" +"using hasNA FALSE and na.rm TRUE does not make sense, if you know there are " +"NA values use hasNA TRUE, otherwise leave it as default NA" +msgstr "" + +#: frollR.c:119 frollR.c:275 +msgid "" +"Internal error: invalid align argument in rolling function, should have been " +"caught before. please report to data.table issue tracker." +msgstr "" + +#: frollR.c:122 +msgid "" +"using adaptive TRUE and align argument different than 'right' is not " +"implemented" +msgstr "" + +#: frollR.c:126 frollR.c:297 types.c:64 +#, c-format +msgid "%s: allocating memory for results %dx%d\n" +msgstr "" + +#: frollR.c:135 +msgid "" +"adaptive rolling function can only process 'x' having equal length of " +"elements, like data.table or data.frame; If you want to call rolling " +"function on list having variable length of elements call it for each field " +"separately" +msgstr "" + +#: frollR.c:137 +msgid "" +"length of integer vector(s) provided as list to 'n' argument must be equal " +"to number of observations provided in 'x'" +msgstr "" + +#: frollR.c:151 +msgid "" +"Internal error: invalid fun argument in rolling function, should have been " +"caught before. please report to data.table issue tracker." +msgstr "" + +#: frollR.c:155 frollR.c:279 nafill.c:136 shift.c:21 +msgid "fill must be a vector of length 1" +msgstr "" + +#: frollR.c:169 frollR.c:292 +msgid "fill must be numeric" +msgstr "" + +#: frollR.c:185 +msgid "" +"Internal error: invalid algo argument in rolling function, should have been " +"caught before. please report to data.table issue tracker." +msgstr "" + +#: frollR.c:190 +#, c-format +msgid "Internal error: badaptive=%d but ik is not integer" +msgstr "" + +#: frollR.c:198 +#, c-format +msgid "" +"%s: %d column(s) and %d window(s), if product > 1 then entering parallel " +"execution\n" +msgstr "" + +#: frollR.c:200 +#, c-format +msgid "" +"%s: %d column(s) and %d window(s), not entering parallel execution here " +"because algo='exact' will compute results in parallel\n" +msgstr "" + +#: frollR.c:219 +#, c-format +msgid "Internal error: Unknown sfun value in froll: %d" +msgstr "" + +#: frollR.c:227 frollR.c:328 +#, c-format +msgid "%s: processing of %d column(s) and %d window(s) took %.3fs\n" +msgstr "" + +#: frollR.c:238 +msgid "internal error: 'fun' must be a function" +msgstr "" + +#: frollR.c:240 +msgid "internal error: 'rho' should be an environment" +msgstr "" + +#: frolladaptive.c:33 frolladaptive.c:222 +#, c-format +msgid "%s: running for input length %llu, hasna %d, narm %d\n" +msgstr "" + +#: frolladaptive.c:39 frolladaptive.c:228 +#, c-format +msgid "%s: Unable to allocate memory for cumsum" +msgstr "" + +#: frolladaptive.c:75 frolladaptive.c:264 +#, c-format +msgid "%s: Unable to allocate memory for cum NA counter" +msgstr "" + +#: frolladaptive.c:118 frolladaptive.c:302 +#, c-format +msgid "%s: running in parallel for input length %llu, hasna %d, narm %d\n" +msgstr "" + +#: fsort.c:111 +msgid "x must be a vector of type 'double' currently" +msgstr "" + +#: fsort.c:122 +#, c-format +msgid "nth=%d, nBatch=%d\n" +msgstr "" + +#: fsort.c:156 +#, c-format +msgid "Range = [%g,%g]\n" +msgstr "" + +#: fsort.c:157 +msgid "Cannot yet handle negatives." +msgstr "" + +#: fsort.c:170 +#, c-format +msgid "maxBit=%d; MSBNbits=%d; shift=%d; MSBsize=%d\n" +msgstr "" + +#: fsort.c:173 +msgid "Unable to allocate working memory" +msgstr "" + +#: fsort.c:177 +#, c-format +msgid "" +"counts is %dMB (%d pages per nBatch=%d, batchSize=%lld, lastBatchSize=%lld)\n" +msgstr "" + +#: fsort.c:230 +msgid "Internal error: counts[nBatch-1][MSBsize-1] != length(x)" +msgstr "" + +#: fsort.c:246 +msgid "Top 5 MSB counts: " +msgstr "" + +#: fsort.c:246 +#, c-format +msgid "%lld " +msgstr "" + +#: fsort.c:246 fwrite.c:692 fwrite.c:779 fwrite.c:890 fwrite.c:934 +msgid "\n" +msgstr "" + +#: fsort.c:247 +#, c-format +msgid "Reduced MSBsize from %d to " +msgstr "" + +#: fsort.c:251 +#, c-format +msgid "%d by excluding 0 and 1 counts\n" +msgstr "" + +#: fsort.c:308 +#, c-format +msgid "%d: %.3f (%4.1f%%)\n" +msgstr "" + +#: fwrite.c:603 +#, c-format +msgid "buffMB=%d outside [1,1024]" +msgstr "" + +#: fwrite.c:610 +#, c-format +msgid "" +"eol must be 1 or more bytes (usually either \\n or \\r\\n) but is length %d" +msgstr "" + +#: fwrite.c:613 +msgid "Column writers: " +msgstr "" + +#: fwrite.c:615 fwrite.c:617 fwrite.c:619 +#, c-format +msgid "%d " +msgstr "" + +#: fwrite.c:618 +msgid "... " +msgstr "" + +#: fwrite.c:621 +#, c-format +msgid "" +"\n" +"args.doRowNames=%d args.rowNames=%d doQuote=%d args.nrow=%d args.ncol=%d " +"eolLen=%d\n" +msgstr "" + +#: fwrite.c:654 +#, c-format +msgid "Internal error: type %d has no max length method implemented" +msgstr "" + +#: fwrite.c:661 +#, c-format +msgid "maxLineLen=%zd. Found in %.3fs\n" +msgstr "" + +#: fwrite.c:681 +#, c-format +msgid "" +"%s: '%s'. Failed to open existing file for writing. Do you have write " +"permission to it? Is this Windows and does another process such as Excel " +"have it open?" +msgstr "" + +#: fwrite.c:682 +#, c-format +msgid "" +"%s: '%s'. Unable to create new file for writing (it does not exist already). " +"Do you have permission to write here, is there space on the disk and does " +"the path exist?" +msgstr "" + +#: fwrite.c:690 +#, c-format +msgid "Writing bom (%s), yaml (%d characters) and column names (%s) ... " +msgstr "" + +#: fwrite.c:703 +#, c-format +msgid "Unable to allocate %d MiB for header: %s" +msgstr "" + +#: fwrite.c:731 fwrite.c:793 +msgid "Can't allocate gzip stream structure" +msgstr "" + +#: fwrite.c:737 +#, c-format +msgid "Unable to allocate %d MiB for zbuffer: %s" +msgstr "" + +#: fwrite.c:752 +#, c-format +msgid "Compress gzip error: %d" +msgstr "" + +#: fwrite.c:753 fwrite.c:761 fwrite.c:940 fwrite.c:949 +#, c-format +msgid "%s: '%s'" +msgstr "" + +#: fwrite.c:758 +#, c-format +msgid "done in %.3fs\n" +msgstr "" + +#: fwrite.c:760 +msgid "No data rows present (nrow==0)\n" +msgstr "" + +#: fwrite.c:777 +#, c-format +msgid "" +"Writing %d rows in %d batches of %d rows (each buffer size %dMB, " +"showProgress=%d, nth=%d) ... " +msgstr "" + +#: fwrite.c:946 +#, c-format +msgid "" +"Error %d: one or more threads failed to allocate buffers or there was a " +"compression error." +msgstr "" + +#: fwrite.c:947 +msgid "" +" Please try again with verbose=TRUE and try searching online for this error " +"message.\n" +msgstr "" + +#: fwriteR.c:41 +msgid "Internal error: col passed to getMaxCategLen is missing levels" +msgstr "" + +#: fwriteR.c:75 +msgid "Internal error: getMaxListItemLen should have caught this up front." +msgstr "" + +#: fwriteR.c:98 +#, c-format +msgid "" +"Row %d of list column is type '%s' - not yet implemented. fwrite() can write " +"list columns containing items which are atomic vectors of type logical, " +"integer, integer64, double, complex and character." +msgstr "" + +#: fwriteR.c:103 +#, c-format +msgid "" +"Internal error: row %d of list column has no max length method implemented" +msgstr "" + +#: fwriteR.c:170 +msgid "" +"fwrite must be passed an object of type list; e.g. data.frame, data.table" +msgstr "" + +#: fwriteR.c:179 +msgid "fwrite was passed an empty list of no columns. Nothing to write." +msgstr "" + +#: fwriteR.c:234 +#, c-format +msgid "Column %d's length (%d) is not the same as column 1's length (%d)" +msgstr "" + +#: fwriteR.c:237 +#, c-format +msgid "Column %d's type is '%s' - not yet implemented in fwrite." +msgstr "" + +#: fwriteR.c:262 +msgid "" +"No list columns are present. Setting sep2='' otherwise quote='auto' would " +"quote fields containing sep2.\n" +msgstr "" + +#: fwriteR.c:266 +#, 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 +#, c-format +msgid "" +"sep ('%c'), sep2 ('%c') and dec ('%c') must all be different. Column %d is a " +"list column." +msgstr "" + +#: gsumm.c:43 +msgid "env is not an environment" +msgstr "" + +#: gsumm.c:45 +msgid "o is not an integer vector" +msgstr "" + +#: gsumm.c:46 +msgid "f is not an integer vector" +msgstr "" + +#: gsumm.c:47 +msgid "l is not an integer vector" +msgstr "" + +#: gsumm.c:56 +msgid "irowsArg is neither an integer vector nor NULL" +msgstr "" + +#: gsumm.c:58 +#, c-format +msgid "length(f)=%d != length(l)=%d" +msgstr "" + +#: gsumm.c:66 +#, c-format +msgid "o has length %d but sum(l)=%d" +msgstr "" + +#: gsumm.c:69 +msgid "Internal error: o's maxgrpn attribute mismatches recalculated maxgrpn" +msgstr "" + +#: gsumm.c:89 +#, c-format +msgid "" +"Internal error: nrow=%d ngrp=%d nbit=%d shift=%d highSize=%d nBatch=%d " +"batchSize=%d lastBatchSize=%d\n" +msgstr "" + +#: gsumm.c:98 +#, c-format +msgid "gforce initial population of grp took %.3f\n" +msgstr "" + +#: gsumm.c:116 +msgid "" +"Internal error: Failed to allocate counts or TMP when assigning g in gforce" +msgstr "" + +#: gsumm.c:194 +#, c-format +msgid "gforce assign high and low took %.3f\n" +msgstr "" + +#: gsumm.c:200 +#, c-format +msgid "gforce eval took %.3f\n" +msgstr "" + +#: gsumm.c:216 +msgid "gather took ... " +msgstr "" + +#: gsumm.c:334 +#, c-format +msgid "gather implemented for INTSXP, REALSXP, and CPLXSXP but not '%s'" +msgstr "" + +#: gsumm.c:336 gsumm.c:568 +#, c-format +msgid "%.3fs\n" +msgstr "" + +#: gsumm.c:345 +msgid "sum is not meaningful for factors." +msgstr "" + +#: gsumm.c:349 +#, c-format +msgid "This gsum took (narm=%s) ... " +msgstr "" + +#: gsumm.c:350 gsumm.c:606 +#, c-format +msgid "nrow [%d] != length(x) [%d] in gsum" +msgstr "" + +#: gsumm.c:404 +msgid "" +"The sum of an integer column for a group was more than type 'integer' can " +"hold so the result has been coerced to 'numeric' automatically for " +"convenience." +msgstr "" + +#: gsumm.c:565 +#, c-format +msgid "" +"Type '%s' not supported by GForce sum (gsum). Either add the prefix base::" +"sum(.) or turn off GForce optimization using options(datatable.optimize=1)" +msgstr "" + +#: gsumm.c:578 +msgid "" +"GForce mean can only be applied to columns, not .SD or similar. Likely " +"you're looking for 'DT[,lapply(.SD,mean),by=,.SDcols=]'. See ?data.table." +msgstr "" + +#: gsumm.c:579 +msgid "mean is not meaningful for factors." +msgstr "" + +#: gsumm.c:599 +#, c-format +msgid "Internal error: gsum returned type '%s'. typeof(x) is '%s'" +msgstr "" + +#: gsumm.c:609 +#, c-format +msgid "Unable to allocate %d * %d bytes for sum in gmean na.rm=TRUE" +msgstr "" + +#: gsumm.c:612 +#, c-format +msgid "Unable to allocate %d * %d bytes for counts in gmean na.rm=TRUE" +msgstr "" + +#: gsumm.c:638 +#, c-format +msgid "Unable to allocate %d * %d bytes for si in gmean na.rm=TRUE" +msgstr "" + +#: gsumm.c:650 +#, c-format +msgid "" +"Type '%s' not supported by GForce mean (gmean) na.rm=TRUE. Either add the " +"prefix base::mean(.) or turn off GForce optimization using options(datatable." +"optimize=1)" +msgstr "" + +#: gsumm.c:674 +msgid "Internal error: unsupported type at the end of gmean" +msgstr "" + +#: gsumm.c:687 +msgid "" +"GForce min can only be applied to columns, not .SD or similar. To find min " +"of all items in a list such as .SD, either add the prefix base::min(.SD) or " +"turn off GForce optimization using options(datatable.optimize=1). More " +"likely, you may be looking for 'DT[,lapply(.SD,min),by=,.SDcols=]'" +msgstr "" + +#: gsumm.c:688 +msgid "min is not meaningful for factors." +msgstr "" + +#: gsumm.c:693 +#, c-format +msgid "nrow [%d] != length(x) [%d] in gmin" +msgstr "" + +#: gsumm.c:717 gsumm.c:850 +msgid "" +"No non-missing values found in at least one group. Coercing to numeric type " +"and returning 'Inf' for such groups to be consistent with base" +msgstr "" + +#: gsumm.c:756 gsumm.c:891 +msgid "" +"No non-missing values found in at least one group. Returning 'NA' for such " +"groups to be consistent with base" +msgstr "" + +#: gsumm.c:783 +msgid "" +"No non-missing values found in at least one group. Returning 'Inf' for such " +"groups to be consistent with base" +msgstr "" + +#: gsumm.c:791 +msgid "Type 'complex' has no well-defined min" +msgstr "" + +#: gsumm.c:794 +#, c-format +msgid "" +"Type '%s' not supported by GForce min (gmin). Either add the prefix base::" +"min(.) or turn off GForce optimization using options(datatable.optimize=1)" +msgstr "" + +#: gsumm.c:806 +msgid "" +"GForce max can only be applied to columns, not .SD or similar. To find max " +"of all items in a list such as .SD, either add the prefix base::max(.SD) or " +"turn off GForce optimization using options(datatable.optimize=1). More " +"likely, you may be looking for 'DT[,lapply(.SD,max),by=,.SDcols=]'" +msgstr "" + +#: gsumm.c:807 +msgid "max is not meaningful for factors." +msgstr "" + +#: gsumm.c:812 +#, c-format +msgid "nrow [%d] != length(x) [%d] in gmax" +msgstr "" + +#: gsumm.c:930 +msgid "" +"No non-missing values found in at least one group. Returning '-Inf' for such " +"groups to be consistent with base" +msgstr "" + +#: gsumm.c:937 +msgid "Type 'complex' has no well-defined max" +msgstr "" + +#: gsumm.c:940 +#, c-format +msgid "" +"Type '%s' not supported by GForce max (gmax). Either add the prefix base::" +"max(.) or turn off GForce optimization using options(datatable.optimize=1)" +msgstr "" + +#: gsumm.c:951 +msgid "" +"GForce median can only be applied to columns, not .SD or similar. To find " +"median of all items in a list such as .SD, either add the prefix stats::" +"median(.SD) or turn off GForce optimization using options(datatable." +"optimize=1). More likely, you may be looking for 'DT[,lapply(.SD,median)," +"by=,.SDcols=]'" +msgstr "" + +#: gsumm.c:952 +msgid "median is not meaningful for factors." +msgstr "" + +#: gsumm.c:955 +#, c-format +msgid "nrow [%d] != length(x) [%d] in gmedian" +msgstr "" + +#: gsumm.c:992 +#, c-format +msgid "" +"Type '%s' not supported by GForce median (gmedian). Either add the prefix " +"stats::median(.) or turn off GForce optimization using options(datatable." +"optimize=1)" +msgstr "" + +#: gsumm.c:1005 +#, c-format +msgid "nrow [%d] != length(x) [%d] in gtail" +msgstr "" + +#: gsumm.c:1073 +#, c-format +msgid "" +"Type '%s' not supported by GForce tail (gtail). Either add the prefix utils::" +"tail(.) or turn off GForce optimization using options(datatable.optimize=1)" +msgstr "" + +#: gsumm.c:1085 gsumm.c:1176 +#, c-format +msgid "nrow [%d] != length(x) [%d] in ghead" +msgstr "" + +#: gsumm.c:1153 +#, c-format +msgid "" +"Type '%s' not supported by GForce head (ghead). Either add the prefix utils::" +"head(.) or turn off GForce optimization using options(datatable.optimize=1)" +msgstr "" + +#: gsumm.c:1161 +msgid "" +"Internal error, gtail is only implemented for n=1. This should have been " +"caught before. please report to data.table issue tracker." +msgstr "" + +#: 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 "" + +#: 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 "" + +#: gsumm.c:1250 +#, c-format +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 "" + +#: gsumm.c:1262 +msgid "" +"GForce var/sd can only be applied to columns, not .SD or similar. For the " +"full covariance matrix of all items in a list such as .SD, either add the " +"prefix stats::var(.SD) (or stats::sd(.SD)) or turn off GForce optimization " +"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 "" + +#: gsumm.c:1263 +msgid "var/sd is not meaningful for factors." +msgstr "" + +#: gsumm.c:1266 +#, c-format +msgid "nrow [%d] != length(x) [%d] in gvar" +msgstr "" + +#: gsumm.c:1382 +#, c-format +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 "" + +#: gsumm.c:1384 +#, c-format +msgid "" +"Type '%s' not supported by GForce sd (gsd). Either add the prefix stats::" +"sd(.) or turn off GForce optimization using options(datatable.optimize=1)" +msgstr "" + +#: gsumm.c:1403 +msgid "" +"GForce prod can only be applied to columns, not .SD or similar. To multiply " +"all items in a list such as .SD, either add the prefix base::prod(.SD) or " +"turn off GForce optimization using options(datatable.optimize=1). More " +"likely, you may be looking for 'DT[,lapply(.SD,prod),by=,.SDcols=]'" +msgstr "" + +#: gsumm.c:1404 +msgid "prod is not meaningful for factors." +msgstr "" + +#: gsumm.c:1409 +#, c-format +msgid "nrow [%d] != length(x) [%d] in gprod" +msgstr "" + +#: gsumm.c:1411 +#, c-format +msgid "Unable to allocate %d * %d bytes for gprod" +msgstr "" + +#: gsumm.c:1446 +#, c-format +msgid "" +"Type '%s' not supported by GForce prod (gprod). Either add the prefix base::" +"prod(.) or turn off GForce optimization using options(datatable.optimize=1)" +msgstr "" + +#: ijoin.c:22 ijoin.c:243 +msgid "" +"Internal error: invalid value for 'mult'; this should have been caught " +"before. please report to data.table issue tracker" +msgstr "" + +#: ijoin.c:29 ijoin.c:250 +msgid "" +"Internal error: invalid value for 'type'; this should have been caught " +"before. please report to data.table issue tracker" +msgstr "" + +#: ijoin.c:56 ijoin.c:121 +#, c-format +msgid "Internal error: unknown type in mult=%d in lookup: %d" +msgstr "" + +#: ijoin.c:124 ijoin.c:215 +#, c-format +msgid "Internal error: unknown mult in lookup: %d" +msgstr "" + +#: ijoin.c:128 +#, c-format +msgid "First pass on calculating lengths in lookup ... done in %8.3f seconds\n" +msgstr "" + +#: ijoin.c:141 +#, c-format +msgid "Second pass on allocation in lookup ... done in %8.3f seconds\n" +msgstr "" + +#: ijoin.c:160 +#, c-format +msgid "Internal error: unknown type lookup should have been caught earlier: %d" +msgstr "" + +#: ijoin.c:212 +#, c-format +msgid "" +"Internal error: unknown type in mult=%d in lookup should have been caught " +"earlier: %d" +msgstr "" + +#: ijoin.c:220 +#, c-format +msgid "Final step in generating lookup ... done in %8.3f seconds\n" +msgstr "" + +#: ijoin.c:323 +#, c-format +msgid "Internal error: unknown type in mult=ALL in overlaps: %d" +msgstr "" + +#: ijoin.c:328 +#, c-format +msgid "" +"First pass on calculating lengths in overlaps ... done in %8.3f seconds\n" +msgstr "" + +#: ijoin.c:464 ijoin.c:571 ijoin.c:720 +#, c-format +msgid "Internal error: unknown type in mult=%d in overlaps: %d" +msgstr "" + +#: ijoin.c:723 +#, c-format +msgid "Internal error: unknown mult in overlaps: %d" +msgstr "" + +#: ijoin.c:727 +#, c-format +msgid "Final step, fetching indices in overlaps ... done in %8.3f seconds\n" +msgstr "" + +#: init.c:198 +#, c-format +msgid "" +"Pointers are %d bytes, greater than 8. We have not tested on any " +"architecture greater than 64bit yet." +msgstr "" + +#: init.c:209 +#, c-format +msgid "Checking NA_INTEGER [%d] == INT_MIN [%d] %s" +msgstr "" + +#: init.c:210 +#, c-format +msgid "Checking NA_INTEGER [%d] == NA_LOGICAL [%d] %s" +msgstr "" + +#: init.c:211 +#, c-format +msgid "Checking sizeof(int) [%d] is 4 %s" +msgstr "" + +#: init.c:212 +#, c-format +msgid "Checking sizeof(double) [%d] is 8 %s" +msgstr "" + +#: init.c:214 +#, c-format +msgid "Checking sizeof(long long) [%d] is 8 %s" +msgstr "" + +#: init.c:215 +#, c-format +msgid "Checking sizeof(pointer) [%d] is 4 or 8 %s" +msgstr "" + +#: init.c:216 +#, c-format +msgid "Checking sizeof(SEXP) [%d] == sizeof(pointer) [%d] %s" +msgstr "" + +#: init.c:217 +#, c-format +msgid "Checking sizeof(uint64_t) [%d] is 8 %s" +msgstr "" + +#: init.c:218 +#, c-format +msgid "Checking sizeof(int64_t) [%d] is 8 %s" +msgstr "" + +#: init.c:219 +#, c-format +msgid "Checking sizeof(signed char) [%d] is 1 %s" +msgstr "" + +#: init.c:220 +#, c-format +msgid "Checking sizeof(int8_t) [%d] is 1 %s" +msgstr "" + +#: init.c:221 +#, c-format +msgid "Checking sizeof(uint8_t) [%d] is 1 %s" +msgstr "" + +#: init.c:222 +#, c-format +msgid "Checking sizeof(int16_t) [%d] is 2 %s" +msgstr "" + +#: init.c:223 +#, c-format +msgid "Checking sizeof(uint16_t) [%d] is 2 %s" +msgstr "" + +#: init.c:226 +#, c-format +msgid "Checking LENGTH(allocVector(INTSXP,2)) [%d] is 2 %s" +msgstr "" + +#: init.c:227 +#, c-format +msgid "Checking TRUELENGTH(allocVector(INTSXP,2)) [%d] is 0 %s" +msgstr "" + +#: init.c:234 +#, c-format +msgid "Checking memset(&i,0,sizeof(int)); i == (int)0 %s" +msgstr "" + +#: init.c:237 +#, c-format +msgid "Checking memset(&ui, 0, sizeof(unsigned int)); ui == (unsigned int)0 %s" +msgstr "" + +#: init.c:240 +#, c-format +msgid "Checking memset(&d, 0, sizeof(double)); d == (double)0.0 %s" +msgstr "" + +#: init.c:243 +#, c-format +msgid "Checking memset(&ld, 0, sizeof(long double)); ld == (long double)0.0 %s" +msgstr "" + +#: init.c:246 +msgid "The ascii character '/' is not just before '0'" +msgstr "" + +#: init.c:247 +msgid "The C expression (uint_fast8_t)('/'-'0')<10 is true. Should be false." +msgstr "" + +#: init.c:248 +msgid "The ascii character ':' is not just after '9'" +msgstr "" + +#: init.c:249 +msgid "The C expression (uint_fast8_t)('9'-':')<10 is true. Should be false." +msgstr "" + +#: init.c:254 +#, c-format +msgid "Conversion of NA_INT64 via double failed %lld!=%lld" +msgstr "" + +#: init.c:258 +msgid "NA_INT64_D (negative -0.0) is not == 0.0." +msgstr "" + +#: init.c:259 +msgid "NA_INT64_D (negative -0.0) is not ==-0.0." +msgstr "" + +#: init.c:260 +msgid "ISNAN(NA_INT64_D) is TRUE but should not be" +msgstr "" + +#: init.c:261 +msgid "isnan(NA_INT64_D) is TRUE but should not be" +msgstr "" + +#: init.c:290 +#, c-format +msgid "PRINTNAME(install(\")integer64\")) has returned %s not %s" +msgstr "" + +#: init.c:359 +msgid ".Last.value in namespace is not a length 1 integer" +msgstr "" + +#: nafill.c:83 +msgid "" +"'x' argument is atomic vector, in-place update is supported only for list/" +"data.table" +msgstr "" + +#: nafill.c:85 nafill.c:95 +msgid "'x' argument must be numeric type, or list/data.table of numeric types" +msgstr "" + +#: nafill.c:133 nafill.c:161 +msgid "" +"Internal error: invalid type argument in nafillR function, should have been " +"caught before. Please report to data.table issue tracker." +msgstr "" + +#: nafill.c:177 +#, c-format +msgid "%s: parallel processing of %d column(s) took %.3fs\n" +msgstr "" + +#: openmp-utils.c:22 +#, c-format +msgid "" +"Ignoring invalid %s==\")%s\". Not an integer >= 1. Please remove any " +"characters that are not a digit [0-9]. See ?data.table::setDTthreads." +msgstr "" + +#: openmp-utils.c:40 +#, c-format +msgid "" +"Ignoring invalid R_DATATABLE_NUM_PROCS_PERCENT==%d. If used it must be an " +"integer between 2 and 100. Default is 50. See ?setDTtheads." +msgstr "" + +#: openmp-utils.c:67 +msgid "'verbose' must be TRUE or FALSE" +msgstr "" + +#: openmp-utils.c:70 +msgid "" +"This installation of data.table has not been compiled with OpenMP support.\n" +msgstr "" + +#: openmp-utils.c:75 +#, c-format +msgid " omp_get_num_procs() %d\n" +msgstr "" + +#: openmp-utils.c:76 +#, c-format +msgid " R_DATATABLE_NUM_PROCS_PERCENT %s\n" +msgstr "" + +#: openmp-utils.c:77 +#, c-format +msgid " R_DATATABLE_NUM_THREADS %s\n" +msgstr "" + +#: openmp-utils.c:78 +#, c-format +msgid " omp_get_thread_limit() %d\n" +msgstr "" + +#: openmp-utils.c:79 +#, c-format +msgid " omp_get_max_threads() %d\n" +msgstr "" + +#: openmp-utils.c:80 +#, c-format +msgid " OMP_THREAD_LIMIT %s\n" +msgstr "" + +#: openmp-utils.c:81 +#, c-format +msgid " OMP_NUM_THREADS %s\n" +msgstr "" + +#: openmp-utils.c:82 +#, c-format +msgid " RestoreAfterFork %s\n" +msgstr "" + +#: openmp-utils.c:83 +#, c-format +msgid " data.table is using %d threads. See ?setDTthreads.\n" +msgstr "" + +#: openmp-utils.c:91 +msgid "" +"restore_after_fork= must be TRUE, FALSE, or NULL (default). " +"getDTthreads(verbose=TRUE) reports the current setting.\n" +msgstr "" + +#: openmp-utils.c:105 +#, c-format +msgid "" +"threads= must be either NULL (default) or a single number. It has length %d" +msgstr "" + +#: openmp-utils.c:107 +msgid "threads= must be either NULL (default) or type integer/numeric" +msgstr "" + +#: openmp-utils.c:109 +msgid "" +"threads= must be either NULL or a single integer >= 0. See ?setDTthreads." +msgstr "" + +#: openmp-utils.c:114 +msgid "Internal error: percent= must be TRUE or FALSE at C level" +msgstr "" + +#: openmp-utils.c:117 +#, c-format +msgid "" +"Internal error: threads==%d should be between 2 and 100 (percent=TRUE at C " +"level)." +msgstr "" + +#: rbindlist.c:8 +msgid "fill= should be TRUE or FALSE" +msgstr "" + +#: rbindlist.c:10 +msgid "use.names= should be TRUE, FALSE, or not used (\")check\" by default)" +msgstr "" + +#: rbindlist.c:12 +msgid "" +"Input to rbindlist must be a list. This list can contain data.tables, data." +"frames or plain lists." +msgstr "" + +#: rbindlist.c:16 +msgid "use.names= cannot be FALSE when fill is TRUE. Setting use.names=TRUE." +msgstr "" + +#: rbindlist.c:20 +msgid "Internal error: rbindlist.c idcol is not a single string" +msgstr "" + +#: rbindlist.c:31 +#, c-format +msgid "Item %d of input is not a data.frame, data.table or list" +msgstr "" + +#: rbindlist.c:39 +#, c-format +msgid "" +"Item %d has %d columns, inconsistent with item %d which has %d columns. To " +"fill missing columns use fill=TRUE." +msgstr "" + +#: rbindlist.c:42 +#, c-format +msgid "Item %d has %d columns but %d column names. Invalid object." +msgstr "" + +#: rbindlist.c:49 +#, c-format +msgid "" +"Column %d of item %d is length %d inconsistent with column %d which is " +"length %d. Only length-1 columns are recycled." +msgstr "" + +#: rbindlist.c:58 +#, c-format +msgid "" +"Column %d ['%s'] of item %d is length 0. This (and %d other%s like it) has " +"been filled with NA (NULL for list columns) to make each item uniform." +msgstr "" + +#: rbindlist.c:62 +#, c-format +msgid "" +"Total rows in the list is %lld which is larger than the maximum number of " +"rows, currently %d" +msgstr "" + +#: rbindlist.c:63 +msgid "use.names=TRUE but no item of input list has any names" +msgstr "" + +#: rbindlist.c:71 +#, c-format +msgid "" +"Failed to allocate upper bound of %lld unique column names [sum(lapply(l," +"ncol))]" +msgstr "" + +#: rbindlist.c:102 +#, c-format +msgid "Failed to allocate nuniq=%d items working memory in rbindlist.c" +msgstr "" + +#: rbindlist.c:136 +#, c-format +msgid "Failed to allocate ncol=%d items working memory in rbindlist.c" +msgstr "" + +#: rbindlist.c:191 +msgid "" +"Internal error: usenames==NA but fill=TRUE. usenames should have been set to " +"TRUE earlier with warning." +msgstr "" + +#: rbindlist.c:196 +msgid "" +" use.names='check' (default from v1.12.2) emits this message and proceeds as " +"if use.names=FALSE for backwards compatibility. See news item 5 in v1.12.2 " +"for options to control this message." +msgstr "" + +#: rbindlist.c:206 +msgid "" +"Internal error: could not find the first column name not present in earlier " +"item" +msgstr "" + +#: rbindlist.c:210 +#, c-format +msgid "" +"Column %d ['%s'] of item %d is missing in item %d. Use fill=TRUE to fill " +"with NA (NULL for list columns), or use.names=FALSE to ignore column names.%s" +msgstr "" + +#: rbindlist.c:218 +#, c-format +msgid "" +"Internal error: usenames==NA but an out-of-order name has been found in an " +"item with no names or the first item. [%d]" +msgstr "" + +#: rbindlist.c:219 +#, c-format +msgid "" +"Column %d ['%s'] of item %d appears in position %d in item %d. Set use." +"names=TRUE to match by column name, or use.names=FALSE to ignore column " +"names.%s" +msgstr "" + +#: rbindlist.c:228 +msgid "" +"options()$datatable.rbindlist.check is set but is not a single string. See " +"news item 5 in v1.12.2." +msgstr "" + +#: rbindlist.c:235 +#, c-format +msgid "" +"options()$datatable.rbindlist.check=='%s' which is not " +"'message'|'warning'|'error'|'none'. See news item 5 in v1.12.2." +msgstr "" + +#: rbindlist.c:297 +#, c-format +msgid "" +"Column %d of item %d has type 'factor' but has no levels; i.e. malformed." +msgstr "" + +#: rbindlist.c:315 +#, c-format +msgid "" +"Class attribute on column %d of item %d does not match with column %d of " +"item %d." +msgstr "" + +#: rbindlist.c:325 +#, c-format +msgid "" +"Internal error: column %d of result is determined to be integer64 but " +"maxType=='%s' != REALSXP" +msgstr "" + +#: rbindlist.c:361 +#, c-format +msgid "" +"Failed to allocate working memory for %d ordered factor levels of result " +"column %d" +msgstr "" + +#: rbindlist.c:382 +#, c-format +msgid "" +"Column %d of item %d is an ordered factor but level %d ['%s'] is missing " +"from the ordered levels from column %d of item %d. Each set of ordered " +"factor levels should be an ordered subset of the first longest. A regular " +"factor will be created for this column." +msgstr "" + +#: rbindlist.c:387 +#, c-format +msgid "" +"Column %d of item %d is an ordered factor with '%s'<'%s' in its levels. But " +"'%s'<'%s' in the ordered levels from column %d of item %d. A regular factor " +"will be created for this column due to this ambiguity." +msgstr "" + +#: rbindlist.c:432 +#, c-format +msgid "" +"Failed to allocate working memory for %d factor levels of result column %d " +"when reading item %d of item %d" +msgstr "" + +#: rbindlist.c:522 +#, c-format +msgid "Column %d of item %d: %s" +msgstr "" + +#: reorder.c:17 +#, c-format +msgid "Item %d of list is type '%s' which isn't yet supported (SIZEOF=%d)" +msgstr "" + +#: reorder.c:19 +#, c-format +msgid "" +"Column %d is length %d which differs from length of column 1 (%d). Invalid " +"data.table." +msgstr "" + +#: reorder.c:27 +#, c-format +msgid "" +"reorder accepts vectors but this non-VECSXP is type '%s' which isn't yet " +"supported (SIZEOF=%d)" +msgstr "" + +#: reorder.c:28 +msgid "" +"Internal error in reorder.c: cannot reorder an ALTREP vector. Please see " +"NEWS item 2 in v1.11.4 and report this as a bug." +msgstr "" + +#: reorder.c:33 +msgid "order must be an integer vector" +msgstr "" + +#: reorder.c:34 +#, c-format +msgid "nrow(x)[%d]!=length(order)[%d]" +msgstr "" + +#: reorder.c:48 +#, c-format +msgid "order is not a permutation of 1:nrow[%d]" +msgstr "" + +#: reorder.c:57 +#, c-format +msgid "" +"Unable to allocate %d * %d bytes of working memory for reordering data.table" +msgstr "" + +#: shift.c:17 +#, c-format +msgid "" +"type '%s' passed to shift(). Must be a vector, list, data.frame or data.table" +msgstr "" + +#: shift.c:24 shift.c:28 +msgid "" +"Internal error: invalid type for shift(), should have been caught before. " +"please report to data.table issue tracker" +msgstr "" + +#: shift.c:31 +msgid "Internal error: k must be integer" +msgstr "" + +#: shift.c:33 +#, c-format +msgid "Item %d of n is NA" +msgstr "" + +#: shift.c:158 +#, c-format +msgid "Unsupported type '%s'" +msgstr "" + +#: subset.c:7 +#, c-format +msgid "Internal error: subsetVectorRaw length(ans)==%d n=%d" +msgstr "" + +#: subset.c:88 +#, 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 +#, c-format +msgid "Internal error. 'idx' is type '%s' not 'integer'" +msgstr "" + +#: subset.c:122 +#, c-format +msgid "" +"Internal error. 'maxArg' is type '%s' and length %d, should be an integer " +"singleton" +msgstr "" + +#: subset.c:123 +msgid "Internal error: allowOverMax must be TRUE/FALSE" +msgstr "" + +#: subset.c:125 +#, c-format +msgid "Internal error. max is %d, must be >= 0." +msgstr "" + +#: subset.c:149 +#, c-format +msgid "i[%d] is %d which is out of range [1,nrow=%d]" +msgstr "" + +#: subset.c:161 +#, c-format +msgid "" +"Item %d of i is %d and item %d is %d. Cannot mix positives and negatives." +msgstr "" + +#: subset.c:171 +#, c-format +msgid "Item %d of i is %d and item %d is NA. Cannot mix negatives and NA." +msgstr "" + +#: subset.c:207 +#, 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 +#, 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 +#, c-format +msgid "Column %d is NULL; malformed data.table." +msgstr "" + +#: subset.c:226 +#, c-format +msgid "Column %d ['%s'] is a data.frame or data.table; malformed data.table." +msgstr "" + +#: subset.c:231 +#, c-format +msgid "" +"Column %d ['%s'] is length %d but column 1 is length %d; malformed data." +"table." +msgstr "" + +#: subset.c:247 +#, c-format +msgid "Internal error. Argument 'x' to CsubsetDT is type '%s' not 'list'" +msgstr "" + +#: subset.c:260 +#, c-format +msgid "Internal error. Argument 'cols' to Csubset is type '%s' not 'integer'" +msgstr "" + +#: subset.c:337 +msgid "" +"Internal error: NULL can not be subset. It is invalid for a data.table to " +"contain a NULL column." +msgstr "" + +#: subset.c:339 +msgid "" +"Internal error: CsubsetVector is internal-use-only but has received " +"negatives, zeros or out-of-range" +msgstr "" + +#: transpose.c:9 +msgid "l must be a list." +msgstr "" + +#: transpose.c:13 +msgid "ignore.empty should be logical TRUE/FALSE." +msgstr "" + +#: transpose.c:16 +msgid "" +"keep.names should be either NULL, or the name of the first column of the " +"result in which to place the names of the input" +msgstr "" + +#: transpose.c:19 +msgid "fill must be a length 1 vector, such as the default NA" +msgstr "" + +#: transpose.c:28 +#, c-format +msgid "Item %d of list input is not an atomic vector" +msgstr "" + +#: types.c:17 types.c:21 +#, c-format +msgid "" +"%s: %d:\n" +"%s" +msgstr "" + +#: types.c:23 +#, c-format +msgid "" +"%s: %d:\n" +"%s:" +msgstr "" + +#: types.c:55 +msgid "internal error: status, nx, nk must be integer" +msgstr "" + +#: uniqlist.c:14 +msgid "Internal error: uniqlist has not been passed a list of columns" +msgstr "" + +#: uniqlist.c:17 +msgid "Internal error: uniqlist has been passed a non-integer order" +msgstr "" + +#: uniqlist.c:18 +msgid "Internal error: uniqlist has been passed a length-0 order" +msgstr "" + +#: uniqlist.c:19 +#, c-format +msgid "Internal error: uniqlist has been passed length(order)==%d but nrow==%d" +msgstr "" + +#: uniqlist.c:96 uniqlist.c:127 uniqlist.c:208 uniqlist.c:245 uniqlist.c:318 +#, c-format +msgid "Type '%s' not supported" +msgstr "" + +#: uniqlist.c:148 +msgid "Input argument 'x' to 'uniqlengths' must be an integer vector" +msgstr "" + +#: uniqlist.c:149 +msgid "" +"Input argument 'n' to 'uniqlengths' must be an integer vector of length 1" +msgstr "" + +#: uniqlist.c:167 +msgid "cols must be an integer vector with length >= 1" +msgstr "" + +#: uniqlist.c:171 +#, c-format +msgid "Item %d of cols is %d which is outside range of l [1,length(l)=%d]" +msgstr "" + +#: uniqlist.c:174 +#, c-format +msgid "" +"All elements to input list must be of same length. Element [%d] has length " +"%llu != length of first element = %llu." +msgstr "" + +#: uniqlist.c:255 +msgid "Internal error: nestedid was not passed a list length 1 or more" +msgstr "" + +#: uniqlist.c:262 +#, c-format +msgid "Internal error: nrows[%d]>0 but ngrps==0" +msgstr "" + +#: uniqlist.c:264 +msgid "cols must be an integer vector of positive length" +msgstr "" + +#: uniqlist.c:349 +msgid "x is not a logical vector" +msgstr "" + +#: utils.c:73 +#, c-format +msgid "Unsupported type '%s' passed to allNA()" +msgstr "" + +#: utils.c:92 +msgid "'x' argument must be data.table compatible" +msgstr "" + +#: utils.c:94 +msgid "'check_dups' argument must be TRUE or FALSE" +msgstr "" + +#: utils.c:110 +msgid "" +"argument specifying columns is type 'double' and one or more items in it are " +"not whole integers" +msgstr "" + +#: utils.c:116 +#, c-format +msgid "argument specifying columns specify non existing column(s): cols[%d]=%d" +msgstr "" + +#: utils.c:121 +msgid "'x' argument data.table has no names" +msgstr "" + +#: utils.c:126 +#, c-format +msgid "" +"argument specifying columns specify non existing column(s): cols[%d]='%s'" +msgstr "" + +#: utils.c:129 +msgid "argument specifying columns must be character or numeric" +msgstr "" + +#: utils.c:132 +msgid "argument specifying columns specify duplicated column(s)" +msgstr "" + +#: utils.c:138 +#, c-format +msgid "%s: fill argument must be length 1" +msgstr "" + +#: utils.c:171 +#, c-format +msgid "%s: fill argument must be numeric" +msgstr "" + +#: utils.c:274 +#, c-format +msgid "Internal error: unsupported type '%s' passed to copyAsPlain()" +msgstr "" + +#: utils.c:278 +#, c-format +msgid "" +"Internal error: type '%s' passed to copyAsPlain() but it seems " +"copyMostAttrib() retains ALTREP attributes" +msgstr "" + +#: utils.c:313 +#, c-format +msgid "Found and copied %d column%s with a shared memory address\n" +msgstr "" + +#: vecseq.c:13 +msgid "x must be an integer vector" +msgstr "" + +#: vecseq.c:14 +msgid "len must be an integer vector" +msgstr "" + +#: vecseq.c:15 +msgid "x and len must be the same length" +msgstr "" + +#: vecseq.c:21 +msgid "" +"Join results in more than 2^31 rows (internal vecseq reached physical " +"limit). Very likely misspecified join. Check for duplicate key values in i " +"each of which join to the same group in x over and over again. If that's ok, " +"try by=.EACHI to run j for each group to avoid the large allocation. " +"Otherwise, please search for this error message in the FAQ, Wiki, Stack " +"Overflow and data.table issue tracker for advice." +msgstr "" + +#: vecseq.c:25 +msgid "clamp must be a double vector length 1" +msgstr "" + +#: vecseq.c:27 +msgid "clamp must be positive" +msgstr "" + +#: vecseq.c:28 +#, c-format +msgid "" +"Join results in %d rows; more than %d = nrow(x)+nrow(i). Check for duplicate " +"key values in i each of which join to the same group in x over and over " +"again. If that's ok, try by=.EACHI to run j for each group to avoid the " +"large allocation. If you are sure you wish to proceed, rerun with allow." +"cartesian=TRUE. Otherwise, please search for this error message in the FAQ, " +"Wiki, Stack Overflow and data.table issue tracker for advice." +msgstr "" + +#: wrappers.c:11 +msgid "Attribute name must be a character vector of length 1" +msgstr "" + +#: wrappers.c:16 +msgid "" +"Internal structure doesn't seem to be a list. Can't set class to be 'data." +"table' or 'data.frame'. Use 'as.data.table()' or 'as.data.frame()' methods " +"instead." +msgstr "" + +#: wrappers.c:59 +msgid "First argument to setlistelt must be a list()" +msgstr "" + +#: wrappers.c:60 +msgid "Second argument to setlistelt must a length 1 integer vector" +msgstr "" + +#: wrappers.c:62 +#, c-format +msgid "i (%d) is outside the range of items [1,%d]" +msgstr "" + +#: wrappers.c:84 +msgid "x isn't a VECSXP" +msgstr "" + +#: wrappers.c:99 +#, c-format +msgid "" +"dim.data.table expects a data.table as input (which is a list), but seems to " +"be of type %s" +msgstr "" diff --git a/src/forder.c b/src/forder.c index e3af8c602a..f537248b19 100644 --- a/src/forder.c +++ b/src/forder.c @@ -461,10 +461,10 @@ SEXP forder(SEXP DT, SEXP by, SEXP retGrpArg, SEXP sortGroupsArg, SEXP ascArg, S if (TYPEOF(VECTOR_ELT(DT, by_i-1)) == CPLXSXP) n_cplx++; } if (!isLogical(retGrpArg) || LENGTH(retGrpArg)!=1 || INTEGER(retGrpArg)[0]==NA_LOGICAL) - error(_("retGrp= must be TRUE or FALSE")); + error(_("retGrp must be TRUE or FALSE")); retgrp = LOGICAL(retGrpArg)[0]==TRUE; if (!isLogical(sortGroupsArg) || LENGTH(sortGroupsArg)!=1 || INTEGER(sortGroupsArg)[0]==NA_LOGICAL ) - error(_("sort= must be TRUE or FALSE")); + error(_("sort must be TRUE or FALSE")); sortType = LOGICAL(sortGroupsArg)[0]==TRUE; // if sortType is 1, it is later flipped between +1/-1 according to ascArg. Otherwise ascArg is ignored when sortType==0 if (!retgrp && !sortType) error(_("At least one of retGrp= or sort= must be TRUE")); From 9a46ed3f023b7a4bc7ed45efad4d586ca2379854 Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Wed, 16 Oct 2019 22:44:18 +0800 Subject: [PATCH 15/22] update_pkg_po after merge --- inst/po/en@quot/LC_MESSAGES/R-data.table.mo | Bin 87120 -> 87262 bytes inst/po/en@quot/LC_MESSAGES/data.table.mo | Bin 137184 -> 137326 bytes po/R-data.table.pot | 9 +- po/R-zh_CN.po | 11 +- po/data.table.pot | 172 ++++++++++---------- po/zh_CN.po | 160 +++++++++--------- src/forder.c | 4 +- 7 files changed, 184 insertions(+), 172 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 8d628eced2b060217f28870325eca3aff0c246d0..051c963766c998d4d13b35d619fbe858af2c3a66 100644 GIT binary patch delta 11933 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 ZZ`<2kF?q?qwEFK_X*Xy5zgup&{|^Lo0v7-P delta 11814 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 delta 18015 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 diff --git a/po/R-data.table.pot b/po/R-data.table.pot index b8f94b3d87..3d31b50fab 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.5\n" -"POT-Creation-Date: 2019-10-04 17:06\n" +"POT-Creation-Date: 2019-10-16 22:08\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -1636,10 +1636,13 @@ msgstr "" msgid "data.table package is loaded. Unload or start a fresh R session." msgstr "" -msgid "'script' argument should not be NULL" +msgid "script must end with '.Rraw'. If a file ending '.Rraw.bz2' exists, that will be found and used." msgstr "" -msgid "does not exist" +msgid "Neither" +msgstr "" + +msgid "exist in" msgstr "" msgid "Timings count mismatch:" diff --git a/po/R-zh_CN.po b/po/R-zh_CN.po index 2469c2fe1d..e6b15b9ba3 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-10-04 17:06\n" +"POT-Creation-Date: 2019-10-16 22:08\n" "PO-Revision-Date: 2019-10-04 17:06+08\n" "Last-Translator: Michael Chirico \n" "Language-Team: Mandarin\n" @@ -1999,10 +1999,15 @@ msgstr "" msgid "data.table package is loaded. Unload or start a fresh R session." msgstr "" -msgid "'script' argument should not be NULL" +msgid "" +"script must end with '.Rraw'. If a file ending '.Rraw.bz2' exists, that will " +"be found and used." +msgstr "" + +msgid "Neither" msgstr "" -msgid "does not exist" +msgid "exist in" msgstr "" msgid "Timings count mismatch:" diff --git a/po/data.table.pot b/po/data.table.pot index 6cdf59b216..ce7970e4d4 100644 --- a/po/data.table.pot +++ b/po/data.table.pot @@ -1,20 +1,20 @@ -# R::data.table src/ portability -# Copyright (C) 2019 +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the data.table package. -# Michael Chirico , 2019. +# FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: data.table 1.12.5\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-10-16 15:03+0800\n" -"PO-Revision-Date: 2019-10-16 15:03+0800\n" -"Last-Translator: Michael Chirico \n" +"POT-Creation-Date: 2019-10-16 22:40+0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" +"Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: assign.c:9 @@ -1334,144 +1334,144 @@ msgstr "" msgid "names(data) is NULL. Please report to data.table-help" msgstr "" -#: forder.c:103 +#: forder.c:106 #, c-format msgid "Failed to realloc thread private group size buffer to %d*4bytes" msgstr "" -#: forder.c:117 +#: forder.c:120 #, c-format msgid "Failed to realloc group size result to %d*4bytes" msgstr "" -#: forder.c:260 +#: forder.c:263 #, c-format msgid "" "Logical error. counts[0]=%d in cradix but should have been decremented to 0. " "radix=%d" msgstr "" -#: forder.c:275 +#: forder.c:278 msgid "Failed to alloc cradix_counts" msgstr "" -#: forder.c:277 +#: forder.c:280 msgid "Failed to alloc cradix_tmp" msgstr "" -#: forder.c:288 +#: forder.c:291 #, c-format msgid "" "Internal error: ustr isn't empty when starting range_str: ustr_n=%d, " "ustr_alloc=%d" msgstr "" -#: forder.c:289 +#: forder.c:292 msgid "Internal error: ustr_maxlen isn't 0 when starting range_str" msgstr "" -#: forder.c:309 +#: forder.c:312 #, c-format msgid "Unable to realloc %d * %d bytes in range_str" msgstr "" -#: forder.c:327 +#: forder.c:330 msgid "Failed to alloc ustr3 when converting strings to UTF8" msgstr "" -#: forder.c:345 +#: forder.c:348 msgid "Failed to alloc tl when converting strings to UTF8" msgstr "" -#: forder.c:374 +#: forder.c:377 msgid "Must an integer or numeric vector length 1" msgstr "" -#: forder.c:375 +#: forder.c:378 msgid "Must be 2, 1 or 0" msgstr "" -#: forder.c:409 +#: forder.c:412 msgid "Unknown non-finite value; not NA, NaN, -Inf or +Inf" msgstr "" -#: forder.c:431 +#: forder.c:434 msgid "" "Internal error: input is not either a list of columns, or an atomic vector." msgstr "" -#: forder.c:433 +#: forder.c:436 msgid "" "Internal error: input is an atomic vector (not a list of columns) but by= is " "not NULL" msgstr "" -#: forder.c:435 +#: forder.c:438 msgid "" "Input is an atomic vector (not a list of columns) but order= is not a length " "1 integer" msgstr "" -#: forder.c:437 +#: forder.c:440 #, c-format msgid "forder.c received a vector type '%s' length %d\n" msgstr "" -#: forder.c:445 +#: forder.c:448 #, c-format msgid "forder.c received %d rows and %d columns\n" msgstr "" -#: forder.c:448 +#: forder.c:451 forder.c:456 msgid "Internal error: DT is an empty list() of 0 columns" msgstr "" -#: forder.c:450 +#: forder.c:453 forder.c:458 #, c-format msgid "" "Internal error: DT has %d columns but 'by' is either not integer or is " "length 0" msgstr "" -#: forder.c:452 +#: forder.c:455 forder.c:460 #, c-format msgid "" "Either order= is not integer or its length (%d) is different to by='s length " "(%d)" msgstr "" -#: forder.c:458 +#: forder.c:466 #, c-format msgid "internal error: 'by' value %d out of range [1,%d]" msgstr "" -#: forder.c:460 +#: forder.c:468 #, c-format msgid "Column %d is length %d which differs from length of column 1 (%d)\n" msgstr "" -#: forder.c:464 +#: forder.c:472 msgid "retGrp must be TRUE or FALSE" msgstr "" -#: forder.c:467 +#: forder.c:475 msgid "sort must be TRUE or FALSE" msgstr "" -#: forder.c:470 +#: forder.c:478 msgid "At least one of retGrp= or sort= must be TRUE" msgstr "" -#: forder.c:472 +#: forder.c:480 msgid "na.last must be logical TRUE, FALSE or NA of length 1" msgstr "" -#: forder.c:514 +#: forder.c:524 #, c-format msgid "Item %d of order (ascending/descending) is %d. Must be +1 or -1." msgstr "" -#: forder.c:540 +#: forder.c:550 #, c-format msgid "" "\n" @@ -1480,51 +1480,51 @@ msgid "" "to save space and time.\n" msgstr "" -#: forder.c:556 +#: forder.c:566 #, c-format msgid "Column %d passed to [f]order is type '%s', not yet supported." msgstr "" -#: forder.c:705 +#: forder.c:719 msgid "Internal error: column not supported not caught earlier" msgstr "" -#: forder.c:713 +#: forder.c:727 #, c-format msgid "nradix=%d\n" msgstr "" -#: forder.c:719 +#: forder.c:733 #, c-format msgid "" "Failed to allocate TMP or UGRP or they weren't cache line aligned: nth=%d" msgstr "" -#: forder.c:724 +#: forder.c:738 msgid "Could not allocate (very tiny) group size thread buffers" msgstr "" -#: forder.c:785 +#: forder.c:799 #, c-format msgid "Timing block %2d%s = %8.3f %8d\n" msgstr "" -#: forder.c:788 +#: forder.c:802 #, c-format msgid "stat[%03d]==%10zd\n" msgstr "" -#: forder.c:1044 +#: forder.c:1058 #, c-format msgid "Failed to allocate parallel counts. my_n=%d, nBatch=%d" msgstr "" -#: forder.c:1153 +#: forder.c:1167 #, c-format msgid "Unable to allocate TMP for my_n=%d items in parallel batch counting" msgstr "" -#: forder.c:1260 +#: forder.c:1275 msgid "" "is.sorted (R level) and fsorted (C level) only to be used on vectors. If " "needed on a list/data.table, you'll need the order anyway if not sorted, so " @@ -1532,25 +1532,25 @@ msgid "" "C level" msgstr "" -#: forder.c:1292 +#: forder.c:1307 #, c-format msgid "type '%s' is not yet supported" msgstr "" -#: forder.c:1301 +#: forder.c:1316 msgid "x must be either NULL or an integer vector" msgstr "" -#: forder.c:1303 +#: forder.c:1318 msgid "nrow must be integer vector length 1" msgstr "" -#: forder.c:1305 +#: forder.c:1320 #, c-format msgid "nrow==%d but must be >=0" msgstr "" -#: forder.c:1322 +#: forder.c:1337 msgid "x must be type 'double'" msgstr "" @@ -2860,7 +2860,7 @@ msgstr "" msgid "%lld " msgstr "" -#: fsort.c:246 fwrite.c:692 fwrite.c:779 fwrite.c:890 fwrite.c:934 +#: fsort.c:246 fwrite.c:690 fwrite.c:947 msgid "\n" msgstr "" @@ -2879,49 +2879,49 @@ msgstr "" msgid "%d: %.3f (%4.1f%%)\n" msgstr "" -#: fwrite.c:603 +#: fwrite.c:601 #, c-format msgid "buffMB=%d outside [1,1024]" msgstr "" -#: fwrite.c:610 +#: fwrite.c:608 #, c-format msgid "" "eol must be 1 or more bytes (usually either \\n or \\r\\n) but is length %d" msgstr "" -#: fwrite.c:613 +#: fwrite.c:611 msgid "Column writers: " msgstr "" -#: fwrite.c:615 fwrite.c:617 fwrite.c:619 +#: fwrite.c:613 fwrite.c:615 fwrite.c:617 #, c-format msgid "%d " msgstr "" -#: fwrite.c:618 +#: fwrite.c:616 msgid "... " msgstr "" -#: fwrite.c:621 +#: fwrite.c:619 #, c-format msgid "" "\n" -"args.doRowNames=%d args.rowNames=%d doQuote=%d args.nrow=%d args.ncol=%d " +"args.doRowNames=%d args.rowNames=%d doQuote=%d args.nrow=%lld args.ncol=%d " "eolLen=%d\n" msgstr "" -#: fwrite.c:654 +#: fwrite.c:652 #, c-format msgid "Internal error: type %d has no max length method implemented" msgstr "" -#: fwrite.c:661 +#: fwrite.c:659 #, c-format msgid "maxLineLen=%zd. Found in %.3fs\n" msgstr "" -#: fwrite.c:681 +#: fwrite.c:679 #, c-format msgid "" "%s: '%s'. Failed to open existing file for writing. Do you have write " @@ -2929,7 +2929,7 @@ msgid "" "have it open?" msgstr "" -#: fwrite.c:682 +#: fwrite.c:680 #, c-format msgid "" "%s: '%s'. Unable to create new file for writing (it does not exist already). " @@ -2937,62 +2937,64 @@ msgid "" "the path exist?" msgstr "" -#: fwrite.c:690 +#: fwrite.c:688 #, c-format msgid "Writing bom (%s), yaml (%d characters) and column names (%s) ... " msgstr "" -#: fwrite.c:703 +#: fwrite.c:701 #, c-format msgid "Unable to allocate %d MiB for header: %s" msgstr "" -#: fwrite.c:731 fwrite.c:793 +#: fwrite.c:729 fwrite.c:789 msgid "Can't allocate gzip stream structure" msgstr "" -#: fwrite.c:737 +#: fwrite.c:735 #, c-format msgid "Unable to allocate %d MiB for zbuffer: %s" msgstr "" -#: fwrite.c:752 +#: fwrite.c:750 #, c-format msgid "Compress gzip error: %d" msgstr "" -#: fwrite.c:753 fwrite.c:761 fwrite.c:940 fwrite.c:949 +#: fwrite.c:751 fwrite.c:759 fwrite.c:953 #, c-format msgid "%s: '%s'" msgstr "" -#: fwrite.c:758 +#: fwrite.c:756 #, c-format msgid "done in %.3fs\n" msgstr "" -#: fwrite.c:760 +#: fwrite.c:758 msgid "No data rows present (nrow==0)\n" msgstr "" -#: fwrite.c:777 +#: fwrite.c:776 #, c-format msgid "" -"Writing %d rows in %d batches of %d rows (each buffer size %dMB, " -"showProgress=%d, nth=%d) ... " +"Writing %lld rows in %d batches of %d rows (each buffer size %dMB, " +"showProgress=%d, nth=%d)\n" msgstr "" -#: fwrite.c:946 +#: fwrite.c:961 #, c-format -msgid "" -"Error %d: one or more threads failed to allocate buffers or there was a " -"compression error." +msgid "zlib v%s deflate() returned error %d with z_stream.msg '%s'. %s\n" +msgstr "" + +#: fwrite.c:962 +msgid "Please include the full output above in your data.table bug report." msgstr "" -#: fwrite.c:947 +#: fwrite.c:963 msgid "" -" Please try again with verbose=TRUE and try searching online for this error " -"message.\n" +"Please retry fwrite() with verbose=TRUE and include the full output with " +"your data.table bug report." msgstr "" #: fwriteR.c:41 @@ -4026,7 +4028,7 @@ msgstr "" msgid "Item %d of n is NA" msgstr "" -#: shift.c:158 +#: shift.c:157 #, c-format msgid "Unsupported type '%s'" msgstr "" @@ -4290,19 +4292,19 @@ msgstr "" msgid "%s: fill argument must be numeric" msgstr "" -#: utils.c:274 +#: utils.c:273 #, c-format msgid "Internal error: unsupported type '%s' passed to copyAsPlain()" msgstr "" -#: utils.c:278 +#: utils.c:277 #, c-format msgid "" "Internal error: type '%s' passed to copyAsPlain() but it seems " "copyMostAttrib() retains ALTREP attributes" msgstr "" -#: utils.c:313 +#: utils.c:312 #, c-format msgid "Found and copied %d column%s with a shared memory address\n" msgstr "" diff --git a/po/zh_CN.po b/po/zh_CN.po index 3554bec910..432db4cb85 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-10-16 15:03+0800\n" +"POT-Creation-Date: 2019-10-16 22:10+0800\n" "PO-Revision-Date: 2019-10-04 17:06+08\n" "Last-Translator: Michael Chirico \n" "Language-Team: Mandarin\n" @@ -1328,144 +1328,144 @@ msgstr "" msgid "names(data) is NULL. Please report to data.table-help" msgstr "" -#: forder.c:103 +#: forder.c:106 #, c-format msgid "Failed to realloc thread private group size buffer to %d*4bytes" msgstr "" -#: forder.c:117 +#: forder.c:120 #, c-format msgid "Failed to realloc group size result to %d*4bytes" msgstr "" -#: forder.c:260 +#: forder.c:263 #, c-format msgid "" "Logical error. counts[0]=%d in cradix but should have been decremented to 0. " "radix=%d" msgstr "" -#: forder.c:275 +#: forder.c:278 msgid "Failed to alloc cradix_counts" msgstr "" -#: forder.c:277 +#: forder.c:280 msgid "Failed to alloc cradix_tmp" msgstr "" -#: forder.c:288 +#: forder.c:291 #, c-format msgid "" "Internal error: ustr isn't empty when starting range_str: ustr_n=%d, " "ustr_alloc=%d" msgstr "" -#: forder.c:289 +#: forder.c:292 msgid "Internal error: ustr_maxlen isn't 0 when starting range_str" msgstr "" -#: forder.c:309 +#: forder.c:312 #, c-format msgid "Unable to realloc %d * %d bytes in range_str" msgstr "" -#: forder.c:327 +#: forder.c:330 msgid "Failed to alloc ustr3 when converting strings to UTF8" msgstr "" -#: forder.c:345 +#: forder.c:348 msgid "Failed to alloc tl when converting strings to UTF8" msgstr "" -#: forder.c:374 +#: forder.c:377 msgid "Must an integer or numeric vector length 1" msgstr "" -#: forder.c:375 +#: forder.c:378 msgid "Must be 2, 1 or 0" msgstr "" -#: forder.c:409 +#: forder.c:412 msgid "Unknown non-finite value; not NA, NaN, -Inf or +Inf" msgstr "" -#: forder.c:431 +#: forder.c:434 msgid "" "Internal error: input is not either a list of columns, or an atomic vector." msgstr "" -#: forder.c:433 +#: forder.c:436 msgid "" "Internal error: input is an atomic vector (not a list of columns) but by= is " "not NULL" msgstr "" -#: forder.c:435 +#: forder.c:438 msgid "" "Input is an atomic vector (not a list of columns) but order= is not a length " "1 integer" msgstr "" -#: forder.c:437 +#: forder.c:440 #, c-format msgid "forder.c received a vector type '%s' length %d\n" msgstr "" -#: forder.c:445 +#: forder.c:448 #, c-format msgid "forder.c received %d rows and %d columns\n" msgstr "" -#: forder.c:448 +#: forder.c:451 forder.c:456 msgid "Internal error: DT is an empty list() of 0 columns" msgstr "" -#: forder.c:450 +#: forder.c:453 forder.c:458 #, c-format msgid "" "Internal error: DT has %d columns but 'by' is either not integer or is " "length 0" msgstr "" -#: forder.c:452 +#: forder.c:455 forder.c:460 #, c-format msgid "" "Either order= is not integer or its length (%d) is different to by='s length " "(%d)" msgstr "" -#: forder.c:458 +#: forder.c:466 #, c-format msgid "internal error: 'by' value %d out of range [1,%d]" msgstr "" -#: forder.c:460 +#: forder.c:468 #, c-format msgid "Column %d is length %d which differs from length of column 1 (%d)\n" msgstr "" -#: forder.c:464 +#: forder.c:472 msgid "retGrp must be TRUE or FALSE" msgstr "" -#: forder.c:467 +#: forder.c:475 msgid "sort must be TRUE or FALSE" msgstr "" -#: forder.c:470 +#: forder.c:478 msgid "At least one of retGrp= or sort= must be TRUE" msgstr "" -#: forder.c:472 +#: forder.c:480 msgid "na.last must be logical TRUE, FALSE or NA of length 1" msgstr "" -#: forder.c:514 +#: forder.c:524 #, c-format msgid "Item %d of order (ascending/descending) is %d. Must be +1 or -1." msgstr "" -#: forder.c:540 +#: forder.c:550 #, c-format msgid "" "\n" @@ -1474,51 +1474,51 @@ msgid "" "to save space and time.\n" msgstr "" -#: forder.c:556 +#: forder.c:566 #, c-format msgid "Column %d passed to [f]order is type '%s', not yet supported." msgstr "" -#: forder.c:705 +#: forder.c:719 msgid "Internal error: column not supported not caught earlier" msgstr "" -#: forder.c:713 +#: forder.c:727 #, c-format msgid "nradix=%d\n" msgstr "" -#: forder.c:719 +#: forder.c:733 #, c-format msgid "" "Failed to allocate TMP or UGRP or they weren't cache line aligned: nth=%d" msgstr "" -#: forder.c:724 +#: forder.c:738 msgid "Could not allocate (very tiny) group size thread buffers" msgstr "" -#: forder.c:785 +#: forder.c:799 #, c-format msgid "Timing block %2d%s = %8.3f %8d\n" msgstr "" -#: forder.c:788 +#: forder.c:802 #, c-format msgid "stat[%03d]==%10zd\n" msgstr "" -#: forder.c:1044 +#: forder.c:1058 #, c-format msgid "Failed to allocate parallel counts. my_n=%d, nBatch=%d" msgstr "" -#: forder.c:1153 +#: forder.c:1167 #, c-format msgid "Unable to allocate TMP for my_n=%d items in parallel batch counting" msgstr "" -#: forder.c:1260 +#: forder.c:1275 msgid "" "is.sorted (R level) and fsorted (C level) only to be used on vectors. If " "needed on a list/data.table, you'll need the order anyway if not sorted, so " @@ -1526,25 +1526,25 @@ msgid "" "C level" msgstr "" -#: forder.c:1292 +#: forder.c:1307 #, c-format msgid "type '%s' is not yet supported" msgstr "" -#: forder.c:1301 +#: forder.c:1316 msgid "x must be either NULL or an integer vector" msgstr "" -#: forder.c:1303 +#: forder.c:1318 msgid "nrow must be integer vector length 1" msgstr "" -#: forder.c:1305 +#: forder.c:1320 #, c-format msgid "nrow==%d but must be >=0" msgstr "" -#: forder.c:1322 +#: forder.c:1337 msgid "x must be type 'double'" msgstr "" @@ -2854,7 +2854,7 @@ msgstr "" msgid "%lld " msgstr "" -#: fsort.c:246 fwrite.c:692 fwrite.c:779 fwrite.c:890 fwrite.c:934 +#: fsort.c:246 fwrite.c:690 fwrite.c:947 msgid "\n" msgstr "" @@ -2873,49 +2873,49 @@ msgstr "" msgid "%d: %.3f (%4.1f%%)\n" msgstr "" -#: fwrite.c:603 +#: fwrite.c:601 #, c-format msgid "buffMB=%d outside [1,1024]" msgstr "" -#: fwrite.c:610 +#: fwrite.c:608 #, c-format msgid "" "eol must be 1 or more bytes (usually either \\n or \\r\\n) but is length %d" msgstr "" -#: fwrite.c:613 +#: fwrite.c:611 msgid "Column writers: " msgstr "" -#: fwrite.c:615 fwrite.c:617 fwrite.c:619 +#: fwrite.c:613 fwrite.c:615 fwrite.c:617 #, c-format msgid "%d " msgstr "" -#: fwrite.c:618 +#: fwrite.c:616 msgid "... " msgstr "" -#: fwrite.c:621 +#: fwrite.c:619 #, c-format msgid "" "\n" -"args.doRowNames=%d args.rowNames=%d doQuote=%d args.nrow=%d args.ncol=%d " +"args.doRowNames=%d args.rowNames=%d doQuote=%d args.nrow=%lld args.ncol=%d " "eolLen=%d\n" msgstr "" -#: fwrite.c:654 +#: fwrite.c:652 #, c-format msgid "Internal error: type %d has no max length method implemented" msgstr "" -#: fwrite.c:661 +#: fwrite.c:659 #, c-format msgid "maxLineLen=%zd. Found in %.3fs\n" msgstr "" -#: fwrite.c:681 +#: fwrite.c:679 #, c-format msgid "" "%s: '%s'. Failed to open existing file for writing. Do you have write " @@ -2923,7 +2923,7 @@ msgid "" "have it open?" msgstr "" -#: fwrite.c:682 +#: fwrite.c:680 #, c-format msgid "" "%s: '%s'. Unable to create new file for writing (it does not exist already). " @@ -2931,62 +2931,64 @@ msgid "" "the path exist?" msgstr "" -#: fwrite.c:690 +#: fwrite.c:688 #, c-format msgid "Writing bom (%s), yaml (%d characters) and column names (%s) ... " msgstr "" -#: fwrite.c:703 +#: fwrite.c:701 #, c-format msgid "Unable to allocate %d MiB for header: %s" msgstr "" -#: fwrite.c:731 fwrite.c:793 +#: fwrite.c:729 fwrite.c:789 msgid "Can't allocate gzip stream structure" msgstr "" -#: fwrite.c:737 +#: fwrite.c:735 #, c-format msgid "Unable to allocate %d MiB for zbuffer: %s" msgstr "" -#: fwrite.c:752 +#: fwrite.c:750 #, c-format msgid "Compress gzip error: %d" msgstr "" -#: fwrite.c:753 fwrite.c:761 fwrite.c:940 fwrite.c:949 +#: fwrite.c:751 fwrite.c:759 fwrite.c:953 #, c-format msgid "%s: '%s'" msgstr "" -#: fwrite.c:758 +#: fwrite.c:756 #, c-format msgid "done in %.3fs\n" msgstr "" -#: fwrite.c:760 +#: fwrite.c:758 msgid "No data rows present (nrow==0)\n" msgstr "" -#: fwrite.c:777 +#: fwrite.c:776 #, c-format msgid "" -"Writing %d rows in %d batches of %d rows (each buffer size %dMB, " -"showProgress=%d, nth=%d) ... " +"Writing %lld rows in %d batches of %d rows (each buffer size %dMB, " +"showProgress=%d, nth=%d)\n" msgstr "" -#: fwrite.c:946 +#: fwrite.c:961 #, c-format -msgid "" -"Error %d: one or more threads failed to allocate buffers or there was a " -"compression error." +msgid "zlib v%s deflate() returned error %d with z_stream.msg '%s'. %s\n" +msgstr "" + +#: fwrite.c:962 +msgid "Please include the full output above in your data.table bug report." msgstr "" -#: fwrite.c:947 +#: fwrite.c:963 msgid "" -" Please try again with verbose=TRUE and try searching online for this error " -"message.\n" +"Please retry fwrite() with verbose=TRUE and include the full output with " +"your data.table bug report." msgstr "" #: fwriteR.c:41 @@ -4020,7 +4022,7 @@ msgstr "" msgid "Item %d of n is NA" msgstr "" -#: shift.c:158 +#: shift.c:157 #, c-format msgid "Unsupported type '%s'" msgstr "" @@ -4284,19 +4286,19 @@ msgstr "" msgid "%s: fill argument must be numeric" msgstr "" -#: utils.c:274 +#: utils.c:273 #, c-format msgid "Internal error: unsupported type '%s' passed to copyAsPlain()" msgstr "" -#: utils.c:278 +#: utils.c:277 #, c-format msgid "" "Internal error: type '%s' passed to copyAsPlain() but it seems " "copyMostAttrib() retains ALTREP attributes" msgstr "" -#: utils.c:313 +#: utils.c:312 #, c-format msgid "Found and copied %d column%s with a shared memory address\n" msgstr "" diff --git a/src/forder.c b/src/forder.c index 275bc996ff..3b2eb8b55a 100644 --- a/src/forder.c +++ b/src/forder.c @@ -469,10 +469,10 @@ SEXP forder(SEXP DT, SEXP by, SEXP retGrpArg, SEXP sortGroupsArg, SEXP ascArg, S if (TYPEOF(VECTOR_ELT(DT, by_i-1)) == CPLXSXP) n_cplx++; } if (!isLogical(retGrpArg) || LENGTH(retGrpArg)!=1 || INTEGER(retGrpArg)[0]==NA_LOGICAL) - STOP(_("retGrp= must be TRUE or FALSE")); + STOP(_("retGrp must be TRUE or FALSE")); retgrp = LOGICAL(retGrpArg)[0]==TRUE; if (!isLogical(sortGroupsArg) || LENGTH(sortGroupsArg)!=1 || INTEGER(sortGroupsArg)[0]==NA_LOGICAL ) - STOP(_("sort= must be TRUE or FALSE")); + STOP(_("sort must be TRUE or FALSE")); sortType = LOGICAL(sortGroupsArg)[0]==TRUE; // if sortType is 1, it is later flipped between +1/-1 according to ascArg. Otherwise ascArg is ignored when sortType==0 if (!retgrp && !sortType) STOP(_("At least one of retGrp= or sort= must be TRUE")); From a0139bb8d69fe1f29244ddfcd5d6c2979970f33d Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Thu, 17 Oct 2019 00:13:23 +0800 Subject: [PATCH 16/22] add template message in onAttach() & clear typos/PYDT issue along the way --- R/onAttach.R | 2 ++ inst/po/en@quot/LC_MESSAGES/R-data.table.mo | Bin 87262 -> 88074 bytes inst/po/en@quot/LC_MESSAGES/data.table.mo | Bin 137326 -> 137130 bytes inst/po/zh_CN/LC_MESSAGES/R-data.table.mo | Bin 463 -> 504 bytes po/R-data.table.pot | 11 ++++++++- po/R-zh_CN.po | 16 ++++++++++++- po/data.table.pot | 24 ++++++-------------- po/zh_CN.po | 24 ++++++-------------- src/data.table.h | 8 +------ src/fread.c | 10 ++++---- src/freadR.c | 8 +++---- src/freadR.h | 1 + src/fwrite.h | 1 + src/init.c | 2 +- src/openmp-utils.c | 2 +- src/po.h | 6 +++++ src/rbindlist.c | 2 +- 17 files changed, 62 insertions(+), 55 deletions(-) create mode 100644 src/po.h diff --git a/R/onAttach.R b/R/onAttach.R index 95eb93249a..397b0b93dc 100644 --- a/R/onAttach.R +++ b/R/onAttach.R @@ -20,6 +20,8 @@ if (!isTRUE(getOption("datatable.quiet"))) { # new option in v1.12.4, #3489 packageStartupMessage("data.table ", v, if(dev)paste0(" IN DEVELOPMENT built ",d,g), " using ", getDTthreads(verbose=FALSE), " threads (see ?getDTthreads). Latest news: r-datatable.com") + if (gettext("TRANSLATION CHECK", domain='R-data.table') != "TRANSLATION CHECK") + packageStartupMessage(gettext("**********\n", "Running data.table in English; package support is available in English only. When searching for online help, be sure to also check for the English error message. This can be obtained by looking at the po/R-.po and po/.po files in the package source, where the native language and English error messages can be found side-by-side")) if (dev && (Sys.Date() - as.Date(d))>28L) packageStartupMessage("**********\nThis development version of data.table was built more than 4 weeks ago. Please update: data.table::update.dev.pkg()\n**********") if (!.Call(ChasOpenMP)) 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 051c963766c998d4d13b35d619fbe858af2c3a66..70ec2614b453a12fbdad9f3ed17bab57f75ac443 100644 GIT binary patch delta 13270 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

8xqSp)U9Xszpwsn*1@gz%1#lD@LQ9@LyE@pbS2D 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 delta 17879 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 delta 105 zcmeyte4aV>o)F7a1|VPtVi_Pd0b*7l_5orLNC09rAWj5gHX!Z*Vm?L&hJGNe0mSow bY<3`h97qEZ*c>3mzyu;D<{E9>=)ed7Ufv4Y diff --git a/po/R-data.table.pot b/po/R-data.table.pot index 3d31b50fab..fac36fde7e 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.5\n" -"POT-Creation-Date: 2019-10-16 22:08\n" +"POT-Creation-Date: 2019-10-17 00:12\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -1360,6 +1360,15 @@ msgstr "" msgid "threads (see ?getDTthreads). Latest news: r-datatable.com" msgstr "" +msgid "TRANSLATION CHECK" +msgstr "" + +msgid "**********" +msgstr "" + +msgid "Running data.table in English; package support is available in English only. When searching for online help, be sure to also check for the English error message. This can be obtained by looking at the po/R-.po and po/.po files in the package source, where the native language and English error messages can be found side-by-side" +msgstr "" + msgid "**********\nThis development version of data.table was built more than 4 weeks ago. Please update: data.table::update.dev.pkg()\n**********" msgstr "" diff --git a/po/R-zh_CN.po b/po/R-zh_CN.po index e6b15b9ba3..d3a9e851b4 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-10-16 22:08\n" +"POT-Creation-Date: 2019-10-17 00:12\n" "PO-Revision-Date: 2019-10-04 17:06+08\n" "Last-Translator: Michael Chirico \n" "Language-Team: Mandarin\n" @@ -1652,6 +1652,20 @@ msgstr "" msgid "threads (see ?getDTthreads). Latest news: r-datatable.com" msgstr "" +msgid "TRANSLATION CHECK" +msgstr "中文" + +msgid "**********" +msgstr "" + +msgid "" +"Running data.table in English; package support is available in English only. " +"When searching for online help, be sure to also check for the English error " +"message. This can be obtained by looking at the po/R-.po and po/" +".po files in the package source, where the native language and " +"English error messages can be found side-by-side" +msgstr "" + msgid "" "**********\n" "This development version of data.table was built more than 4 weeks ago. " diff --git a/po/data.table.pot b/po/data.table.pot index ce7970e4d4..8d350a80c8 100644 --- a/po/data.table.pot +++ b/po/data.table.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: data.table 1.12.5\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-10-16 22:40+0800\n" +"POT-Creation-Date: 2019-10-17 00:04+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -1602,12 +1602,6 @@ msgstr "" msgid "Internal error. Argument 'cols' to CanyNA is type '%s' not 'integer'" msgstr "" -#: fread.c:106 -#, c-format -msgid "" -"Internal error in line %d of fread.c, please report on data.table GitHub: " -msgstr "" - #: fread.c:149 #, c-format msgid "System error %d unmapping view of file\n" @@ -2248,11 +2242,6 @@ msgid "" "Column %d (\"%.*s\") bumped from '%s' to '%s' due to <<%.*s>> on row %llu\n" msgstr "" -#: fread.c:2330 fread.c:2465 freadR.c:660 -#, c-format -msgid "%s" -msgstr "" - #: fread.c:2337 #, c-format msgid "" @@ -2306,7 +2295,7 @@ msgstr "" msgid "" "Found and resolved improper quoting out-of-sample. First healed line %llu: <<" "%s>>. If the fields are not quoted (e.g. field separator does not appear " -"within any field), try quote=\")\" to avoid this warning." +"within any field), try quote=\"\" to avoid this warning." msgstr "" #: fread.c:2441 @@ -2525,10 +2514,6 @@ msgstr "" msgid "" "colClasses= is an unnamed vector of types, length %d, but there are %d " "columns in the input. To specify types for a subset of columns, you can use " -msgstr "" - -#: freadR.c:319 -msgid "" "a named vector, list format, or specify types using select= instead of " "colClasses=. Please see examples in ?fread." msgstr "" @@ -2580,6 +2565,11 @@ msgstr "" msgid "Internal error: unexpected field of size %d\n" msgstr "" +#: freadR.c:660 +#, c-format +msgid "%s" +msgstr "" + #: froll.c:18 froll.c:227 froll.c:411 #, c-format msgid "%s: window width longer than input vector, returning all NA vector\n" diff --git a/po/zh_CN.po b/po/zh_CN.po index 432db4cb85..1f9f948579 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-10-16 22:10+0800\n" +"POT-Creation-Date: 2019-10-17 00:04+0800\n" "PO-Revision-Date: 2019-10-04 17:06+08\n" "Last-Translator: Michael Chirico \n" "Language-Team: Mandarin\n" @@ -1596,12 +1596,6 @@ msgstr "" msgid "Internal error. Argument 'cols' to CanyNA is type '%s' not 'integer'" msgstr "" -#: fread.c:106 -#, c-format -msgid "" -"Internal error in line %d of fread.c, please report on data.table GitHub: " -msgstr "" - #: fread.c:149 #, c-format msgid "System error %d unmapping view of file\n" @@ -2242,11 +2236,6 @@ msgid "" "Column %d (\"%.*s\") bumped from '%s' to '%s' due to <<%.*s>> on row %llu\n" msgstr "" -#: fread.c:2330 fread.c:2465 freadR.c:660 -#, c-format -msgid "%s" -msgstr "" - #: fread.c:2337 #, c-format msgid "" @@ -2300,7 +2289,7 @@ msgstr "" msgid "" "Found and resolved improper quoting out-of-sample. First healed line %llu: <<" "%s>>. If the fields are not quoted (e.g. field separator does not appear " -"within any field), try quote=\")\" to avoid this warning." +"within any field), try quote=\"\" to avoid this warning." msgstr "" #: fread.c:2441 @@ -2519,10 +2508,6 @@ msgstr "" msgid "" "colClasses= is an unnamed vector of types, length %d, but there are %d " "columns in the input. To specify types for a subset of columns, you can use " -msgstr "" - -#: freadR.c:319 -msgid "" "a named vector, list format, or specify types using select= instead of " "colClasses=. Please see examples in ?fread." msgstr "" @@ -2574,6 +2559,11 @@ msgstr "" msgid "Internal error: unexpected field of size %d\n" msgstr "" +#: freadR.c:660 +#, c-format +msgid "%s" +msgstr "" + #: froll.c:18 froll.c:227 froll.c:411 #, c-format msgid "%s: window width longer than input vector, returning all NA vector\n" diff --git a/src/data.table.h b/src/data.table.h index dd27e7f571..c8ebd65e1b 100644 --- a/src/data.table.h +++ b/src/data.table.h @@ -7,6 +7,7 @@ #include #include "myomp.h" #include "types.h" +#include "po.h" // data.table depends on R>=3.0.0 when R_xlen_t was introduced // Before R 3.0.0, RLEN used to be switched to R_len_t as R_xlen_t wasn't available. @@ -63,13 +64,6 @@ typedef R_xlen_t RLEN; #define ALTREP(x) 0 // for R<3.5.0, see issue #2866 and grep for "ALTREP" to see comments where it's used #endif -#ifdef ENABLE_NLS -#include -#define _(String) dgettext ("data.table", String) -#else -#define _(String) (String) -#endif - // init.c SEXP char_integer64; SEXP char_ITime; diff --git a/src/fread.c b/src/fread.c index 296bb7c336..16b85695b3 100644 --- a/src/fread.c +++ b/src/fread.c @@ -103,7 +103,7 @@ typedef struct FieldParseContext { static void Field(FieldParseContext *ctx); #define ASSERT(cond, msg, ...) \ - if (!(cond)) STOP(_("Internal error in line %d of fread.c, please report on data.table GitHub: ") msg, __LINE__, __VA_ARGS__) // # nocov + if (!(cond)) STOP("Internal error in line %d of fread.c, please report on data.table GitHub: " msg, __LINE__, __VA_ARGS__) // # nocov @@ -1565,7 +1565,7 @@ int freadMain(freadMainArgs _args) { quoteRule = topQuoteRule; if (quoteRule>1 && quote) { - DTWARN(_("Found and resolved improper quoting in first %d rows. If the fields are not quoted (e.g. field separator does not appear within any field), try quote=\")\" to avoid this warning.", jumpLines); + DTWARN(_("Found and resolved improper quoting in first %d rows. If the fields are not quoted (e.g. field separator does not appear within any field), try quote=\")\" to avoid this warning."), jumpLines); // TODO: include line number and text in warning. Could loop again with the standard quote rule to find the line that fails. } sep = topSep; @@ -2327,7 +2327,7 @@ int freadMain(freadMainArgs _args) { if (stopTeam) { if (internalErr[0]!='\0') { - STOP(_("%s"), internalErr); // # nocov + STOP("%s", internalErr); // # nocov } stopTeam = false; @@ -2434,7 +2434,7 @@ int freadMain(freadMainArgs _args) { } } if (quoteRuleBumpedCh!=NULL && quoteRuleBumpedCh>. If the fields are not quoted (e.g. field separator does not appear within any field), try quote=\")\" to avoid this warning.", (llu)quoteRuleBumpedLine, strlim(quoteRuleBumpedCh, 500)); + DTWARN(_("Found and resolved improper quoting out-of-sample. First healed line %llu: <<%s>>. If the fields are not quoted (e.g. field separator does not appear within any field), try quote=\"\" to avoid this warning."), (llu)quoteRuleBumpedLine, strlim(quoteRuleBumpedCh, 500)); } if (verbose) { @@ -2462,7 +2462,7 @@ int freadMain(freadMainArgs _args) { // if type bumps happened, it's useful to see them at the end after the timing 2 lines up showing the reread time // TODO - construct and output the copy and pastable colClasses argument so user can avoid the reread time if they are // reading this file or files formatted like it many times (say in a production environment). - DTPRINT(_("%s"), typeBumpMsg); + DTPRINT("%s", typeBumpMsg); free(typeBumpMsg); // local scope and only populated in verbose mode } } diff --git a/src/freadR.c b/src/freadR.c index 2834010074..f946cf6e8c 100644 --- a/src/freadR.c +++ b/src/freadR.c @@ -89,7 +89,7 @@ SEXP freadR( ch = args.input; while (*ch!='\0' && *ch!='\n' && *ch!='\r') ch++; if (*ch!='\0' || args.input[0]=='\0') { - if (verbose) DTPRINT(_("Input contains a \\n or is \")\". Taking this to be text input (not a filename)\n"); + if (verbose) DTPRINT(_("Input contains a \\n or is \")\". Taking this to be text input (not a filename)\n")); args.filename = NULL; } else { if (verbose) DTPRINT(_("Input contains no \\n. Taking this to be a filename to open\n")); @@ -109,7 +109,7 @@ SEXP freadR( args.quote = '\0'; } else { if (!isString(quoteArg) || LENGTH(quoteArg)!=1 || strlen(CHAR(STRING_ELT(quoteArg,0))) > 1) - error(_("quote= must be a single character, blank \")\", or FALSE"); + error(_("quote= must be a single character, blank \")\", or FALSE")); args.quote = CHAR(STRING_ELT(quoteArg,0))[0]; } @@ -315,8 +315,8 @@ bool userOverride(int8_t *type, lenOff *colNames, const char *anchor, int ncol) if (INTEGER(typeEnum_idx)[0]==NUT) for (int i=0; i +#include "po.h" #define FREAD_MAIN_ARGS_EXTRA_FIELDS diff --git a/src/fwrite.h b/src/fwrite.h index f4219d003d..b03bb571aa 100644 --- a/src/fwrite.h +++ b/src/fwrite.h @@ -3,6 +3,7 @@ #else #define STRICT_R_HEADERS #include + #include "po.h" #define STOP error #define DTPRINT Rprintf #endif diff --git a/src/init.c b/src/init.c index 2a4deebfd8..716df8f7fc 100644 --- a/src/init.c +++ b/src/init.c @@ -287,7 +287,7 @@ void attribute_visible R_init_datatable(DllInfo *info) if (TYPEOF(char_integer64) != CHARSXP) { // checking one is enough in case of any R-devel changes - error(_("PRINTNAME(install(\")integer64\")) has returned %s not %s", type2char(TYPEOF(char_integer64)), type2char(CHARSXP)); // # nocov + error(_("PRINTNAME(install(\")integer64\")) has returned %s not %s"), type2char(TYPEOF(char_integer64)), type2char(CHARSXP)); // # nocov } // create commonly used symbols, same as R_*Symbol but internal to DT diff --git a/src/openmp-utils.c b/src/openmp-utils.c index f1d732459f..b901601843 100644 --- a/src/openmp-utils.c +++ b/src/openmp-utils.c @@ -19,7 +19,7 @@ static int getIntEnv(const char *name, int def) long int ans = strtol(val, &end, 10); // ignores leading whitespace. If it fully consumed the string, *end=='\0' and isspace('\0')==false while (isspace(*end)) end++; // ignore trailing whitespace if (errno || (size_t)(end-val)!=nchar || ans<1 || ans>INT_MAX) { - warning(_("Ignoring invalid %s==\")%s\". Not an integer >= 1. Please remove any characters that are not a digit [0-9]. See ?data.table::setDTthreads.", name, val); + warning(_("Ignoring invalid %s==\")%s\". Not an integer >= 1. Please remove any characters that are not a digit [0-9]. See ?data.table::setDTthreads."), name, val); return def; } return (int)ans; diff --git a/src/po.h b/src/po.h new file mode 100644 index 0000000000..8392f6b375 --- /dev/null +++ b/src/po.h @@ -0,0 +1,6 @@ +#ifdef ENABLE_NLS +#include +#define _(String) dgettext ("data.table", String) +#else +#define _(String) (String) +#endif diff --git a/src/rbindlist.c b/src/rbindlist.c index a882648305..902aed62a4 100644 --- a/src/rbindlist.c +++ b/src/rbindlist.c @@ -7,7 +7,7 @@ SEXP rbindlist(SEXP l, SEXP usenamesArg, SEXP fillArg, SEXP idcolArg) if (!isLogical(fillArg) || LENGTH(fillArg) != 1 || LOGICAL(fillArg)[0] == NA_LOGICAL) error(_("fill= should be TRUE or FALSE")); if (!isLogical(usenamesArg) || LENGTH(usenamesArg)!=1) - error(_("use.names= should be TRUE, FALSE, or not used (\")check\" by default)"); // R levels converts "check" to NA + error(_("use.names= should be TRUE, FALSE, or not used (\")check\" by default)")); // R levels converts "check" to NA if (!length(l)) return(l); if (TYPEOF(l) != VECSXP) error(_("Input to rbindlist must be a list. This list can contain data.tables, data.frames or plain lists.")); Rboolean usenames = LOGICAL(usenamesArg)[0]; From a37bde34fb11a3e4176658f1fe3fa22565e1c4e6 Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Fri, 18 Oct 2019 01:04:58 +0800 Subject: [PATCH 17/22] remove some strings --- inst/po/en@quot/LC_MESSAGES/data.table.mo | Bin 137130 -> 137036 bytes po/data.table.pot | 16 +--------------- po/zh_CN.po | 16 +--------------- src/types.c | 6 +++--- 4 files changed, 5 insertions(+), 33 deletions(-) diff --git a/inst/po/en@quot/LC_MESSAGES/data.table.mo b/inst/po/en@quot/LC_MESSAGES/data.table.mo index 6e450d9931d1a8ee40f1296ad236d35542090d8b..ed8b7ed95b5e9261d6e9a440cb318b8d31f8f0f9 100644 GIT binary patch delta 17585 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 F?tlI|--G}F delta 17679 zcmZwP1#}iy+wSpsf;$8V5+n%(Ns!!hPCR~}paVo}j zoIHh8>Nv$KIgSrYU{)-Jo3R--#w3*;r#iO95Zr)S@HB?uL(GdQs&EXJ!HM_>(!b?;egI8H`vfIYA$ z>V~eNj{Ar?xW1FWrk$WMc4fz0)PYVd4uW7TjFV9Z9>CQ281-avVt6_%fHa;{9#3I2 ztc|(&5s8B^AFjaccusPC=M@=UAX6R33B-Ds8{4B!I30Ds8qd>Mg7}#i=c(&BG>TIX z^@Izt2kyiC7+KF+t{J8vo{HR?vk3h~$^1!1PaImGe!BjA~#f?ud#fVIe$# zy0Pb;=^I*H1}jqD7SrNtOpkj}*SUz{_@p82Uw}+dBO5f;a366eEQ8^Uu=v;xQ(;$3 zgTt{U&P4V76U>GAKe6&ANH01&Q8y5$2?;Zx261LAj%AwA{;A0fq#zzn#sHjw5jYzY z;(p{IogZ-o2Gcx=aUmwbRj7JfaS`su)%eM$j3@knt#A%gpf|q2DD2>GZg)NpLn%1m z#kWv>nYe|O=fz>fb+8bgMD72Gr7(=<(BNu`g>f1V!Gl-?OLO&T?2F}bJ2HM9|4T9& z6ct)qpVdc=)_Ir(4f-jP%iBs0WMeq89TzP7N}BDHwuB@S(edgIEkgh;N~qG@zUHSurd|+!@ssOHtG8 z0%pUw-5Fq*3&XGq()~^s9Ds*02bN@xX5jix8!~FzVR#zX;wBu_)A}w)FIx|qqwah> zX2(^?xttTo65WM47?7H*hM>#OzFkdAI|$PQ(mlz~jK7 zw0~nVyC`5>I4PN9)p0QT7%T_zC*s4yt?y=kW-D2u5sq_|@-Q4jy$8rWIXy<&!gUAB z6NinmrMf+;MV6pu!y!})-}aNKMJDZN1_ZW6jrzr?6W+o`*klYhhnp}R9>79)8H;0* zu{1YULJo1h!3tPxoLzV*a*xheSOl|-x0d!dB%{%~8Z+WyEQr6MDh5ulg{2yHARdIe z;B{0>1x>X2t+6ceY%GW8uqXyja-6zY9hpeZLadMRCc9(K?=&G3MZpZzVEh5|;}g`0 zLZVkVib$h4 zN0DA|>MUS@a((9_88v0wFKqB^z!>5`QPZ*bLK~$0QA_bjRNvVn%)U6y8% z9bW^h5-&iV|E6ceVmoht^fM!zEoAm$#1gyHd!Ajt;*Ci8BUG0RUTR&n1{)Cnij^?$ zGP5sMCff{v0&9Hj=LeYqU-JQp-=m(i`5JR7YBuae zjoQap3M;I2-(JoL)DxY@mKeCsR?i#O+=hC>V%u&1cI-!7;u{+q8*wnP?^|;y79xI* zp_p@rJ6Qcrbuwir@MAIDhw6fts2d62N&n(7tci=TFy2RXUFPqsZ#$#9Y7KVBtEiT! zw#&}n2h{?bu`<5KA)5bXciR&D9qNF1du+|lhsB9Iqq<}n>c)Ib6-}!GsCWqKM%JS0 zy+A!_!+m_X;zTTm4?Xkjw?W$-i*kKuFPSiWj(W1712))dVrk+fs5`%kx}ogf^D%)f zFgN~)y78x&2Q&U)4^S0#{3z57@5izj|DcVX%IMbty~*fF7NeT{G#0^ZhpbDQqAolW zb)pm41_KXU)AmQ*_%1Wc8S2K09kbW*G}H;3AGcr87GMN%f)lnb6vVp3^RWTmM@`?-C#~;4$9lvUPx@^s z&3VdkhEmWK8CT9-td5IM+x~mlj5y*a`_*bZszqMl1I&BI-T~=;w)&M(H#pJrFqR{B z&YIB}NI23@CYsD_Y>yXklaKy8$4JNf=k5JH?xNLOhvljF7pg__Ua}`2gQjq>!jY;-q5HT4{9h!;>7%>BD{>2~DQ&U=jS^YayZo4HNF?K}J? zOZg(~gD0>CmcGyE=R6be3*yHNkZ7FrCl|#N zxB!p+#p1>Foi-1xN&Og2d=f)3=_4DZ`OqCK*qrj&m;s+)I!yex{az4;I&pba3tqwH z*y}NC2nIf}@~t?ZxXM%de-@b=WK^-wGpms1xt(Y&&ZWG<3mXf+U=HHAFU?3CNL(M) z0^2?|TC4OT|a$(Fw+}VrAy`lYe$Ga#PpVTAxQ?0C9CMu7x*=yI~mCa(wPfsTUR}KI56t=W~~Ge|a+1 z*)a)2@I02l7pPI6FTm$MNq;Ov{2dm-hnNw=;`rR@SO)b(O;Jxe5+iXw7Q;iRzJH7H zd@O2lefr4tI}t=W(O@iqvr$cZ1dHNJtcQ8x``i{7ff`J!aRfd`ow#oTpZmMvm#7x~ z2X($o34Km-tc^Xf1*#=aVF=fEUXalNX%m^Huq<&KR2M8o4XWL!8;z6LS|SSu64yuF zXa@|%MX0f}A2Z{5)F6C{da&RmKBqj^#JXJHnMOuka08<;S5mVJY6V<}ZEz2k!OY3* zNt>Z=d40)5T}jGNl$t`EPWo;*VupZnR~EDh^#G78pH zFc^2Cnz&$EpZhk8K{a73?2n(Jn)(@P9_J3SL01LURXtFBI{~$SGinx`LOt77au|0z*~&Q z^cj5a0@f506HmwN_=TTLHZuEB)8}_DPL$Cq~sIr zniVxTi=$ewCaPt-U|SrE1JQqvjHXY^Ox83LP#63f)gmWRP5w8w#PH146=P9P_%Et{ zP!^xNl$S(}oq?z)T!tFFN3k{L%Ib6fBr^#cYW@d@_}pJ4dSg>6Jj4*J5^6Wl30D(O zMy>q?!hG)Ucr8&+bOiOJH&HkI9HTHOo6r4FsfwD;vr)6`9R7@%viqF-n*Wc;=m{=` zTNA#)7~%{$>SK)NGl88l<~X=f8k? zH2=eL+dQv>YSPxI(fS#xkJqD`^hd0O&rnTUEW+o$|C^(xTYrqkrC8X<2MdA|l*hU@ zJ#Hp0j*am?`qd=m^7`B+pM)Aj>rhR39No1ZTM>ul^Ep#-Gk~cBmUVi&{copk_<< zLO%B|AvIBJ`*hTpc<;sOX@!?X>dgw{oi75%F|Y|E*X!y@tqioH@!HZvNd@m zs=PK1!``T-f9UNGsltk>`CpNY2A3Z-m^R@Myp8I!7FBIt&&Kk^7qAuvRkJbC4z)1# zLyei8sIhbpJ7ePN)>ZxR9q}sE7+YS0`LBv8YuX?zgc=mXQ72r6+3+r^&lAY^crr*Fut^j;+z-F)r~D)YtF{+=lNl z(#Ibv>)K$uR?jZ{7W=Y4qQ1}lr<=v7ODx;=pFH{Rp z$HBPWPo_4RJWXwo48yL(uTW3c_EUQ&TtwaIGt^q2qnWipebndmDAbefLQTt;sA-(D zx!DUfmUg0U;1TLU{edm4Zwq^VimEUY)gr4<)9Ey7WqXZkfv}clb=27CjrDLIw!r(I zRa*Jn-}_gh#z4x}_SPJP?KJ<7kMa(~-sk?YsVQn@`~l-JR#J5ExxeS9?dWs=DD?uF%@PRU}GQ(1BvGkp#4jdSx14I?k;LNclYY?JHs6Jnada^6n8$+kt z7@6gH2-{Qs0vl-lH~rj3?MBoBaTE3auR6m9+icX>_yb#G#7tX|rl4+g2Wq|W&9Wz5 z?0FhBxZk7JiKyAuaucv2@gXd$_ka31_SO0cYE%sjF7mnmbdzMUy=!KmUlo!r@wxwYGYdZ< zj{lX<8ICPIucB70CQI$5F%>mfH=$O@JE)cmTV`GGDQa3y#t^)Tx*^|kdkx2+x^DDx z=D!BbX$sU=$yV5hK{To*Hli+Y3AGNSS!vU(1?qLY0`(=7d6m`giY16=qni3Ow!-+U z?EyNX-iixRv*P#F%zxcU;MZ2M1?oxnq5ASE>INIFG3R0(;)|#iGJLIlYBfiFVEC~< zeuJek!8*I~N~m}m_P`UUw`pPaeWv1v0Gb)vJV zL6>-|9aj{!Ge>~k2l@py4bvR4{jJfjK{A7kme^ycCrNtLzEt|4-iDK~8$QNK*z8C9b^9((#Luu@$lr>TNm*HCB#e zbG(Kbu*9#{5)J%h!YJs4i*Ob$!2DP2uU^M+x%OYR^1y5Mwp)+$D6e|m>fJycH|~a= zC(Cd4%j+K0`q1d6&9ZTxTW}!d{;Om(y6fMv3bRmyWgn_*{zWaZMSr)^JO(vLH=ycW zLLDD?+s06R3?-h2dOLoH8iXHF3s&JfHZ9vAE2!UDNk)Bs6?LI(cWo^6#sb8fQA_eI z48gR2*veKEwczwbHR)oE#GRN1Z=-JXH4ebAd-e&p0M#O)_thoLzj|cKQ?LoO5IsSy z@xc%54-nljhE{%!wy4H9p5InBXt|V8QjB z9As3G8}DE>)R@To&|X4yQA_VPo{vy1mgA9)?w%MzychNExQ?1`>HfAZX@P3NWvEeq z5i??v$IO4t#~ftzL={j^+6C2=BT;?40rfh*kMVr`L-P|G-RYj%iMpV=YAmX0cc9)0 zf1p;n&}Y^HgHT=k6^_P-&zS!j9KD{~zi6yPHR(sx3BzC5zukO-J&8M_n(`us;Cod4 zEHBMUSev*js;hRPz8lV?o;cG#))K`~)3Vz?%zs9qGlGIp{1!EME~9?6dWafCiC@`) zg|R$wXVgn-9ahJ;7>$)*+goouY6U!r9q=0JxC;Mze||^Z_&q-vHF>f(*5uhyab3)c zoxJi1xSx1C>SfjUt&RSrsIEGL4*z?L8g%d8+3`8wTc1}&O~21jgLNHh_V}-RnWP`= z-)>5wP8j~t{_Un7YJTV7k872&BWjdyz+~w70^Gl3Bu6#z1Wbj?Q7!ll4##t-maY>J z;Qo<&JTm6|&I&T>s}rccz2j9#8YjTfEXa*|;##N{8H(9(A*u=Yqw3v3T{uD90C%)! zK#leoREv&5oqr+f#t*vtnSVc%(JY7`&khK~OvFtv8V8^T=?+Yce_?j~2X!OC@!cnJ z%Aw+psQr_@c(WIu_u|*6>t#wnJ+AK*C!_h_0@LGg)aaaxYQiWYJY(Ht5JhAHkhuUn%qen;I0Q*P}3wDHAs753{FCgiOZ;Yo;1jsG&2?;E{W>n z?x+@>h?Q_V>c(Ds`!oB~*%OpNRp@|BV`rRxu<@>NvINjYxR$siX)5`Ql<_}zV@Yss zkv{hdQpVx+OFV|X54<{JCi`3bCvHa_e>Q&Xp|Bo18COmw4yK!(td!3s@m6;K&vW?H zbMleWP`5O`qfTGaa#DIyYm&B(?3+XWC20idBxMOW=TL9Ie!px)9c^bAe{SXxJAWnd z#q7Rt=6DsDVa@>3bhj2S61?l>|3H1JwZjR>OU*e%ejw=KZV+6kksF$DAV@baQ~g4DP`}e_k&l)2avll7M-W0nxxj0Jitxp zu99vI{x!ujmJGaqoV!%i=HpIzPdH&1yS*W^oU)eG$ww+k8cjUhJ7yC5lTiO>FWwb< zAeJGeARVRt_asg6#nk(o)SY-SiU0nC`OFE9Q@D||n@ZZ4VNNen3ihq1PJ7BOxO?o! zRR|$v_ipwvb+r~~du#k(Kf|e4hx0U{UUt+r#MXa)SEEo{Np=iH-WASG@@Gh&54I0E-A-2a>zy%(r1eGDcemagq=hAR zOR5u47Q2lglb5m`r19Pfdto^*Kbrlss9%@32aY4|;q40{K1hBNe&dztyuC@oSbyAK zEL5Pa9u-2pCN0mt!<2nWSpm`#QaEMWZjjefx|{eh`7EUWZW9Sum7Q{4{n&ktiKmjb zQNIewzmGlXNa5ZI8X%u%&iwx#NIaI*mU>r6QQi&CCcl|_qcAi3we2IGOujy;4*5?> zvq{?eQO5U<`>WgM#M#vTS|0CGsBIAy+mO1G&%#CKlK+-{pAqXF9!1LJ)jjE*^fYDv z-P*E$BGv}NGDODyYbiJkvfy_0(7&O$0Dq++mlkX|<0W>W74Wk>KP z#;1;^u)C4pOQs{`aY#RrKZ`LWZ99=ap70+XvMQ1ekQ%7}Pmy*L=$DQKsO>MxcuhMA zi1U!DldcfIV&4*MPONvhwl9eXlVZ0q|H;ReN&Ob2*D+u3?$(ET{x$sQMEaJZc;1e> zf=0a@y%Uq=OVr!Nqu%^5s^^ z=HGV|tYzmfq=)}G!8qbpByD{uKj7uh61O0}jH4+#f%maLDK0m*9WSvz6rc=>hYr?Br=((jaQ!NjDs z-tlGd8S!)c6YqKDWS!rr?{CPDA1F*lT0s5)JBE^v;3i@>ebK~j_sDc26{qeIj3kvL z{{<-t$L+%5xQO!4um)<&MLrq(w8fC`K)$yA(7ux(hqpsJo058Z@h#5}l*J_tqi#}e zOrKXVA!<8>x!ISK)QbE$D|WxMKcVa;adEZ(PXyYIlG>90jmp>X z7vfpu%VQtXaq?YAFTDEwFb=V{Yot_Oi~URapI)7V*qKy~dO_@OO8&C9ZzaxC|Nl)I zM1@=wEc13!^Sj^Sx4i>`D2z)!73q$5Oj*ialO7T8_3E`E-=B2Ni~m6VcKgOo>i%{# zi2T>2W?r2*wA3HkPx^wg9Avw>^N-9L(k~QN!#SjZuruK(KZ zf7_4bexTkm%2wfZZ%=jd6G*2izfIX+q;

NtgBV&=}B`h_ha&us>xlNMDh(ogu9v zACLVN-4fJR!ag*PZZ$SErI^SU$%8ucF(kbdxrTk0W ztMC636#hg|io$P6hsnoK7RW(6QCl<8X3BHB5wB((OWld24&;yFOiW3gtzMlZc%C?z z^F*>=TXy`1RN0Fs#;*SryaH7U<)9SA$vChq`RXcUyGL11%ewzDN+R|(C;p7`0;E9l zmq__Z8A)*|dqtgG2F5Td?8&JjcGA+`zwHnLjl_ehMf3KL=gqWaqpK?#H~O{NA0{ zB43*m6!Z2!{m-$vsPi4=xxKQ?gT|W)K5!_B438OQ@njSu{UWjhit-c{Oqjc zoumZ$JS1&jks4FsA6$yDTg(6CyOFQp#V~_JXAZ zg-KIMRY|eicrp)T1N_IU-v(28<#)K)3-ZZH8z>)1JdJ!9c|BlV(mwCFS>7?CtX{4k z*_qZW44~3&;;)GplHQTJ5o;U8zG%|dr14%^dYX9WPm#V~ecNwUo|ZZ=ynV^U;r*QO mekDUJTXK7src=+xjVc*cc;~+nzFtB9pDH`smG?ck_\n" "Language-Team: LANGUAGE \n" @@ -4148,20 +4148,6 @@ msgstr "" msgid "Item %d of list input is not an atomic vector" msgstr "" -#: types.c:17 types.c:21 -#, c-format -msgid "" -"%s: %d:\n" -"%s" -msgstr "" - -#: types.c:23 -#, c-format -msgid "" -"%s: %d:\n" -"%s:" -msgstr "" - #: types.c:55 msgid "internal error: status, nx, nk must be integer" msgstr "" diff --git a/po/zh_CN.po b/po/zh_CN.po index 1f9f948579..4c4d2cae02 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-10-17 00:04+0800\n" +"POT-Creation-Date: 2019-10-17 09:01+0800\n" "PO-Revision-Date: 2019-10-04 17:06+08\n" "Last-Translator: Michael Chirico \n" "Language-Team: Mandarin\n" @@ -4142,20 +4142,6 @@ msgstr "" msgid "Item %d of list input is not an atomic vector" msgstr "" -#: types.c:17 types.c:21 -#, c-format -msgid "" -"%s: %d:\n" -"%s" -msgstr "" - -#: types.c:23 -#, c-format -msgid "" -"%s: %d:\n" -"%s:" -msgstr "" - #: types.c:55 msgid "internal error: status, nx, nk must be integer" msgstr "" diff --git a/src/types.c b/src/types.c index 67cc8ce74a..3418fc740c 100644 --- a/src/types.c +++ b/src/types.c @@ -14,13 +14,13 @@ char *end(char *start) { void ansMsg(ans_t *ans, int n, bool verbose, const char *func) { for (int i=0; i Date: Mon, 21 Oct 2019 15:39:47 +0800 Subject: [PATCH 18/22] improve arg checking&message in groupingsets; add some messages --- R/groupingsets.R | 6 +++--- inst/po/en@quot/LC_MESSAGES/R-data.table.mo | Bin 88074 -> 88404 bytes po/R-data.table.pot | 11 ++++++++++- po/R-zh_CN.po | 11 ++++++++++- 4 files changed, 23 insertions(+), 5 deletions(-) diff --git a/R/groupingsets.R b/R/groupingsets.R index dadcbb0fe8..5d4c0fffac 100644 --- a/R/groupingsets.R +++ b/R/groupingsets.R @@ -60,10 +60,10 @@ groupingsets.data.table = function(x, j, by, sets, .SDcols, id = FALSE, jj, ...) stop("All columns used in 'sets' argument must be in 'by' too. Columns used in 'sets' but not present in 'by': ", brackify(setdiff(sets.all.by, by))) if (id && "grouping" %chin% names(x)) stop("When using `id=TRUE` the 'x' data.table must not have a column named 'grouping'.") - if (!all(sapply(sets, function(x) length(x)==uniqueN(x)))) + if (any(sapply(sets, anyDuplicated))) stop("Character vectors in 'sets' list must not have duplicated column names within a single grouping set.") - if (!identical(lapply(sets, sort), unique(lapply(sets, sort)))) - warning("Double counting is going to happen. Argument 'sets' should be unique without taking order into account, unless you really want double counting, then get used to that warning. Otherwise `sets=unique(lapply(sets, sort))` will do the trick.") + if (length(sets) > 1L && (idx<-anyDuplicated(lapply(sets, sort)))) + warning("'sets' contains a duplicate (i.e., equivalent up to sorting) element at index ", idx, "; as such, there will be duplicate rows in the output -- note that grouping by A,B and B,A will produce the same aggregations. Use `sets=unique(lapply(sets, sort))` to eliminate duplicates.") # input arguments handling jj = if (!missing(jj)) jj else substitute(j) av = all.vars(jj, TRUE) 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 70ec2614b453a12fbdad9f3ed17bab57f75ac443..7a27b5501fc5ee101c65494651485108c67cb47a 100644 GIT binary patch delta 12818 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 I9do1q3q@iX5dZ)H delta 12526 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 diff --git a/po/R-data.table.pot b/po/R-data.table.pot index fac36fde7e..efc5b7de2d 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.5\n" -"POT-Creation-Date: 2019-10-17 00:12\n" +"POT-Creation-Date: 2019-10-19 12:10\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -1405,6 +1405,15 @@ 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." msgstr "" +msgid "This is R" +msgstr "" + +msgid "but data.table has been installed using R" +msgstr "" + +msgid ". The major version must match. Please reinstall data.table." +msgstr "" + msgid "Option 'datatable.old.bywithoutby' has been removed as warned for 2 years. It is now ignored. Please use by=.EACHI instead and stop using this option." msgstr "" diff --git a/po/R-zh_CN.po b/po/R-zh_CN.po index d3a9e851b4..7574db6fe5 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-10-17 00:12\n" +"POT-Creation-Date: 2019-10-19 12:10\n" "PO-Revision-Date: 2019-10-04 17:06+08\n" "Last-Translator: Michael Chirico \n" "Language-Team: Mandarin\n" @@ -1729,6 +1729,15 @@ msgid "" "just that data.table has added this check." msgstr "" +msgid "This is R" +msgstr "" + +msgid "but data.table has been installed using R" +msgstr "" + +msgid ". The major version must match. Please reinstall data.table." +msgstr "" + msgid "" "Option 'datatable.old.bywithoutby' has been removed as warned for 2 years. " "It is now ignored. Please use by=.EACHI instead and stop using this option." From 48e3b1a7601f97a4b9d7fa18876a01a8befc01fc Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Mon, 21 Oct 2019 16:14:06 +0800 Subject: [PATCH 19/22] get tests working (fix some bad quotes, adjust to new messages) --- inst/tests/tests.Rraw | 10 +++++----- src/forder.c | 5 ----- src/fread.c | 2 +- src/freadR.c | 2 +- src/rbindlist.c | 2 +- 5 files changed, 8 insertions(+), 13 deletions(-) diff --git a/inst/tests/tests.Rraw b/inst/tests/tests.Rraw index 81d9fcaebd..4ae2710bdb 100644 --- a/inst/tests/tests.Rraw +++ b/inst/tests/tests.Rraw @@ -10059,7 +10059,7 @@ test(1695.14, x %between% c(3, NA), rep(NA, 3L)) test(1695.15, x %between% c(NA, NA), rep(NA, 3L)) x = integer(0) test(1695.16, x %between% c(3, 7), logical(0)) -test(1695.17, TRUE %between% c(3, 7), error="between has been x of type logical") +test(1695.17, TRUE %between% c(3, 7), error="between has been passed an argument x of type logical") x = c("foo","bar","paz") test(1695.18, between(x, "bag", "fog"), c(FALSE, TRUE, FALSE)) test(1695.19, between(x, c("b","f","a"), "q"), c(TRUE, FALSE, TRUE)) @@ -10902,14 +10902,14 @@ test(1750.18, uniqueN({ r <- groupingsets(dt, j = c(list(cnt=.N), lapply(.SD, sum)), by = c("color","year","status"), sets=sets, id=TRUE) r[, lapply(.SD, sum), by = .(double_counting = grouping==5L, double_counting = grouping!=5L), .SDcols = c("cnt","amount","value")] }, by = c("cnt","amount","value") -), 1L, warning = "Double counting is going to happen") +), 1L, warning = "'sets' contains a duplicate") # duplicate entries in `sets` but reorderd - double counting on `grouping==1L` sets = list(c("color","year"), "year", c("year","color"), character()) test(1750.19, uniqueN({ r <- groupingsets(dt, j = c(list(cnt=.N), lapply(.SD, sum)), by = c("color","year","status"), sets=sets, id=TRUE) r[, lapply(.SD, sum), by = .(double_counting = grouping==1L, double_counting = grouping!=1L), .SDcols = c("cnt","amount","value")] }, by = c("cnt","amount","value") -), 1L, warning = "Double counting is going to happen") +), 1L, warning = "'sets' contains a duplicate") # entries in `by` / `sets` not exists in data.table test(1750.20, exists("notexist"), FALSE) # https://github.com/Rdatatable/data.table/issues/3055#issuecomment-423364960 test(1750.21, groupingsets(dt, j = c(list(cnt=.N), lapply(.SD, sum)), by = c("color","year","notexist"), sets=list(c("color"), character()), id=TRUE), error = "object 'notexist' not found") @@ -13278,8 +13278,8 @@ test(1962.039, is.sorted(3:1, by = 'x'), DT = data.table(a = 3:1) test(1962.0401, forderv(DT, sort=FALSE, retGrp=FALSE), error='At least one of retGrp= or sort= must be TRUE') -test(1962.0402, forderv(DT, sort=0), error='sort= must be TRUE or FALSE') -test(1962.0403, forderv(DT, retGrp=0), error='retGrp= must be TRUE or FALSE') +test(1962.0402, forderv(DT, sort=0), error='sort must be TRUE or FALSE') +test(1962.0403, forderv(DT, retGrp=0), error='retGrp must be TRUE or FALSE') test(1962.041, forderv(DT, na.last = logical(0L)), error='na.last must be logical TRUE, FALSE or NA of length 1') test(1962.042, forderv(DT, na.last = c(TRUE, FALSE)), error='na.last must be logical TRUE, FALSE or NA of length 1') test(1962.043, forderv(DT$a, by = 'a'), error='x is a single vector, non-NULL') diff --git a/src/forder.c b/src/forder.c index 3b2eb8b55a..e1a50257ac 100644 --- a/src/forder.c +++ b/src/forder.c @@ -448,11 +448,6 @@ SEXP forder(SEXP DT, SEXP by, SEXP retGrpArg, SEXP sortGroupsArg, SEXP ascArg, S Rprintf(_("forder.c received %d rows and %d columns\n"), length(VECTOR_ELT(DT,0)), length(DT)); } if (!length(DT)) - error(_("Internal error: DT is an empty list() of 0 columns")); // # nocov should have been caught be colnamesInt, test 2099.1 - if (!isInteger(by) || !LENGTH(by)) - error(_("Internal error: DT has %d columns but 'by' is either not integer or is length 0"), length(DT)); // # nocov colnamesInt catches, 2099.2 - if (!isInteger(ascArg) || LENGTH(ascArg)!=LENGTH(by)) - error(_("Either order= is not integer or its length (%d) is different to by='s length (%d)"), LENGTH(ascArg), LENGTH(by)); STOP(_("Internal error: DT is an empty list() of 0 columns")); // # nocov should have been caught be colnamesInt, test 2099.1 if (!isInteger(by) || !LENGTH(by)) STOP(_("Internal error: DT has %d columns but 'by' is either not integer or is length 0"), length(DT)); // # nocov colnamesInt catches, 2099.2 diff --git a/src/fread.c b/src/fread.c index 16b85695b3..649c445f2c 100644 --- a/src/fread.c +++ b/src/fread.c @@ -1565,7 +1565,7 @@ int freadMain(freadMainArgs _args) { quoteRule = topQuoteRule; if (quoteRule>1 && quote) { - DTWARN(_("Found and resolved improper quoting in first %d rows. If the fields are not quoted (e.g. field separator does not appear within any field), try quote=\")\" to avoid this warning."), jumpLines); + DTWARN(_("Found and resolved improper quoting in first %d rows. If the fields are not quoted (e.g. field separator does not appear within any field), try quote=\"\" to avoid this warning."), jumpLines); // TODO: include line number and text in warning. Could loop again with the standard quote rule to find the line that fails. } sep = topSep; diff --git a/src/freadR.c b/src/freadR.c index f946cf6e8c..0e5d042161 100644 --- a/src/freadR.c +++ b/src/freadR.c @@ -109,7 +109,7 @@ SEXP freadR( args.quote = '\0'; } else { if (!isString(quoteArg) || LENGTH(quoteArg)!=1 || strlen(CHAR(STRING_ELT(quoteArg,0))) > 1) - error(_("quote= must be a single character, blank \")\", or FALSE")); + error(_("quote= must be a single character, blank \"\", or FALSE")); args.quote = CHAR(STRING_ELT(quoteArg,0))[0]; } diff --git a/src/rbindlist.c b/src/rbindlist.c index 902aed62a4..937fdd303e 100644 --- a/src/rbindlist.c +++ b/src/rbindlist.c @@ -7,7 +7,7 @@ SEXP rbindlist(SEXP l, SEXP usenamesArg, SEXP fillArg, SEXP idcolArg) if (!isLogical(fillArg) || LENGTH(fillArg) != 1 || LOGICAL(fillArg)[0] == NA_LOGICAL) error(_("fill= should be TRUE or FALSE")); if (!isLogical(usenamesArg) || LENGTH(usenamesArg)!=1) - error(_("use.names= should be TRUE, FALSE, or not used (\")check\" by default)")); // R levels converts "check" to NA + error(_("use.names= should be TRUE, FALSE, or not used (\"check\" by default)")); // R levels converts "check" to NA if (!length(l)) return(l); if (TYPEOF(l) != VECSXP) error(_("Input to rbindlist must be a list. This list can contain data.tables, data.frames or plain lists.")); Rboolean usenames = LOGICAL(usenamesArg)[0]; From 03d339515fde4b89c93b58596d75ea7ce022d7cc Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Mon, 21 Oct 2019 16:16:37 +0800 Subject: [PATCH 20/22] update po with latest message edits --- inst/po/en@quot/LC_MESSAGES/R-data.table.mo | Bin 88404 -> 88480 bytes inst/po/en@quot/LC_MESSAGES/data.table.mo | Bin 137036 -> 137030 bytes po/R-data.table.pot | 9 ++- po/R-zh_CN.po | 13 ++-- po/data.table.pot | 62 ++++++++++---------- po/zh_CN.po | 60 +++++++++---------- 6 files changed, 75 insertions(+), 69 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 7a27b5501fc5ee101c65494651485108c67cb47a..1a688c2ba6166b9c195e0d0a7f4b5594c1d1403a 100644 GIT binary patch delta 13096 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 delta 11054 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 diff --git a/po/R-data.table.pot b/po/R-data.table.pot index efc5b7de2d..ee2d6efa79 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.5\n" -"POT-Creation-Date: 2019-10-19 12:10\n" +"Project-Id-Version: data.table 1.12.7\n" +"POT-Creation-Date: 2019-10-21 16:15\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -1285,7 +1285,10 @@ msgstr "" msgid "Character vectors in 'sets' list must not have duplicated column names within a single grouping set." msgstr "" -msgid "Double counting is going to happen. Argument 'sets' should be unique without taking order into account, unless you really want double counting, then get used to that warning. Otherwise `sets=unique(lapply(sets, sort))` will do the trick." +msgid "'sets' contains a duplicate (i.e., equivalent up to sorting) element at index" +msgstr "" + +msgid "; as such, there will be duplicate rows in the output -- note that grouping by A,B and B,A will produce the same aggregations. Use `sets=unique(lapply(sets, sort))` to eliminate duplicates." msgstr "" msgid "Expression passed to grouping sets function must not update by reference. Use ':=' on results of your grouping function." diff --git a/po/R-zh_CN.po b/po/R-zh_CN.po index 7574db6fe5..4efa90ea5a 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-10-19 12:10\n" +"POT-Creation-Date: 2019-10-21 16:15\n" "PO-Revision-Date: 2019-10-04 17:06+08\n" "Last-Translator: Michael Chirico \n" "Language-Team: Mandarin\n" @@ -1565,10 +1565,13 @@ msgid "" msgstr "" msgid "" -"Double counting is going to happen. Argument 'sets' should be unique without " -"taking order into account, unless you really want double counting, then get " -"used to that warning. Otherwise `sets=unique(lapply(sets, sort))` will do " -"the trick." +"'sets' contains a duplicate (i.e., equivalent up to sorting) element at index" +msgstr "" + +msgid "" +"; as such, there will be duplicate rows in the output -- note that grouping " +"by A,B and B,A will produce the same aggregations. Use " +"`sets=unique(lapply(sets, sort))` to eliminate duplicates." msgstr "" msgid "" diff --git a/po/data.table.pot b/po/data.table.pot index ed49e2e391..0340734659 100644 --- a/po/data.table.pot +++ b/po/data.table.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: data.table 1.12.5\n" +"Project-Id-Version: data.table 1.12.7\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-10-17 09:01+0800\n" +"POT-Creation-Date: 2019-10-21 16:15+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -1422,56 +1422,56 @@ msgstr "" msgid "forder.c received %d rows and %d columns\n" msgstr "" -#: forder.c:451 forder.c:456 +#: forder.c:451 msgid "Internal error: DT is an empty list() of 0 columns" msgstr "" -#: forder.c:453 forder.c:458 +#: forder.c:453 #, c-format msgid "" "Internal error: DT has %d columns but 'by' is either not integer or is " "length 0" msgstr "" -#: forder.c:455 forder.c:460 +#: forder.c:455 #, c-format msgid "" "Either order= is not integer or its length (%d) is different to by='s length " "(%d)" msgstr "" -#: forder.c:466 +#: forder.c:461 #, c-format msgid "internal error: 'by' value %d out of range [1,%d]" msgstr "" -#: forder.c:468 +#: forder.c:463 #, c-format msgid "Column %d is length %d which differs from length of column 1 (%d)\n" msgstr "" -#: forder.c:472 +#: forder.c:467 msgid "retGrp must be TRUE or FALSE" msgstr "" -#: forder.c:475 +#: forder.c:470 msgid "sort must be TRUE or FALSE" msgstr "" -#: forder.c:478 +#: forder.c:473 msgid "At least one of retGrp= or sort= must be TRUE" msgstr "" -#: forder.c:480 +#: forder.c:475 msgid "na.last must be logical TRUE, FALSE or NA of length 1" msgstr "" -#: forder.c:524 +#: forder.c:519 #, c-format msgid "Item %d of order (ascending/descending) is %d. Must be +1 or -1." msgstr "" -#: forder.c:550 +#: forder.c:545 #, c-format msgid "" "\n" @@ -1480,51 +1480,51 @@ msgid "" "to save space and time.\n" msgstr "" -#: forder.c:566 +#: forder.c:561 #, c-format msgid "Column %d passed to [f]order is type '%s', not yet supported." msgstr "" -#: forder.c:719 +#: forder.c:714 msgid "Internal error: column not supported not caught earlier" msgstr "" -#: forder.c:727 +#: forder.c:722 #, c-format msgid "nradix=%d\n" msgstr "" -#: forder.c:733 +#: forder.c:728 #, c-format msgid "" "Failed to allocate TMP or UGRP or they weren't cache line aligned: nth=%d" msgstr "" -#: forder.c:738 +#: forder.c:733 msgid "Could not allocate (very tiny) group size thread buffers" msgstr "" -#: forder.c:799 +#: forder.c:794 #, c-format msgid "Timing block %2d%s = %8.3f %8d\n" msgstr "" -#: forder.c:802 +#: forder.c:797 #, c-format msgid "stat[%03d]==%10zd\n" msgstr "" -#: forder.c:1058 +#: forder.c:1053 #, c-format msgid "Failed to allocate parallel counts. my_n=%d, nBatch=%d" msgstr "" -#: forder.c:1167 +#: forder.c:1162 #, c-format msgid "Unable to allocate TMP for my_n=%d items in parallel batch counting" msgstr "" -#: forder.c:1275 +#: forder.c:1270 msgid "" "is.sorted (R level) and fsorted (C level) only to be used on vectors. If " "needed on a list/data.table, you'll need the order anyway if not sorted, so " @@ -1532,25 +1532,25 @@ msgid "" "C level" msgstr "" -#: forder.c:1307 +#: forder.c:1302 #, c-format msgid "type '%s' is not yet supported" msgstr "" -#: forder.c:1316 +#: forder.c:1311 msgid "x must be either NULL or an integer vector" msgstr "" -#: forder.c:1318 +#: forder.c:1313 msgid "nrow must be integer vector length 1" msgstr "" -#: forder.c:1320 +#: forder.c:1315 #, c-format msgid "nrow==%d but must be >=0" msgstr "" -#: forder.c:1337 +#: forder.c:1332 msgid "x must be type 'double'" msgstr "" @@ -1955,7 +1955,7 @@ msgstr "" msgid "" "Found and resolved improper quoting in first %d rows. If the fields are not " "quoted (e.g. field separator does not appear within any field), try quote=" -"\")\" to avoid this warning." +"\"\" to avoid this warning." msgstr "" #: fread.c:1584 @@ -2390,7 +2390,7 @@ msgid "" msgstr "" #: freadR.c:112 -msgid "quote= must be a single character, blank \")\", or FALSE" +msgid "quote= must be a single character, blank \"\", or FALSE" msgstr "" #: freadR.c:137 @@ -3766,7 +3766,7 @@ msgid "fill= should be TRUE or FALSE" msgstr "" #: rbindlist.c:10 -msgid "use.names= should be TRUE, FALSE, or not used (\")check\" by default)" +msgid "use.names= should be TRUE, FALSE, or not used (\"check\" by default)" msgstr "" #: rbindlist.c:12 diff --git a/po/zh_CN.po b/po/zh_CN.po index 4c4d2cae02..28e5545781 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-10-17 09:01+0800\n" +"POT-Creation-Date: 2019-10-21 16:15+0800\n" "PO-Revision-Date: 2019-10-04 17:06+08\n" "Last-Translator: Michael Chirico \n" "Language-Team: Mandarin\n" @@ -1416,56 +1416,56 @@ msgstr "" msgid "forder.c received %d rows and %d columns\n" msgstr "" -#: forder.c:451 forder.c:456 +#: forder.c:451 msgid "Internal error: DT is an empty list() of 0 columns" msgstr "" -#: forder.c:453 forder.c:458 +#: forder.c:453 #, c-format msgid "" "Internal error: DT has %d columns but 'by' is either not integer or is " "length 0" msgstr "" -#: forder.c:455 forder.c:460 +#: forder.c:455 #, c-format msgid "" "Either order= is not integer or its length (%d) is different to by='s length " "(%d)" msgstr "" -#: forder.c:466 +#: forder.c:461 #, c-format msgid "internal error: 'by' value %d out of range [1,%d]" msgstr "" -#: forder.c:468 +#: forder.c:463 #, c-format msgid "Column %d is length %d which differs from length of column 1 (%d)\n" msgstr "" -#: forder.c:472 +#: forder.c:467 msgid "retGrp must be TRUE or FALSE" msgstr "" -#: forder.c:475 +#: forder.c:470 msgid "sort must be TRUE or FALSE" msgstr "" -#: forder.c:478 +#: forder.c:473 msgid "At least one of retGrp= or sort= must be TRUE" msgstr "" -#: forder.c:480 +#: forder.c:475 msgid "na.last must be logical TRUE, FALSE or NA of length 1" msgstr "" -#: forder.c:524 +#: forder.c:519 #, c-format msgid "Item %d of order (ascending/descending) is %d. Must be +1 or -1." msgstr "" -#: forder.c:550 +#: forder.c:545 #, c-format msgid "" "\n" @@ -1474,51 +1474,51 @@ msgid "" "to save space and time.\n" msgstr "" -#: forder.c:566 +#: forder.c:561 #, c-format msgid "Column %d passed to [f]order is type '%s', not yet supported." msgstr "" -#: forder.c:719 +#: forder.c:714 msgid "Internal error: column not supported not caught earlier" msgstr "" -#: forder.c:727 +#: forder.c:722 #, c-format msgid "nradix=%d\n" msgstr "" -#: forder.c:733 +#: forder.c:728 #, c-format msgid "" "Failed to allocate TMP or UGRP or they weren't cache line aligned: nth=%d" msgstr "" -#: forder.c:738 +#: forder.c:733 msgid "Could not allocate (very tiny) group size thread buffers" msgstr "" -#: forder.c:799 +#: forder.c:794 #, c-format msgid "Timing block %2d%s = %8.3f %8d\n" msgstr "" -#: forder.c:802 +#: forder.c:797 #, c-format msgid "stat[%03d]==%10zd\n" msgstr "" -#: forder.c:1058 +#: forder.c:1053 #, c-format msgid "Failed to allocate parallel counts. my_n=%d, nBatch=%d" msgstr "" -#: forder.c:1167 +#: forder.c:1162 #, c-format msgid "Unable to allocate TMP for my_n=%d items in parallel batch counting" msgstr "" -#: forder.c:1275 +#: forder.c:1270 msgid "" "is.sorted (R level) and fsorted (C level) only to be used on vectors. If " "needed on a list/data.table, you'll need the order anyway if not sorted, so " @@ -1526,25 +1526,25 @@ msgid "" "C level" msgstr "" -#: forder.c:1307 +#: forder.c:1302 #, c-format msgid "type '%s' is not yet supported" msgstr "" -#: forder.c:1316 +#: forder.c:1311 msgid "x must be either NULL or an integer vector" msgstr "" -#: forder.c:1318 +#: forder.c:1313 msgid "nrow must be integer vector length 1" msgstr "" -#: forder.c:1320 +#: forder.c:1315 #, c-format msgid "nrow==%d but must be >=0" msgstr "" -#: forder.c:1337 +#: forder.c:1332 msgid "x must be type 'double'" msgstr "" @@ -1949,7 +1949,7 @@ msgstr "" msgid "" "Found and resolved improper quoting in first %d rows. If the fields are not " "quoted (e.g. field separator does not appear within any field), try quote=" -"\")\" to avoid this warning." +"\"\" to avoid this warning." msgstr "" #: fread.c:1584 @@ -2384,7 +2384,7 @@ msgid "" msgstr "" #: freadR.c:112 -msgid "quote= must be a single character, blank \")\", or FALSE" +msgid "quote= must be a single character, blank \"\", or FALSE" msgstr "" #: freadR.c:137 @@ -3760,7 +3760,7 @@ msgid "fill= should be TRUE or FALSE" msgstr "" #: rbindlist.c:10 -msgid "use.names= should be TRUE, FALSE, or not used (\")check\" by default)" +msgid "use.names= should be TRUE, FALSE, or not used (\"check\" by default)" msgstr "" #: rbindlist.c:12 From fad95240aa2bf7e3db2eefe5823a0ca0899b5201 Mon Sep 17 00:00:00 2001 From: Chun-hui Gao Date: Mon, 21 Oct 2019 23:12:07 +0800 Subject: [PATCH 21/22] Finished the translation assigned to Chun-Hui Gao (#3983) * Finished the translation of line 3058-3231 in po/zh_CN.po. Totally 34 messages. * Finished the translation assigned to Chun-Hui Gao in R-zh_cn.po. Lines 1500-1598 in original R-zh_CN.po. Totally 26 messages. * Resolved reviewer's comments. * Resolved reviewer's comments. --- po/R-zh_CN.po | 60 +++++++++++++++++++++------------------ po/zh_CN.po | 77 ++++++++++++++++++++++++++++++--------------------- 2 files changed, 79 insertions(+), 58 deletions(-) diff --git a/po/R-zh_CN.po b/po/R-zh_CN.po index 4efa90ea5a..ec3b630c3c 100644 --- a/po/R-zh_CN.po +++ b/po/R-zh_CN.po @@ -1498,108 +1498,114 @@ msgid "dateTimeAs must be a single string" msgstr "" msgid "dateTimeAs must be 'ISO','squash','epoch' or 'write.csv'" -msgstr "" +msgstr "dateTimeAs 必须是 'ISO','squash','epoch' 或 'write.csv'" msgid "logicalAsInt has been renamed logical01. Use logical01 only, not both." -msgstr "" +msgstr "logicalAsInt 已重命名为 logical01。不要同时使用它们,仅使用 logical01。" msgid "x being coerced from class: matrix to data.table" -msgstr "" +msgstr "x 的类将强制从 matrix 转变为 data.table" msgid "Input has no columns; doing nothing." -msgstr "" +msgstr "输入没有列,不执行任何操作。" msgid "If you intended to overwrite the file at" -msgstr "" +msgstr "如果你打算覆盖文件" msgid "with an empty one, please use file.remove first." -msgstr "" +msgstr "为空文件,请先使用 file.remove。" msgid "Input has no columns; creating an empty file at '" -msgstr "" +msgstr "输入没有列,将创建一个空文件 '" msgid "' and exiting." -msgstr "" +msgstr "' 并退出。" msgid "" "'data.table' relies on the package 'yaml' to write the file header; please " "add this to your library with install.packages('yaml') and try again." -msgstr "" +msgstr "'data.table' 依赖于 'yaml' 包来写文件头;" +"请运行 install.packages('yaml') 安装 'yaml' 包后再试。" msgid "Argument 'x' must be a data.table object" -msgstr "" +msgstr "'x' 参数必须是一个 data.table 对象" msgid "" "Argument 'by' must be a character vector of column names used in grouping." -msgstr "" +msgstr "'by' 参数必须是一个字符向量,向量的元素是列名,用于分组。" msgid "Argument 'id' must be a logical scalar." -msgstr "" +msgstr "'id' 参数必须是一个逻辑标量。" msgid "" "Argument 'x' is a 0-column data.table; no measure to apply grouping over." -msgstr "" +msgstr "'x' 参数是一个 0 列的 data.table;无法对其应用分组。" msgid "Input data.table must not contain duplicate column names." -msgstr "" +msgstr "作为输入的 data.table 对象不能含有重复的列名。" msgid "Argument 'by' must have unique column names for grouping." -msgstr "" +msgstr "'by' 参数用于分组,不可包含重复列名。" msgid "Argument 'sets' must be a list of character vectors." -msgstr "" +msgstr "'sets' 参数必须是一个字符向量的列表。" msgid "" "All columns used in 'sets' argument must be in 'by' too. Columns used in " "'sets' but not present in 'by':" -msgstr "" +msgstr "在 'sets' 参数中应用的所有列也必须在 'by' 中。" +"当前 'sets' 包含而 'by' 中不含的列有:" msgid "" "When using `id=TRUE` the 'x' data.table must not have a column named " "'grouping'." -msgstr "" +msgstr "当使用 `id=TRUE` 时," +"data.table 'x' 不能包含名为 'grouping' 的列。" msgid "" "Character vectors in 'sets' list must not have duplicated column names " "within a single grouping set." -msgstr "" +msgstr "在单个分组中,'sets' 列表中的字符串向量不能有重复的列名。" msgid "" "'sets' contains a duplicate (i.e., equivalent up to sorting) element at index" -msgstr "" +msgstr "'sets' 的索引含有重复的元素,在做排序时的作用是对等的" msgid "" "; as such, there will be duplicate rows in the output -- note that grouping " "by A,B and B,A will produce the same aggregations. Use " "`sets=unique(lapply(sets, sort))` to eliminate duplicates." -msgstr "" +msgstr ";同样的,输出中也会包含重复的行(注意按照A、B分组与按照B、A分组的结果是一样的。)" +"使用 `sets=unique(lapply(sets, sort))` 来消除重复。" + msgid "" "Expression passed to grouping sets function must not update by reference. " "Use ':=' on results of your grouping function." -msgstr "" +msgstr "传递给分组相关函数的表达式不能通过引用更新。" +"请在你的分组函数返回的结果中使用 ':=' 。" msgid "" "When using `id=TRUE` the 'j' expression must not evaluate to a column named " "'grouping'." -msgstr "" +msgstr "当 `id=TRUE` 时,'j' 表达式不能针对 'grouping' 列求值。" msgid "" "There exists duplicated column names in the results, ensure the column " "passed/evaluated in `j` and those in `by` are not overlapping." -msgstr "" +msgstr "结果中存在重复的列名,请确保 `j` 和 `by` 传递的列中没有发生重叠。" msgid "" "Using integer64 class columns require to have 'bit64' package installed." -msgstr "" +msgstr "要在列中使用 integer64 类,需要先安装 'bit64' 包。" msgid "" "internal error, package:xts is on search path but could not be loaded via " "requireNamespace" -msgstr "" +msgstr "内部错误,在搜索时找到了 xts 包,但无法使用 requireNamespace 加载" msgid "Argument 'sort' should be logical TRUE/FALSE" -msgstr "" +msgstr "参数 'sort' 应为逻辑值 TRUE 或 FALSE" msgid "Argument 'no.dups' should be logical TRUE/FALSE" msgstr "" diff --git a/po/zh_CN.po b/po/zh_CN.po index 28e5545781..710b460ec5 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -3056,11 +3056,11 @@ msgstr "" #: gsumm.c:47 msgid "l is not an integer vector" -msgstr "" +msgstr "l " #: gsumm.c:56 msgid "irowsArg is neither an integer vector nor NULL" -msgstr "" +msgstr "irowsArg ȲҲ NULL" #: gsumm.c:58 #, c-format @@ -3070,47 +3070,48 @@ msgstr "" #: gsumm.c:66 #, c-format msgid "o has length %d but sum(l)=%d" -msgstr "" +msgstr "o ijΪ %d sum(l) = %d" #: gsumm.c:69 msgid "Internal error: o's maxgrpn attribute mismatches recalculated maxgrpn" -msgstr "" +msgstr "ڲo maxgrpn ¼ maxgrpn ƥ" #: gsumm.c:89 #, c-format msgid "" "Internal error: nrow=%d ngrp=%d nbit=%d shift=%d highSize=%d nBatch=%d " "batchSize=%d lastBatchSize=%d\n" -msgstr "" +msgstr "ڲnrow=%d ngrp=%d nbit=%d shift=%d highSize=%d nBatch=%d " +"batchSize=%d lastBatchSize=%d\n" #: gsumm.c:98 #, c-format msgid "gforce initial population of grp took %.3f\n" -msgstr "" +msgstr "grp gforce ʼȺռ %.3f\n " #: gsumm.c:116 msgid "" "Internal error: Failed to allocate counts or TMP when assigning g in gforce" -msgstr "" +msgstr "ڲ gforce Ϊ g ֵʱδܳɹΪ counts TMP ռ" #: gsumm.c:194 #, c-format msgid "gforce assign high and low took %.3f\n" -msgstr "" +msgstr "gforce high low %.3f\n" #: gsumm.c:200 #, c-format msgid "gforce eval took %.3f\n" -msgstr "" +msgstr "gforce eval %.3f\n" #: gsumm.c:216 msgid "gather took ... " -msgstr "" +msgstr "gather ..." #: gsumm.c:334 #, c-format msgid "gather implemented for INTSXP, REALSXP, and CPLXSXP but not '%s'" -msgstr "" +msgstr "gather ֧ INTSXPREALSXP CPLXSXP֧ '%s'" #: gsumm.c:336 gsumm.c:568 #, c-format @@ -3119,61 +3120,65 @@ msgstr "" #: gsumm.c:345 msgid "sum is not meaningful for factors." -msgstr "" +msgstr "ӵĺû塣" #: gsumm.c:349 #, c-format msgid "This gsum took (narm=%s) ... " -msgstr "" +msgstr "gsum ռ (narm=%s) ..." #: gsumm.c:350 gsumm.c:606 #, c-format msgid "nrow [%d] != length(x) [%d] in gsum" -msgstr "" +msgstr "gsum nrow [%d] != length(x) [%d]" #: gsumm.c:404 msgid "" "The sum of an integer column for a group was more than type 'integer' can " "hold so the result has been coerced to 'numeric' automatically for " "convenience." -msgstr "" +msgstr "ijз͵ĽУ" +"˳ͣintergerֵֵ" +"ʽԶתΪֵͣnumeric" #: gsumm.c:565 #, c-format msgid "" "Type '%s' not supported by GForce sum (gsum). Either add the prefix base::" "sum(.) or turn off GForce optimization using options(datatable.optimize=1)" -msgstr "" +msgstr "GForce ͣgsum֧ '%s'ʹ base::sum(.) " +" options(datatable.optimize=1) ر GForce Ż" #: gsumm.c:578 msgid "" "GForce mean can only be applied to columns, not .SD or similar. Likely " "you're looking for 'DT[,lapply(.SD,mean),by=,.SDcols=]'. See ?data.table." -msgstr "" +msgstr "GForce ƽֵУ .SD " +"ڲ 'DT[,lapply(.SD,mean),by=,.SDcols=]'μ ?data.table " #: gsumm.c:579 msgid "mean is not meaningful for factors." -msgstr "" +msgstr "ӵƽֵû" #: gsumm.c:599 #, c-format msgid "Internal error: gsum returned type '%s'. typeof(x) is '%s'" -msgstr "" +msgstr "ڲgsum ص '%s' typeof(x) Ľ '%s'" #: gsumm.c:609 #, c-format msgid "Unable to allocate %d * %d bytes for sum in gmean na.rm=TRUE" -msgstr "" +msgstr "޷Ϊ gmean na.rm=TRUE ܺͣsum %d * %d ֽڿռ" #: gsumm.c:612 #, c-format msgid "Unable to allocate %d * %d bytes for counts in gmean na.rm=TRUE" -msgstr "" +msgstr "޷Ϊ gmean na.rm=TRUE ļcounts %d * %d ֽڿռ" #: gsumm.c:638 #, c-format msgid "Unable to allocate %d * %d bytes for si in gmean na.rm=TRUE" -msgstr "" +msgstr "޷Ϊ gmean na.rm=TRUE si %d * %d ֽڿռ" #: gsumm.c:650 #, c-format @@ -3181,11 +3186,12 @@ msgid "" "Type '%s' not supported by GForce mean (gmean) na.rm=TRUE. Either add the " "prefix base::mean(.) or turn off GForce optimization using options(datatable." "optimize=1)" -msgstr "" +msgstr "GForce ֵgmean֧ '%s'ʹ base::mean(.) " +" options(datatable.optimize=1) ر GForce Ż" #: gsumm.c:674 msgid "Internal error: unsupported type at the end of gmean" -msgstr "" +msgstr "ڲgmean βڲֵ֧" #: gsumm.c:687 msgid "" @@ -3193,38 +3199,45 @@ msgid "" "of all items in a list such as .SD, either add the prefix base::min(.SD) or " "turn off GForce optimization using options(datatable.optimize=1). More " "likely, you may be looking for 'DT[,lapply(.SD,min),by=,.SDcols=]'" -msgstr "" +msgstr "GForce СֵminУ .SD " +"ҪҵбУ .SDԪصСֵʹ base::min(.SD) " +" options(datatable.optimize=1) ر GForce Ż" +"ڲ 'DT[,lapply(.SD,min),by=,.SDcols=]'" #: gsumm.c:688 msgid "min is not meaningful for factors." -msgstr "" +msgstr "ӵСֵû塣" #: gsumm.c:693 #, c-format msgid "nrow [%d] != length(x) [%d] in gmin" -msgstr "" +msgstr "gmin nrow [%d] != length(x) [%d]" #: gsumm.c:717 gsumm.c:850 msgid "" "No non-missing values found in at least one group. Coercing to numeric type " "and returning 'Inf' for such groups to be consistent with base" -msgstr "" +msgstr "һûзȱʧֵ" +"Ϊ base һ£ЩǿתΪֵͲ Inf" #: gsumm.c:756 gsumm.c:891 msgid "" "No non-missing values found in at least one group. Returning 'NA' for such " "groups to be consistent with base" -msgstr "" +msgstr "һûзȱʧֵ" +"Ϊ base һ£Щ齫 NA" #: gsumm.c:783 msgid "" "No non-missing values found in at least one group. Returning 'Inf' for such " "groups to be consistent with base" -msgstr "" +msgstr "һûзȱʧֵ" +"Ϊ base һ£Щ齫 Inf" + #: gsumm.c:791 msgid "Type 'complex' has no well-defined min" -msgstr "" +msgstr "ܱȽϴСûСֵ" #: gsumm.c:794 #, c-format @@ -3232,6 +3245,8 @@ msgid "" "Type '%s' not supported by GForce min (gmin). Either add the prefix base::" "min(.) or turn off GForce optimization using options(datatable.optimize=1)" msgstr "" +"'%s'֧Ӧ GForce Сֵgmin Żǰ׺ base::" +"min(.) ʹ options(datatable.optimize=1) ر GForce Ż" #: gsumm.c:806 msgid "" From 526a38b25c6b453a21fde269fe2f6e8c945f038a Mon Sep 17 00:00:00 2001 From: Kingdaaaaa <50854702+Kingdaaaaa@users.noreply.github.com> Date: Sun, 10 Nov 2019 18:56:44 +0800 Subject: [PATCH 22/22] done some translation! --- po/R-zh_CN.po | 48 ++++++++++++------------ po/zh_CN.po | 101 +++++++++++++++++++++++++++----------------------- 2 files changed, 78 insertions(+), 71 deletions(-) diff --git a/po/R-zh_CN.po b/po/R-zh_CN.po index ec3b630c3c..dfedd84c70 100644 --- a/po/R-zh_CN.po +++ b/po/R-zh_CN.po @@ -1416,86 +1416,86 @@ msgid "the regex \"" msgstr "" msgid "\". Please double check the input file is a valid csvy." -msgstr "" +msgstr "从这里开始" msgid "User-supplied 'header' will override that found in metadata." -msgstr "" +msgstr "用户提供的“header”将覆盖元数据中的列名" msgid "" "User-supplied column names in 'col.names' will override those found in YAML " "metadata." -msgstr "" +msgstr "用户在“col.names”中提供的列名将覆盖在YAML元数据中找到的列名" msgid "" "colClasses dictated by user input and those read from YAML header are in " "conflict (specifically, for column" -msgstr "" +msgstr "用户输入指定的列类型和从YAML列名中读取的列类型发生冲突(特别是column" msgid "s" -msgstr "" +msgstr "s" msgid "[" -msgstr "" +msgstr "[" msgid "]); the proceeding assumes the user input was" -msgstr "" +msgstr "]); 该过程假定用户输入的是" msgid "" "an intentional override and will ignore the types implied by the YAML " "header; please exclude" -msgstr "" +msgstr "有意覆盖的,并且将忽略YAML列名所指示的类型;" msgid "these columns" -msgstr "" +msgstr "这些列" msgid "this column from colClasses if this was unintentional." -msgstr "" +msgstr "如果是无意的,请排除colClasses中的此列" msgid "User-supplied 'sep' will override that found in metadata." -msgstr "" +msgstr "用户提供的“sep”将覆盖元数据中的分隔符" msgid "User-supplied 'quote' will override that found in metadata." -msgstr "" +msgstr "用户提供的“quote”将覆盖元数据中的引号" msgid "User-supplied 'dec' will override that found in metadata." -msgstr "" +msgstr "用户提供的“dec”将覆盖元数据中的小数点分隔符" msgid "User-supplied 'na.strings' will override that found in metadata." -msgstr "" +msgstr "用户提供的“na.strings”将覆盖元数据中对默认值的预处理" msgid "Column '" -msgstr "" +msgstr "列" msgid "' was requested to be '" -msgstr "" +msgstr "被要求为" msgid "' but fread encountered the following" -msgstr "" +msgstr "但是fread遇到了以下问题" msgid "error" -msgstr "" +msgstr "错误" msgid "warning" -msgstr "" +msgstr "警告" msgid ":" -msgstr "" +msgstr ":" msgid "so the column has been left as type '" -msgstr "" +msgstr "所以该列已经被保存为类型" msgid "" "key argument of data.table() must be a character vector naming columns (NB: " "col.names are applied before this)" -msgstr "" +msgstr "data.table()的关键参数必须是字符向量命名的列(NB:col.names在这之前被使用过)" msgid "" "index argument of data.table() must be a character vector naming columns " "(NB: col.names are applied before this)" -msgstr "" +msgstr "data.table()的关键参数必须是字符向量命名的列(NB:col.names在这之前被使用过)" msgid "dateTimeAs must be a single string" -msgstr "" +msgstr "dataTimeAs 必须是单个字符串" msgid "dateTimeAs must be 'ISO','squash','epoch' or 'write.csv'" msgstr "dateTimeAs 必须是 'ISO','squash','epoch' 或 'write.csv'" diff --git a/po/zh_CN.po b/po/zh_CN.po index 710b460ec5..67b01a075d 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -2810,82 +2810,82 @@ msgstr "" #: fsort.c:156 #, c-format msgid "Range = [%g,%g]\n" -msgstr "" +msgstr "Χ=[%g,%g]\n" #: fsort.c:157 msgid "Cannot yet handle negatives." -msgstr "" +msgstr "Ŀǰ޷ֵ" #: fsort.c:170 #, c-format msgid "maxBit=%d; MSBNbits=%d; shift=%d; MSBsize=%d\n" -msgstr "" +msgstr "maxBit=%d; MSBNbits=%d; shift=%d; MSBsize=%d\n" #: fsort.c:173 msgid "Unable to allocate working memory" -msgstr "" +msgstr "޷乤ڴ" #: fsort.c:177 #, c-format msgid "" "counts is %dMB (%d pages per nBatch=%d, batchSize=%lld, lastBatchSize=%lld)\n" -msgstr "" +msgstr "countsΪ%dMB (ÿnBatchе%dҳ=%d, batchSize=%lld, lastBatchSize=%lld)\n" #: fsort.c:230 msgid "Internal error: counts[nBatch-1][MSBsize-1] != length(x)" -msgstr "" +msgstr "ڲcounts[nBatch-1][MSBsize-1] length(x)" #: fsort.c:246 msgid "Top 5 MSB counts: " -msgstr "" +msgstr "ǰ5MSB counts" #: fsort.c:246 #, c-format msgid "%lld " -msgstr "" +msgstr "%lld " #: fsort.c:246 fwrite.c:690 fwrite.c:947 msgid "\n" -msgstr "" +msgstr "\n" #: fsort.c:247 #, c-format msgid "Reduced MSBsize from %d to " -msgstr "" +msgstr "MSBsize %d ٵ" #: fsort.c:251 #, c-format msgid "%d by excluding 0 and 1 counts\n" -msgstr "" +msgstr "%d ͨų01counts\n" #: fsort.c:308 #, c-format msgid "%d: %.3f (%4.1f%%)\n" -msgstr "" +msgstr "%d: %.3f (%4.1f%%)\n" #: fwrite.c:601 #, c-format msgid "buffMB=%d outside [1,1024]" -msgstr "" +msgstr "buffMB=%d [1,1024]֮" #: fwrite.c:608 #, c-format msgid "" "eol must be 1 or more bytes (usually either \\n or \\r\\n) but is length %d" -msgstr "" +msgstr "eol1ֽڣͨeither\\n \\r\\ndzΪ%d" #: fwrite.c:611 msgid "Column writers: " -msgstr "" +msgstr "д룺 " #: fwrite.c:613 fwrite.c:615 fwrite.c:617 #, c-format msgid "%d " -msgstr "" +msgstr "%d " #: fwrite.c:616 msgid "... " -msgstr "" +msgstr "... " #: fwrite.c:619 #, c-format @@ -2893,17 +2893,19 @@ msgid "" "\n" "args.doRowNames=%d args.rowNames=%d doQuote=%d args.nrow=%lld args.ncol=%d " "eolLen=%d\n" -msgstr "" +msgstr "\n" +"args.doRowNames=%d args.rowNames=%d doQuote=%d args.nrow=%lld args.ncol=%d " +"eolLen=%d\n" #: fwrite.c:652 #, c-format msgid "Internal error: type %d has no max length method implemented" -msgstr "" +msgstr "ڲ" #: fwrite.c:659 #, c-format msgid "maxLineLen=%zd. Found in %.3fs\n" -msgstr "" +msgstr "maxLineLen=%zd. %.3fsз\n" #: fwrite.c:679 #, c-format @@ -2911,7 +2913,8 @@ msgid "" "%s: '%s'. Failed to open existing file for writing. Do you have write " "permission to it? Is this Windows and does another process such as Excel " "have it open?" -msgstr "" +msgstr "%s: '%s'. ޷һڵļд.ǷԸļдȨޣ" +"WindowsϵͳǷExcel֮ĽѾ˸ļ" #: fwrite.c:680 #, c-format @@ -2919,75 +2922,76 @@ msgid "" "%s: '%s'. Unable to create new file for writing (it does not exist already). " "Do you have permission to write here, is there space on the disk and does " "the path exist?" -msgstr "" +msgstr "%s: '%s'. ޷µļд루ļڣ" +"ǷԴдȨޣǷпռԼ·Ƿڣ" #: fwrite.c:688 #, c-format msgid "Writing bom (%s), yaml (%d characters) and column names (%s) ... " -msgstr "" +msgstr "дbom (%s), yaml (%d characters) column names (%s) ..." #: fwrite.c:701 #, c-format msgid "Unable to allocate %d MiB for header: %s" -msgstr "" +msgstr "޷Ϊheader: %s%d MiB" #: fwrite.c:729 fwrite.c:789 msgid "Can't allocate gzip stream structure" -msgstr "" +msgstr "޷gzipṹ" #: fwrite.c:735 #, c-format msgid "Unable to allocate %d MiB for zbuffer: %s" -msgstr "" +msgstr "޷Ϊzbuffer: %s%d MiB" #: fwrite.c:750 #, c-format msgid "Compress gzip error: %d" -msgstr "" +msgstr "ѹgzip: %d" #: fwrite.c:751 fwrite.c:759 fwrite.c:953 #, c-format msgid "%s: '%s'" -msgstr "" +msgstr "%s: '%s'" #: fwrite.c:756 #, c-format msgid "done in %.3fs\n" -msgstr "" +msgstr "%.3fs\n" #: fwrite.c:758 msgid "No data rows present (nrow==0)\n" -msgstr "" +msgstr "ǰû(nrow==0)\n" #: fwrite.c:776 #, c-format msgid "" "Writing %lld rows in %d batches of %d rows (each buffer size %dMB, " "showProgress=%d, nth=%d)\n" -msgstr "" +msgstr "%dед%lld(ÿĴСΪ%dMBshowProgress=%d, nth=%d)\n)" #: fwrite.c:961 #, c-format msgid "zlib v%s deflate() returned error %d with z_stream.msg '%s'. %s\n" -msgstr "" +msgstr "zlib v%s deflate()ʹ%d with z_stream.msg '%s'. %s˴\n" #: fwrite.c:962 msgid "Please include the full output above in your data.table bug report." -msgstr "" +msgstr "data.table󱨸а" #: fwrite.c:963 msgid "" "Please retry fwrite() with verbose=TRUE and include the full output with " "your data.table bug report." -msgstr "" +msgstr "ʹverbose=TRUEfwrite()data.table󱨸" #: fwriteR.c:41 msgid "Internal error: col passed to getMaxCategLen is missing levels" -msgstr "" +msgstr "ڲ󣺴ݸgetMaxCateLencolڶʧ" #: fwriteR.c:75 msgid "Internal error: getMaxListItemLen should have caught this up front." -msgstr "" +msgstr "ڲgetMaxListItemLenӦѾԤץȡ" #: fwriteR.c:98 #, c-format @@ -2995,56 +2999,59 @@ msgid "" "Row %d of list column is type '%s' - not yet implemented. fwrite() can write " "list columns containing items which are atomic vectors of type logical, " "integer, integer64, double, complex and character." -msgstr "" +msgstr "бҳ%d'%s' - δʵʩ. fwrite()д" +"߼ԭĿбҳ" +"64˫ȣַ" #: fwriteR.c:103 #, c-format msgid "" "Internal error: row %d of list column has no max length method implemented" -msgstr "" +msgstr "ڲбҳ%dûʵ󳤶ȷ" #: fwriteR.c:170 msgid "" "fwrite must be passed an object of type list; e.g. data.frame, data.table" -msgstr "" +msgstr "fwrite봫һΪбĶ󣻱data.frame, data.table" #: fwriteR.c:179 msgid "fwrite was passed an empty list of no columns. Nothing to write." -msgstr "" +msgstr "fwriteһûеĿб. ûжд" #: fwriteR.c:234 #, c-format msgid "Column %d's length (%d) is not the same as column 1's length (%d)" -msgstr "" +msgstr "%dij(%d)1ij(%d)һ" #: fwriteR.c:237 #, c-format msgid "Column %d's type is '%s' - not yet implemented in fwrite." -msgstr "" +msgstr "%d'%s' - δfwriteʵʩ" #: fwriteR.c:262 msgid "" "No list columns are present. Setting sep2='' otherwise quote='auto' would " "quote fields containing sep2.\n" -msgstr "" +msgstr "ǰûбҳ. sep2=''quote='auto'ðsep2ֶ.\n" #: fwriteR.c:266 #, 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 "" +msgstr "quote='auto', ֶΰһsepֶν" #: fwriteR.c:270 #, c-format msgid "" "sep ('%c'), sep2 ('%c') and dec ('%c') must all be different. Column %d is a " "list column." -msgstr "" +msgstr "sep ('%c'), sep2 ('%c') dec ('%c') 붼ͬ. %d һ" +"б" #: gsumm.c:43 msgid "env is not an environment" -msgstr "" +msgstr "envǻ" #: gsumm.c:45 msgid "o is not an integer vector" @@ -3052,7 +3059,7 @@ msgstr "" #: gsumm.c:46 msgid "f is not an integer vector" -msgstr "" +msgstr "fһ" #: gsumm.c:47 msgid "l is not an integer vector"