# 
# RiskScape™ Copyright New Zealand Institute for Earth Science Limited
# (Earth Sciences New Zealand) is distributed for research purposes only
# under the terms of AGPLv3.
# 
# RiskScape™ Copyright 2026 New Zealand Institute for Earth Science
# Limited (Earth Sciences New Zealand). All rights reserved. Source code
# available under the AGPLv3.
# 
# This program is free software: you can redistribute it and/or modify it under
#  the terms of the GNU Affero General Public License as published by the Free
#  Software Foundation, either version 3 of the License, or (at your option) any
#  later version.
# 
# This program is distributed for RESEARCH PURPOSES ONLY, in the hope that it will
# be useful for research and education initiatives.
# 
# If you are not a researcher, or you are a researcher who wishes to use this
# program on terms other than AGPLv3 (including those who wish to restrict the
# distribution of any source code created using this program), please contact:
# https://riskscape.org.nz
# 
# This program is distributed WITHOUT ANY WARRANTY; without even the implied
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Affero General Public License for more details.  You should have received a copy
# of the GNU Affero General Public License along with this program.  If not, see
# <http://www.gnu.org/licenses/>.
# 
# By way of summary only, under the AGPLv3:
#     • Permissions of this strongest copyleft license are conditioned
#       on making available complete source code of licensed works and
#       modifications, which include larger works using a licensed work,
#       under the same license.
#     • Copyright and license notices must be preserved.
#     • Contributors provide an express grant of patent rights.
#     • When a modified version is used to provide a service over a
#       network, the complete source code of the modified version must be made
#       available.
# 

nz.org.riskscape.config.ConfigProblems.ALREADY_INCLUDED = \
  Not importing {0}, already imported.  If auto-import is enabled, you can remove the explicit import of {0} to get rid \
  of this warning

nz.org.riskscape.config.ConfigProblems.DUPLICATE_SECTION = \
  Section ''{0}'' was already defined at {1}, ignoring the duplicate definition from {2}

nz.org.riskscape.config.ConfigProblems.DUPLICATE_KEY = \
  Multiple values were given for {2} in section {1} (defined in {0}).  The last value was used.

nz.org.riskscape.config.ConfigProblems.SPURIOUS_SECTION_IN_PROJECT = \
  Unrecognized INI section header ''{0}'' found in project file {1}. Only {2} are supported.

nz.org.riskscape.config.ConfigProblems.SPURIOUS_KEYS = \
  {0} contained additional unrecognized parameter keywords which will be ignored: {1}

nz.org.riskscape.engine.bind.impl.BookmarkBinder.LocalProblems.COULD_NOT_CONVERT = \
  Additionally, RiskScape attempted to convert your coverage to a relation, but it was not possible

nz.org.riskscape.engine.geo.IntersectionIndex.LocalProblems.INTERSECTION_CUT_NOT_SUPPORTED_HINT = \
  Your features contain a {0} geometry that can not be optimized by cutting before indexing. \
  Set `intersection_cut` to false and try again.

# Common error messages produced by Riskscape
# Note that this uses MessageFormat to exapnd the {} arguments, so any single-quotes (i.e. ')
# need to be repeated (i.e. '') so that they get rendered correctly.

nz.org.riskscape.engine.problem.GeneralProblems.BAD_VALUE = \
  Value ''{0}'' is invalid for {1}, it must be {2}

nz.org.riskscape.engine.problem.GeneralProblems.FAILED_RESOURCE_LOOKED_UP = \
  {2} ''{0}'' (from {1}) is not valid

nz.org.riskscape.engine.problem.GeneralProblems.FAILED_OBJECT_LOOKED_UP = \
  The {1} ''{0}'' is not valid due to the following problems

# general 'was not found' or 'does not exist' type problem
nz.org.riskscape.engine.problem.GeneralProblems.MULTIPLE_PROBLEMS = \
  Multiple problems were encountered:


# general 'was not found' or 'does not exist' type problem
nz.org.riskscape.engine.problem.GeneralProblems.NO_SUCH_OBJECT_EXISTS = \
  No {1} with id ''{0}'' exists

  # general 'was not found' or 'does not exist' type problem, with solution
nz.org.riskscape.engine.problem.GeneralProblems.NO_SUCH_OBJECT_EXISTS_DID_YOU_MEAN = \
  No {1} with id ''{0}'' exists, did you mean one of: {2}?

nz.org.riskscape.engine.problem.GeneralProblems.OBJECT_ALREADY_EXISTS = \
  You cannot add a {1} with the same id (''{0}'') more than once

nz.org.riskscape.engine.problem.GeneralProblems.PRECISION_LOSS = \
  There has been a loss in precision converting ''{0}'' to ''{1}''

nz.org.riskscape.engine.problem.GeneralProblems.VALUE_OUT_OF_RANGE = \
  Expected {0} to be within {2}, but was {1}

nz.org.riskscape.engine.problem.GeneralProblems.NOT_AN_OPTION = \
  ''{0}'' is not a valid option for {1}. Available options are: {2}

nz.org.riskscape.engine.problem.GeneralProblems.NOT_AN_OPTION_SIMILAR_TO = \
  ''{0}'' is not a valid option. Did you mean one of: {1}

nz.org.riskscape.engine.problem.GeneralProblems.OPERATION_NOT_SUPPORTED = \
  The ''{0}'' operation is not supported by {1}

nz.org.riskscape.engine.problem.GeneralProblems.BAD_RESOURCE = \
  Failed to create {0} from {1}

nz.org.riskscape.engine.problem.GeneralProblems.FAILED_TO_BUILD = \
  Failed to construct {0} from the input provided

nz.org.riskscape.engine.problem.GeneralProblems.COULD_NOT_CONVERT = \
  Could not convert value ''{2}'' to a {1} for parameter ''{0}''

nz.org.riskscape.engine.problem.GeneralProblems.FAILED_TO_VALIDATE = \
  Failed to validate {0} ''{1}'' (from {2})

nz.org.riskscape.engine.problem.GeneralProblems.BAD_LIST_LENGTH = \
  Expected list to contain {0} elements, but it has {1}

nz.org.riskscape.engine.problem.GeneralProblems.DEPRECATED = \
  {0} will be removed soon. It can be replaced with {1}

 # <named-thing> is required but was not found
# E.g. 'location' parameter is required but was not found
nz.org.riskscape.engine.problem.GeneralProblems.REQUIRED = \
  {0} is required but was not found

# Problems found with <named-thing>
# e.g. Problems found with 'probabilistic' pipeline
nz.org.riskscape.problem.StandardCodes.PROBLEMS_FOUND = \
  Problems found with {0}

# We caught an exception, so just display the exception's message
nz.org.riskscape.problem.StandardCodes.CAUGHT_EXCEPTION = \
  {0}


# '<value-provided>' is not a valid option for <named-thing>. Valid options are: <list-of-options>
# E.g. 'relation-input' is not a valid option for 'assets' pipeline step.
#       Valid options are: [core:aggregation,  core:relation-input, core:sample-coverage ...]
nz.org.riskscape.problem.StandardCodes.NOT_AN_OPTION = \
  ''{0}'' is not a valid option for {1}. Valid options are: {2}

# <named-thing> is invalid. Reason: <cause>
# e.g. 'ftp:\\data/kaiju-route.csv' URI is invalid. Reason: Illegal character in opaque part at index 4: ftp:\\data/kaiju-route.csv
nz.org.riskscape.problem.StandardCodes.INVALID_BECAUSE = \
  {0} is invalid. Reason: {1}

# E.g. Failed to parse type expression 'blah'
nz.org.riskscape.problem.StandardCodes.CANT_PARSE = \
  Failed to parse {0} {1}

# A geometry member is required but not found in struct
nz.org.riskscape.problem.StandardCodes.GEOMETRY_REQUIRED = \
  Geometry attribute required but none found in {0}

#
# Lexer Stuff
#
nz.org.riskscape.dsl.LexerProblems.EOF_IN_STRING = \
  Got EOF before string was terminated at position {0}

nz.org.riskscape.dsl.LexerProblems.UNEXPECTED_CHARACTER = \
  Unexpected character ''{1}'' at {0}

nz.org.riskscape.dsl.LexerProblems.UNEXPECTED_EOF = \
  Reached EOF while lexing at {0}

#
# Parser problems
#
nz.org.riskscape.dsl.ProblemCodes.INCONSISTENT_INDENT = \
  Mixed indenting (tabs and spaces) on lines {0} and {1}

nz.org.riskscape.dsl.ProblemCodes.UNEXPECTED_TOKEN = \
  Got {0}, wanted one of {1}

nz.org.riskscape.dsl.ProblemCodes.UNEXPECTED_IDENTIFIER = \
  Got {0}, expected one of {1}

nz.org.riskscape.dsl.ProblemCodes.UNEXPECTED_WHITESPACE = \
  Expected {0} to be on same line as {1}

nz.org.riskscape.engine.bind.impl.NumberBinder.LocalProblems.NUMBER_FORMAT_EXCEPTION = \
  Could not convert ''{0}'' into a number ({1}). Make sure numbers are written with numeric characters, are free of \
  punctuation, and that 'integer' and 'long' numbers do not include any decimal places.

#
# CLI Stuff
#
nz.org.riskscape.engine.function.CompositeAggregationFunction.LocalProblems.LAMBDA_ARGS_DIFFER = \
  Lambda argument ''{0}'' has changed. All lambda arguments should match the first ''{1}''

nz.org.riskscape.engine.function.ExpressionAggregationFunction.LocalProblems.TYPE_NOT_SUPPORTED_FOR_THIS_FUNCTION = \
  The ''{0}'' type is not supported with this aggregation function. \
  The input data may be the wrong type, or may be data of a mixed type \
  (e.g. mixed Integer and Floating values become ''Anything'')

nz.org.riskscape.engine.function.ExpressionAggregationFunction.LocalProblems.COULD_NOT_REALIZE_EXPRESSION = \
  This aggregation function is comprised of simple expressions, and the ''{0}'' {1} is invalid for the given input type

nz.org.riskscape.engine.geo.GeometryRenderer.Errors.CANNOT_DISPLAY = \
  Cannot display {0} in CRS {1} (The source data may not match the current CRS/axis-order settings)

nz.org.riskscape.engine.rl.agg.ListCollecting.LocalProblems.VALUE_NOT_NUMERIC = \
  Cannot calculate the {0} of input type ''{1}'' because it is not numeric.

nz.org.riskscape.engine.rl.agg.PercentileAggregationFunction.LocalProblems.PERCENTILE_OUT_OF_RANGE = \
  ''{0}'' is not valid - percentiles need to be between 0 and 100


#
# Bookmark Stuff
#

nz.org.riskscape.engine.data.BaseBookmarkResolver.ProblemCodes.USER_DEFINED_CRS_ERROR = \
  There was a problem with the bookmark-defined coordinate reference system - {0}

nz.org.riskscape.engine.data.BaseBookmarkResolver.ProblemCodes.UNSUPPORTED_PRJ_TIP = \
  Try using the `crs-name` parameter in the bookmark, or delete the `.prj` file to use the default CRS (EPSG:404000)

nz.org.riskscape.engine.data.BookmarkProblems.NOT_BOOKMARK_OR_FILE = \
  No bookmark with id ''{0}'' exists, and no supported file with that name could be found either.

nz.org.riskscape.engine.data.BookmarkProblems.COULD_NOT_RESOLVE = \
  Cannot infer the format of data in location ''{0}''. \
  Please specify the ''format'' of the data in the bookmark. \
  Refer to `riskscape format list` for supported formats.

nz.org.riskscape.engine.data.BookmarkProblems.CANNOT_OPEN = \
  {0} cannot be opened.  Please check that it is in a supported format

nz.org.riskscape.engine.data.BookmarkProblems.INVALID_CONTENT = \
  Invalid {0}

nz.org.riskscape.engine.data.BookmarkProblems.NO_FEATURE_LAYERS = \
  The location does not contain any data suitable for use with RiskScape.  Check that it contains \
  at least one vector data spatial layer and try again.

nz.org.riskscape.engine.data.BookmarkProblems.SET_ATTRIBUTES_NOT_ALLOWED_WITH_TYPE = \
  Cannot use 'type' and 'set-attribute' together. Please remove one

nz.org.riskscape.engine.data.BookmarkProblems.UNKNOWN_FORMAT_TIP = \
  Please check that the `format` parameter for the bookmark matches the name of a supported format exactly. \
  Note that RiskScape plugins may enable support for additional formats (refer to the documentation for more help). \
  You can use `riskscape format list` to view supported formats

nz.org.riskscape.engine.data.relation.AttributeMapBinder.LocalProblems.COULD_NOT_PARSE_JSON_STRING = \
  Given string was not valid JSON - {0}

nz.org.riskscape.engine.data.relation.AttributeMapBinder.LocalProblems.JSON_OBJECT_NOT_A_DICTIONARY = \
  Parsed JSON object was not a dictionary, it was a {0} - only dictionaries are allowed

nz.org.riskscape.engine.data.DefaultBookmarks.LocalProblems.UNSUPPORTED_BOOKMARK = \
  Some bookmarks were in an unsupported format. Refer to `riskscape format list` for supported bookmark \
  formats and file extensions

#
# OutputProblems
#

nz.org.riskscape.engine.output.CsvWriter.LocalProblems.DATA_TRUNCATED = \
  Data in column ''{0}'', row {1} was truncated.  Spreadsheet software can struggle to display \
  cells of data with more than 32,767 characters, so the data has been truncated to make sure the output is usable.

nz.org.riskscape.engine.output.CsvWriter.LocalProblems.WARNING_LIMIT_REACHED = \
  Data truncation warning limit has been exceeded - no more warnings will be shown.
#
# PipelineProblems
#

nz.org.riskscape.engine.pipeline.PipelineProblems.CANNOT_REALIZE = \
  Failed to validate {0} for execution

nz.org.riskscape.engine.pipeline.PipelineProblems.CHAINING_FROM_STEP_WITH_NO_OUTPUT = \
  Step ''{0}'' produces no output but has dependencies: {1}.

nz.org.riskscape.engine.pipeline.PipelineProblems.CYCLE_DETECTED = \
  You have a cycle in your pipeline introduced by `{0}` at {1}. \
  Step `{2}` is already part of this branch of the pipeline (first seen at {3}). \
  Make sure you are using the correct step name, then change or remove `-> {2}` from \
  {1} and try again.

nz.org.riskscape.engine.pipeline.PipelineProblems.STEP_REDEFINITION = \
  The step name ''{0}'' is defined in the pipeline at {1} and then \
  again at {2}. Please choose a unique name.

nz.org.riskscape.engine.pipeline.PipelineProblems.EXECUTION_FAILED = \
  Execution of your data processing pipeline failed. The reasons for this follow:

nz.org.riskscape.engine.pipeline.PipelineProblems.FAILED_DEPENDENCIES = \
  Step could not be realized because of failed dependencies

nz.org.riskscape.engine.pipeline.PipelineProblems.OUT_OF_STORAGE = \
  Could not write to {0} - only {1} bytes free

nz.org.riskscape.engine.rl.LanguageFunctions.LocalProblems.USER_ASSERT = \
  User-generated assertion: ''{0}''

nz.org.riskscape.engine.rl.LanguageFunctions.LocalProblems.USER_WARNING = \
  User-generated warning: ''{0}''

nz.org.riskscape.engine.rl.MapStruct.LocalProblems.LAMBDA_NOT_COMPATIBLE_ALL_ATTRIBUTES_HINT = \
  Please check that the lambda expression is compatible with all the attribute types \
  in this struct: ''{0}''. You may need to remove any incompatible attribute types from \
  the struct first

nz.org.riskscape.engine.steps.JoinStep.LocalProblems.NO_LEFT_HAND_SIDE = \
  No left hand side (LHS) has been provided.

nz.org.riskscape.engine.steps.JoinStep.LocalProblems.NO_RIGHT_HAND_SIDE = \
  No right hand side (RHS) has been provided.

nz.org.riskscape.engine.steps.SaveStep.LocalProblems.OPTIONS_REQUIRED = \
  {0} requires an ''options'' parameter containing {1}

nz.org.riskscape.engine.steps.SaveStep.LocalProblems.OPTIONS_WITH_NO_FORMAT = \
  The 'options' parameter can only be used if the 'format' parameter is also specified.

nz.org.riskscape.engine.steps.JoinStep.LocalProblems.STEP_REFERENCES_NOT_ALLOWED = \
  {0} not allowed here.  The join step only supports a single step reference in the `rhs` parameter, \
  e.g. `join(rhs: <- some_input)`

nz.org.riskscape.engine.steps.JoinStep.LocalProblems.TWO_RIGHT_HAND_SIDES = \
  The right hand side has been provided by a named input and the `rhs` argument. \
  Only one is allowed.


#
# SubpipelineStep codes
#
nz.org.riskscape.engine.steps.SubpipelineStep.LocalProblems.AMBIGUOUS_OUTPUT = \
  There are multiple steps in the sub-pipeline that produce output: {0}.

nz.org.riskscape.engine.steps.SubpipelineStep.LocalProblems.AMBIGUOUS_OUTPUT_HINT = \
  The `subpipeline` step only supports having a single step being returned back in to the parent pipeline.   Nominate \
  one step  as the output step by naming it `out`, e.g. `select({...}) as out`.

nz.org.riskscape.engine.steps.SubpipelineStep.LocalProblems.CHAINING_TO_IN= \
  Your sub-pipeline contains a step that is chained to {0}. The `in` step can only be \
  used as input to your sub-pipeline.

nz.org.riskscape.engine.steps.SubpipelineStep.LocalProblems.CHILD_FAILED = \
  Failed to realize child pipeline from {0}:

nz.org.riskscape.engine.steps.SubpipelineStep.LocalProblems.EMPTY = \
  Your sub-pipeline is empty. Add some steps and try again.

nz.org.riskscape.engine.steps.SubpipelineStep.LocalProblems.IN_STEP_REF_MISSING = \
  Your sub-pipeline is chained to step ''{0}'', but it does not declare an `in` step reference.  Try adding an \
  `in -> ` at the beginning of your sub-pipeline and try again.

  nz.org.riskscape.engine.steps.SubpipelineStep.LocalProblems.IN_STEP_REF_BUT_NO_INPUT = \
  Your sub-pipeline has an `in` step, but no step is chained to it.  Try chaining a step to your `subpipeline` \
  step, e.g. `select({...}) -> subpipeline(...)`, and try again.

nz.org.riskscape.engine.steps.SubpipelineStep.LocalProblems.MISSING_PARAMETERS = \
  Parameter(s) {1} required by sub-pipeline {0}, but were not specified in `subpipeline` step

nz.org.riskscape.engine.steps.SubpipelineStep.LocalProblems.MISSING_PARAMETER_HINT = \
  ''${0}'' first declared on {1}

nz.org.riskscape.engine.steps.SubpipelineStep.LocalProblems.PARAMETERS_NOT_NAMED = \
  Missing pipeline parameter name at {0}.

nz.org.riskscape.engine.steps.SubpipelineStep.LocalProblems.PARAMETERS_NOT_NAMED_HINT = \
  Pipeline parameters must all be named, see https://engine-docs.sites.riskscape.nz/reference/expressions.html#tuples \
  for more details

nz.org.riskscape.engine.steps.SubpipelineStep.LocalProblems.RECURSION = \
  Sub-pipeline recursion has been detected at {0}. \
  A sub-pipeline can not include itself, either directly, or as a sub-pipeline.

#
# SortStep codes
#
nz.org.riskscape.engine.steps.SortStep.LocalProblems.DELTA_ATTRIBUTE_ALREADY_EXISTS = \
  The delta attribute ''{0}'' cannot be added because an attribute with that name already \
  exists in {1}. The delta attribute name can be changed with the `delta-attribute` parameter.

nz.org.riskscape.engine.steps.SortStep.LocalProblems.DELTA_TYPE_DIFFERENT_TO_ACTUAL = \
  The delta-type that you specified ''{0}'' is different to the type that the delta lambda \
  actually returns ''{1}''.

#
# UnnestStep codes
#
nz.org.riskscape.engine.steps.UnnestStep.LocalProblems.DEPRECATED_SYNTAX = \
  The unnest step does not need list attributes to be quoted, e.g. {0} can be \
  rewritten as {1}

#
# ExpressionRealizer ProblemCodes
#

nz.org.riskscape.engine.rl.ExpressionRealizer.ProblemCodes.KEYWORD_REQUIRED = \
  Argument {0} is missing a keyword label

nz.org.riskscape.engine.rl.ExpressionRealizer.ProblemCodes.KEYWORD_DOES_NOT_EXIST = \
  No such keyword ''{0}'' - available: {1}

nz.org.riskscape.engine.rl.ExpressionRealizer.ProblemCodes.KEYWORD_OUT_OF_ORDER = \
  Cannot set argument {0} with keyword ''{1}'' - it has already been set as argument {2}

nz.org.riskscape.engine.rl.ExpressionRealizer.ProblemCodes.MISSING_KEYWORD_ARGUMENTS = \
  More arguments required. Keyword ''{0}'' is argument {1} but only {2} arguments were specified

nz.org.riskscape.rl.ast.ExpressionProblems.CAN_NOT_REPLACE_MEMBER = \
  Each attribute in a struct must have a unique name. The ''{0}'' attribute was declared first as `{1}` and then \
  again as `{2}`

nz.org.riskscape.rl.ast.ExpressionProblems.CONSTANT_REQUIRED = \
  Expected {0} to be a constant value. \
  The expression should not access tuple or struct attributes here, as these will not contain constant values

nz.org.riskscape.rl.ast.ExpressionProblems.DUPLICATE_SELECT_ALL = \
  Multiple select-all operators found - {0} - '*' cannot be used multiple times within the same \
  struct expression

nz.org.riskscape.rl.ast.ExpressionProblems.EMPTY_STRING_NOT_VALID = \
  Empty text is not a valid expression, you must enter some text to create a valid expression, e.g `exposure`

nz.org.riskscape.rl.ast.ExpressionProblems.FAILED_TO_REALIZE = \
  Failed to validate {0} against input type {1}

nz.org.riskscape.rl.ast.ExpressionProblems.LAMBDA_ARITY_ERROR = \
  Wrong number of arguments given in lambda expression {0} - expected {2}, found {1}

nz.org.riskscape.rl.ast.ExpressionProblems.MALFORMED_EXPRESSION = \
  Could not parse expression ''{0}''

nz.org.riskscape.rl.ast.ExpressionProblems.MALFORMED_EXPRESSION_TIP =  \
  Check for missing operators, unquoted strings and extra brackets. Use double-quotes when an identifier \
  contains ':', '-' or other non alpha-numeric characters.

nz.org.riskscape.rl.ast.ExpressionProblems.MISMATCH = \
  Found {0} but a {1} is required, e.g {2}

nz.org.riskscape.rl.ast.ExpressionProblems.NO_SUCH_OPERATOR_FUNCTION = \
  Operator ''{0}'' is not supported for types ''{1}''

nz.org.riskscape.rl.ast.ExpressionProblems.NO_SUCH_STRUCT_MEMBER = \
  Could not find ''{0}'' among {1}

nz.org.riskscape.rl.ast.ExpressionProblems.NOT_A_VALID = \
  ''{1}'' is not a valid {0} expression

nz.org.riskscape.rl.ast.ExpressionProblems.PARAMETERS_NOT_ALLOWED = \
  The {0} cannot be used in this context, as ''$'' replacement will not occur

nz.org.riskscape.rl.ast.ExpressionProblems.POINTLESS_SELECT_ALL = \
  The '.*' select-all operator is only valid when used inside a '{ }' struct expression

nz.org.riskscape.rl.ast.ExpressionProblems.POINTLESS_SELECT_ALL_IN_STRUCT = \
  The '.*' select-all operator  is only valid when used without a member name.  Remove \
  the name or remove the '.*' from {0}

nz.org.riskscape.rl.ast.ExpressionProblems.PROPERTY_OUTSIDE_OF_AGGREGATION_FUNCTION = \
  {0} must appear within an aggregate function

nz.org.riskscape.rl.ast.ExpressionProblems.SELECT_ALL_REQUIRES_A_STRUCT = \
  The select-all operator only works with struct types -  ''{1}'' was given (found at {0})

#
# ResourceProblems
#

nz.org.riskscape.engine.resource.ResourceProblems.CONTAINER_NOT_WRITABLE = \
  Can not create files in {0} - is the location writable?

nz.org.riskscape.engine.resource.ResourceProblems.NOT_FOUND = \
  File not found at {0}

nz.org.riskscape.engine.resource.ResourceProblems.READ_ACCESS_DENIED = \
  You are not allowed to read file {0}

nz.org.riskscape.engine.resource.ResourceProblems.UNSUPPORTED_SCHEME = \
  Protocol ''{0}'' is not supported - this version of RiskScape only supports 'file'

nz.org.riskscape.engine.resource.ResourceProblems.ENSURE_LOCAL_NOT_SUPPORTED = \
  Fetching local file from {0} is not allowed

nz.org.riskscape.engine.resource.ResourceProblems.INSECURE_NOT_ALLOWED = \
  Fetching {0} is not allowed due to insecure protocol. \
  E.g. instead of an insecure 'http://' URI, try using a secure 'https://' URI.

nz.org.riskscape.engine.resource.ResourceProblems.FORBIDDEN = \
  You are not allowed to access {0} - HTTP/403. Please check that the URL is correct and that you have permission \
  to access this resource

nz.org.riskscape.engine.resource.ResourceProblems.UNAUTHORIZED = \
  You are not authorized to access {0} - HTTP/401. This resource may require a valid authentication token in \
  order to access it

#
# SecretProblems
#
nz.org.riskscape.engine.auth.SecretProblems.INSECURE = \
  Anyone logged into this computer may be able to view the secrets in {0}. \
  Consider changing that file''s permissions so that only you can access it

nz.org.riskscape.engine.auth.SecretProblems.NO_SECRETS_HINT = \
  You can use the ''{0}'' secrets file to define access tokens for specific websites. \
  Please refer to the docs for more information on setting this up

nz.org.riskscape.engine.auth.SecretProblems.NOT_FOUND_WITH_SECRET = \
  Note: Some services report a ''404 - not found'' error when you are not allowed to access an HTTP resource. \
  Check that the HTTP resource exists and that you are authorized to access it. \
  You are currently using {0}.

nz.org.riskscape.engine.auth.SecretProblems.SECRETS_HINT = \
  RiskScape used the {0}, but was unable to authenticate you. \
  Please check that this secret is valid for this URL

nz.org.riskscape.engine.auth.SecretProblems.REQUIRED_NOT_FOUND = \
  An authentication token (or "secret") is required in order to use this bookmark. \
  The secret should be defined with `framework = {0}` and `hostname = {1}`

nz.org.riskscape.engine.auth.SecretBuilder.class = secrets framework

#
# TypeProjection ProblemCodes
#

nz.org.riskscape.engine.projection.TypeProjection.ProblemCodes.MISSING_MEMBER = \
  Source data is missing ''{0}'' attribute and no `map-attribute.{0}` parameter was specified

nz.org.riskscape.engine.projection.TypeProjection.ProblemCodes.BAD_MAPPING = \
  Could not map attribute ''{0}'' from {1}

nz.org.riskscape.engine.projection.TypeProjection.ProblemCodes.MISSING_TARGET = \
  Target type has no attribute ''{0}'', did you mean one of: {1}

#
# Join Problems
#
nz.org.riskscape.engine.join.ProblemCodes.DUPLICATE_KEYS = \
  The same key names {0} are used in both the lhs and rhs inputs. Try naming \
  one of the inputs, e.g. input(name: 'new-name', ..

nz.org.riskscape.engine.join.ProblemCodes.JOIN_CONDITION_INVALID = \
  Failed to validate join condition ''{0}'' against ''{1}''

#
# ExpressionParser ProblemCodes
#
nz.org.riskscape.engine.pipeline.Pipeline.resource = \
  Could not parse pipeline from {0}

nz.org.riskscape.engine.pipeline.PipelineProblems.NAMED_INPUT_UNKNOWN = \
  {0} has no input named ''{1}''. Known input names are {2}

nz.org.riskscape.engine.pipeline.Pipeline.ProblemCodes.NAMED_INPUT_NOT_ALLOWED = \
  Step ''{0}'' does not have named inputs. Remove ''.{1}'' from step ''{2}'' in order to chain it

nz.org.riskscape.engine.pipeline.Pipeline.ProblemCodes.EDGE_ALREADY_EXISTS = \
  Step ''{0}'' has already been chained to ''{1}''

nz.org.riskscape.engine.pipeline.Pipeline.ProblemCodes.STEP_ALREADY_ADDED = \
  Can not add step ''{0}'' to pipeline, a step with the same name already exists ({1})

nz.org.riskscape.engine.pipeline.Pipeline.ProblemCodes.PARAMETER_UNKNOWN = \
  Parameter ''{0}'' does not exist on step ''{1}'' - available: {2}

nz.org.riskscape.engine.pipeline.Pipeline.ProblemCodes.INPUT_ALREADY_CHAINED = \
  Cannot chain {0} to ''{1}'', {2} is already chained

nz.org.riskscape.engine.pipeline.Pipeline.ProblemCodes.DEFAULT_INPUT_ALREADY_CHAINED = \
  Cannot chain ''{0}''. \
  This step uses named inputs, so you may need to explicitly use ''{1}'' here instead. \
  When no named input is explicitly specified, ''{2}'' is used by default, \
  however, this input has already been set with ''{3}''

nz.org.riskscape.engine.pipeline.Pipeline.ProblemCodes.STEP_NAME_UNKNOWN = \
  Step ''{0}'' has not been defined in this pipeline (only referenced). The steps currently defined are: {1}


nz.org.riskscape.engine.pipeline.PipelineBuilder.ProblemCodes.KEYWORD_REQUIRED = \
  Argument {0} is missing a keyword label

nz.org.riskscape.engine.pipeline.PipelineBuilder.ProblemCodes.STEP_PARAMETER_UNKNOWN = \
  No such parameter argument ''{0}'' exists on step id ''{2}'' - available: {1}

nz.org.riskscape.engine.pipeline.PipelineBuilder.ProblemCodes.STEP_REDEFINITION = \
  The step name ''{0}'' is already used in the pipeline by step {1}. Please choose a unique name.

nz.org.riskscape.engine.pipeline.PipelineBuilder.ProblemCodes.UNUSED_STEP_REFERENCE = \
  A reference to step ''{0}'' cannot appear on its own. It may be missing a `->` to chain it to another step

nz.org.riskscape.engine.pipeline.PipelineBuilder.ProblemCodes.UNUSED_NAMED_INPUT = \
  The step at the start of a chain cannot have a named input (i.e. ''{0}.{1}'') - there is no step before it \
  to send input.

nz.org.riskscape.engine.pipeline.PipelineBuilder.ProblemCodes.SUB_PIPELINE_REQUIRED = \
  Step ''{0}'' is missing required ''{1}'' argument

#
# TupleComparator
#
nz.org.riskscape.engine.sort.TupleComparator.ProblemCodes.EXPRESSION_RESULT_NOT_COMPARABLE = \
  Expression ''{0}'' results in {1} , which is not a comparable type (i.e. number, text, etc)


#
# Type stuff
#
nz.org.riskscape.engine.types.TypeProblems.COULD_NOT_COERCE = \
  Could not coerce given ''{0}'' type to the expected type of ''{1}''

# TODO refer users to 'natural join' (GL-773) here once we've implemented it
nz.org.riskscape.engine.types.TypeProblems.DUPLICATE_KEYS = \
  Could not create struct because it contains duplicate attribute names: {0}. \
  If this struct is the result of a join-like operation, then you may need to rename \
  one of the attributes in your bookmark

nz.org.riskscape.engine.types.TypeProblems.MISMATCH = \
  Type mismatch for {0}. Expected ''{1}'' but found ''{2}''

nz.org.riskscape.engine.types.TypeProblems.NOT_STRUCT = \
  Expected {0} to be a Struct, but got {1} instead

nz.org.riskscape.engine.types.TypeProblems.REQUIRES_ONE_OF = \
  Type mismatch for {0}. Expected one of {1} but found ''{2}''

nz.org.riskscape.engine.types.TypeProblems.STRUCT_MEMBER_NOT_PROVIDED = \
  Struct was declared to have {0}, but this was not provided in {1}

nz.org.riskscape.engine.types.TypeProblems.STRUCT_MUST_BE_NON_EMPTY = \
  Struct given for ''{0}'' must be non-empty.  Make sure you supply at least one member and try again.

nz.org.riskscape.engine.types.TypeProblems.STRUCT_MUST_HAVE_MEMBER_TYPE = \
  Struct must have a single {0} member, but none were found among {1}





#
# Input Data Problems
#
nz.org.riskscape.engine.data.InputDataProblems.NULL_GEOMETRY = \
  The ''{0}'' geometry attribute for object ID ''{1}'' is null

nz.org.riskscape.engine.data.InputDataProblems.INVALID_TUPLE_ERROR = \
   The input data source contains invalid rows (tuples). \
   Please check that the source data is correct, and matches any defined types you might be using. \
   Alternatively, to ignore the invalid rows, add `skip-invalid = true` to your bookmark.

nz.org.riskscape.engine.data.InputDataProblems.INVALID_TUPLE_SKIPPED = \
    An invalid row of input data has been skipped

nz.org.riskscape.engine.data.InputDataProblems.UNEXPECTED_NULL_VALUE = \
    An unexpected null value was encountered for the ''{0}'' attribute in the row of data: {1}

nz.org.riskscape.engine.projection.LinearGeometryProjection.LocalProblems.UNEXPECTED_CURVED_GEOMETRY = \
  A curved geometry has been encountered. RiskScape does not support curved geometries directly. Found: {0}

nz.org.riskscape.engine.projection.LinearGeometryProjection.LocalProblems.ENABLE_LINEARIZE_GEOMETRY_HINT = \
  Curved geometries can be converted to linear equivalents by setting `linearize-tolerance` on the bookmark.
#
# Args Problems
#
nz.org.riskscape.engine.ArgsProblems.CONSTANT_NULL = \
  `null` is not an allowed value

nz.org.riskscape.engine.ArgsProblems.NOT_NUMERIC = \
  Expected {0} to be numeric but got {1}

nz.org.riskscape.engine.ArgsProblems.REALIZABLE_DID_NOT_MATCH = \
  Could not apply {0} to given arguments {1}

nz.org.riskscape.engine.ArgsProblems.REQUIRED = \
  Argument ''{0}'' is required

# Too many arguments
nz.org.riskscape.engine.ArgsProblems.WRONG_NUMBER = \
  Wrong number of arguments provided. Expected {0}, but got {1}

nz.org.riskscape.engine.ArgsProblems.WRONG_NUMBER_RANGE = \
  Wrong number of arguments provided. Expected {0}-{1}, but got {2}



#
# ParamProblems
#

nz.org.riskscape.engine.bind.ParamProblems.APPLYING_DEFAULT = \
  No ''{0}'' value was provided, using default value of ''{1}''

nz.org.riskscape.engine.bind.ParamProblems.BINDING_ERROR = \
  Problems found with {0}

nz.org.riskscape.engine.bind.ParamProblems.BINDING_ERROR_WITH_LOCATION = \
  Problems found with {0} (from {1})

nz.org.riskscape.engine.bind.ParamProblems.IGNORED = \
  Surplus parameters were given that were ignored: {0}

nz.org.riskscape.engine.bind.ParamProblems.IGNORED_WITH_HINTS = \
  Surplus parameters were given that were ignored: {0}, did you mean one of {1}?

nz.org.riskscape.engine.bind.ParamProblems.INVALID_FOR = \
  There was a problem with the parameters for {0}

nz.org.riskscape.engine.bind.ParamProblems.MUTUALLY_EXCLUSIVE = \
  ''{0}'' and ''{1}'' cannot both be specified at the same time

nz.org.riskscape.engine.bind.ParamProblems.NO_BINDING_AVAILABLE = \
  Impossible parameter binding situation - Can not convert a {0} to a {1}.

nz.org.riskscape.engine.bind.ParamProblems.NO_BINDING_AVAILABLE_FOR_PARAMETER = \
  Can not bind parameter {0} - Can not convert a {1} to a {2}.

nz.org.riskscape.engine.bind.ParamProblems.ONE_OF_THESE_REQUIRED = \
  One of the following parameters must be specified: {0}

nz.org.riskscape.engine.bind.ParamProblems.WRONG_NUMBER_GIVEN = \
  Parameter ''{0}'' expects {1} values, but got {2}


#
# Debug Notifications
#
nz.org.riskscape.engine.cli.Notifications.USING_LAYER = \
    Using {0} layer with bounds: {1}

nz.org.riskscape.engine.cli.Notifications.IN_COMMON_CRS = \
    Displayed in a common CRS, these coordinates would look like: {0}

#
# GeometryProblems
#

nz.org.riskscape.engine.GeometryProblems.UNKNOWN_CRS_CODE = \
  Could not find a Coordinate Reference System (CRS) called ''{0}'' - check the CRS name carefully or try \
  searching for it online.  Make sure you have included the authority as well as the code, e.g. ''EPSG:2193'' vs \
  ''2193''.  For WGS84, try ''EPSG:4326'' (lat, long) or ''CRS:84'' (long, lat). \
  Most valid EPSG codes should work with RiskScape.

nz.org.riskscape.engine.GeometryProblems.BAD_WKT = \
  Could not parse ''{0}'' as Well-Known Text (WKT). Please check that it is valid WKT

nz.org.riskscape.engine.GeometryProblems.INVALID = \
  An invalid geometry which cannot be fixed automatically has been detected. Caused by: {1}. \
  Refer to the 'Geometry' reference in the RiskScape documentation for tips on how to avoid this. \
  The row containing this geometry was: {2}

nz.org.riskscape.engine.GeometryProblems.INVALID_POST_REPROJECTION = \
  Reprojection from {0} to {1} has resulted in an invalid geometry that could not be fixed automatically. \
  Refer to the 'Geometry' reference in the RiskScape documentation for tips on how to avoid this.

nz.org.riskscape.engine.GeometryProblems.FIXED_INVALID = \
  Invalid geometry has been detected and fixed automatically. \
  Refer to the 'Geometry' reference in the RiskScape documentation for tips on how to avoid this. \
  The record containing this geometry was: {2}

nz.org.riskscape.engine.GeometryProblems.FIXED_INVALID_POST_REPROJECTION = \
  Reprojection from {0} to {1} has resulted in an invalid geometry that has been fixed automatically. \
  Refer to the 'Geometry' reference in the RiskScape documentation for tips on how to avoid this.

nz.org.riskscape.engine.GeometryProblems.TOPOLOGY_EXCEPTION_TIP = \
  This problem may mean that some geometry data is invalid. Try setting `validate-geometry = error` for your \
  project. By default, this will validate geometry and try to fix any invalid geometry automatically. \
  Any geometry that cannot be fixed will be skipped by default \
  (note, carefully check any vector-layer hazard geometry, as this could cause parts of your hazard to be removed). \
  Alternatively, if the CRS for your input layers differs, the underlying geometry may not handle reprojection well. \
  Try reprojecting your input data  (usually the exposure-layer) to a common CRS before using it in RiskScape.

nz.org.riskscape.engine.GeometryProblems.CANNOT_REPROJECT = \
  Cannot reproject geometry from ''{1}'' to ''{2}''. Normally this is because the \
  geometry is too large to fit into the target CRS bounds.

nz.org.riskscape.engine.GeometryProblems.AUTO_PROJECTION_NOT_FOUND = \
  Could not find a suitable transverse mercator based projection at Latitude: {0}, \
  Longitude: {1} to use for this \
  metric-distance based operation. Often this is because the co-ordinate order does \
  not match the CRS axis order. This can be fixed by adding \
  `crs-longitude-first = true` to the bookmark.

nz.org.riskscape.engine.GeometryProblems.MISMATCHED_CRS = \
  Cannot perform geometry operation because geometries have different CRSs. Found {0} and {1}

nz.org.riskscape.engine.GeometryProblems.MIXED_GEOMETRY_TYPES = \
  Cannot perform operation because the given geometry contains a mixture of different geometry types. Got: {0}

nz.org.riskscape.engine.GeometryProblems.NOT_REFERENCED = \
  The given {0} type does not contain the required spatial meta-data (i.e. CRS). This could be because \
  the input data comes from a CSV file and `crs-name` needs to be set in the bookmark

nz.org.riskscape.engine.GeometryProblems.REPROJECTION_IGNORING_DATUM_SHIFT = \
  Data might be being reprojected inaccurately from {0} to {1} because of missing projection data. One (or both) of \
  the coordinate reference systems from your source data lacks "datum shift" information.  You may be able to fix the \
  problem by checking and fixing the source data, or, if you are confident that your source data uses the \
  default datum shift, you can force the use of a canonical and complete coordinate reference system by using the \
  `crs-name` option with the source data''s bookmark.

nz.org.riskscape.engine.GeometryProblems.CRS_MIXTURE_REPROJECTED = \
    The data for {0} contained a mixture of CRSs, so has been reprojected to CRS {1}. \
    Please double-check that the reprojected data is accurate

#
# Output related problems
#
nz.org.riskscape.engine.OutputProblems.CANNOT_WRITE_MANIFEST = \
  Can not write a manifest to {0} at ''{1}''

nz.org.riskscape.engine.OutputProblems.CHECKSUM_NOT_SUPPORTED = \
  {0} does not support `--checksum`. Checksums will not be generated.

nz.org.riskscape.engine.OutputProblems.OUTPUT_LOCATION_NOT_SUPPORTED = \
  The output location ''{0}'' is not supported by RiskScape.  Check that you have spelled it correctly and that any \
  spaces are quoted (e.g. --output "C:\\Users\\My User\\RiskScape Projects").  If this is a non-file output location, \
  such as a PostGIS database, make sure any plugins required for this feature are enabled.

nz.org.riskscape.engine.OutputProblems.UNSUPPORTED_CRS = \
  The CRS ''{0}'' is not supported for this output format. \
  Please make sure your input data uses a valid EPSG CRS code, reprojecting your geometry if necessary.

nz.org.riskscape.engine.OutputProblems.USER_SPECIFIED_FORMAT_IGNORED = \
  Ignoring the user-specified {0}. You cannot specify an output file format when using a {1} location

nz.org.riskscape.engine.OutputProblems.OUTPUT_TYPE_AS_TEXT = \
  Attribute ''{0}'' will be written as text - there is no conversion for values of type {1} with {2}. \
  It's likely that the information stored in this attribute will be incorrect.

nz.org.riskscape.engine.OutputProblems.OUTPUT_ALREADY_EXISTS = \
  {0} has already been registered as a model output. \
  Multiple model outputs cannot have the same name - even if in different directories. \
  Only the first output will be saved (the rest are discarded).

#
# Highly specific/local problems
#

nz.org.riskscape.engine.function.lang.AssertNotNull.LocalProblems.UNEXPECTED_NULL = \
  An unexpected null value was encountered on line {0} - {1}. \
  This may indicate a problem in your input data or pipeline code

nz.org.riskscape.engine.function.lang.AssertNotNull.LocalProblems.UNEXPECTED_NULL_CUSTOM_MESSAGE = \
  An unexpected null value was encountered: {0}

nz.org.riskscape.engine.function.lang.ListSort.LocalProblems.LIST_ITEMS_NOT_COMPARABLE = \
  The list may not be sorted because the member type ``{0}`` is not comparable. Comparable types are \
  text, integer and floating.

nz.org.riskscape.engine.function.lang.ListSort.LocalProblems.LIST_ITEMS_NOT_COMPARABLE_HINT = \
  Use the `by` argument to choose what to sort by (e.g `by: (i) -> i.value` to sort struct items by value).

nz.org.riskscape.engine.function.lang.FilterList.LocalProblems.TEST_LAMBDA_REQUIRE_BOOLEAN_RESULT = \
  The test expression must return a boolean (true/false) value, but found ''{0}''.

nz.org.riskscape.engine.function.lang.SelectFunction.LocalProblems.CAPTURE_GROUP_MISMATCH = \
  {0} capture groups have been found but there are {1} replacements.

nz.org.riskscape.engine.function.lang.SelectFunction.LocalProblems.DUPLICATE_KEY_GENERATED = \
  Source attribute ''{0}'' could not be added as ''{1}'' because that attribute already exists amongst {2}.

nz.org.riskscape.engine.function.lang.SelectFunction.LocalProblems.NO_ATTRIBUTES_MATCHED = \
  The pattern ''{0}'' did not match any attributes amongst {1}.

nz.org.riskscape.engine.util.UnitUtils.LocalProblems.NOT_RECOGNISED = \
  {0} is not a recognized unit.

nz.org.riskscape.engine.util.UnitUtils.LocalProblems.WRONG_TYPE = \
  {0} is not a {1} unit

nz.org.riskscape.engine.bind.impl.FunctionCallPrototypeBinder.LocalProblems.EXPECTED_FUNCTION_CALL = \
  Got ''{0}'' where a function name was expected, or a function call in the format `function(arg1, arg2...)`

nz.org.riskscape.engine.cli.model.BaseModelRunCommand.LocalProblems.CANNOT_OVERRIDE_SAVE_FORMAT = \
  The save format has already been set as part of the model, so using --format to \
  change the default save format might not have the desired result. \
  Instead, try changing the format setting in the model itself, e.g. `-p report-event-impact.format={0}`

nz.org.riskscape.engine.cli.model.BaseModelRunCommand.LocalProblems.NO_MODEL_OR_SINGLE_SECTION = \
  The INI file ''{0}'' contains multiple sections but none of them are named ''{1}''. \
  Ensure there is a section named ''{1}'' or use a file with a single section.

nz.org.riskscape.engine.function.geometry.Bounds.LocalProblems.NO_BOUNDS = \
  The type {0} does not contain a bounds and is not a relation, so no bounds can be \
  calculated. This is likely to be caused by a function altering the geometry in some \
  manner that is likely to invalidate the previously known bounds.

nz.org.riskscape.engine.ini.IniFileParameterBuilder.LocalProblems.COULD_NOT_PARSE_OPTION = \
    The ''options = {0}'' config should be specified as a valid RiskScape expression \
    in the format `label: value`. The label is optional, but must use \" \" double-quotes \
    if it contains any spaces. Use commas to separate options, or you can split the  \
    options over multiple lines. Refer to the documentation for examples

nz.org.riskscape.engine.cli.CliBootstrap.LocalProblems.NO_PROJECT_FILE= \
  There is no project.ini file present in the current directory. \
  Please either `cd` to the directory containing your RiskScape project.ini file, \
  or use the '--project' or '-P' CLI option to specify the project.ini path, \
  e.g. `riskscape -P file-path-to-project.ini ...`

nz.org.riskscape.engine.relation.ZipRelation.LocalProblems.MISMATCHING_ROWS = \
  Failed to combine input data sources because the underlying relations differ in the number of rows they have

#
# Displaying Problem args using ObjectRenderer
#
# XXX: Maybe these should be moved to labels now that the awkwardness with DefaultObjectRenderer is fixed
#

nz.org.riskscape.engine.typeset.CanonicalType.class = user-defined type

nz.org.riskscape.engine.typeset.CanonicalType = user-defined type ''{0}''
#
nz.org.riskscape.engine.function.IdentifiedFunction.class = function

nz.org.riskscape.engine.function.IdentifiedFunction = ''{0}'' function

nz.org.riskscape.engine.function.IdentifiedFunction.withSource = ''{0}'' function (from source {1})

java.net.URI = {0}

java.net.URI.lined = line {1} of {0}

java.net.URI.unlined = {0} (Index: {1})

nz.org.riskscape.engine.ResultOrProblems = this operation

nz.org.riskscape.rl.ast.Expression = expression ''{0}''

nz.org.riskscape.rl.ast.PipelineDeclaration = pipeline source ''{0}''

nz.org.riskscape.dsl.Token = ''{0}'' on line {1} (column {2})

nz.org.riskscape.defaults.classifier.ClassifierFunction = classifier function ''{0}''

nz.org.riskscape.engine.typeset.IdentifiedType = ''{0}'' type

nz.org.riskscape.engine.function.FunctionArgument.numbered = function argument {0}

nz.org.riskscape.rl.ast.FunctionCall.Argument = function call argument ''{0}''

nz.org.riskscape.engine.model.IdentifiedModel.class = model

nz.org.riskscape.engine.types.RSList.class = list

org.ini4j.Profile.Section = INI file section ''[{0}]''

nz.org.riskscape.config.ini4j.Ini4jConfigSection = INI file section ''[{0}]'' in {1}

nz.org.riskscape.engine.output.PipelineOutputStore = ''{0}'' output

#
# Scheduler Problems
#

nz.org.riskscape.engine.sched.Scheduler.LocalProblems.CRASH = \
  Pipeline execution failed unexpectedly. Your model failed to run to completion, however you could try running \
  the model again, in case this was a one-off failure.  Please report any associated log messages as a bug - refer to \
  the documentation for how to do this.

nz.org.riskscape.engine.sched.Scheduler.LocalProblems.DEADLOCK = \
  Pipeline execution has failed because of a scheduling deadlock.  This is most likely to be a bug, but can happen \
  with some pipelines that process large amounts of data.

nz.org.riskscape.engine.sched.Scheduler.LocalProblems.STOPPED = \
  Pipeline execution has stopped unexpectedly. Your model failed to run to completion, however you could try running \
  the model again, in case this was a one-off failure.  Please report any associated log messages as a bug - refer to \
  the documentation for how to do this.

nz.org.riskscape.engine.sched.Scheduler.LocalProblems.NO_DATA_PRODUCED = \
  No output has been produced from pipeline step(s) ''{0}''. \
  Possible causes may be: the pipeline uses a filter condition that does not match any data; \
  the model uses a join condition based on geometry, but the datasets do not overlap geographically; \
  or for CSV-based data, the incorrect CRS (or `crs-longitude-first`) bookmark setting is being used.

#
# Output writer problems
#
nz.org.riskscape.engine.output.AxisSwapper.LocalProblems.AXIS_ORDER_INCORRECT_IN_PRJ = \
  This file will have geometry in X-Y axis order, as required by the shapefile file format, but the \
  metadata in the `.prj` file may say that it is Y-X order.  Most software will respect the shapefile X-Y order,  \
  but in some cases it can mean your data will appear ''rotated'' when viewed on a map.

nz.org.riskscape.engine.output.GeoTiffFormat.LocalProblems.DIMENSIONS_TIP = \
  You could increase `grid-resolution` to use a bigger pixel size, \
  or reduce the bounds that the output GeoTIFF will cover.

nz.org.riskscape.engine.output.GeoTiffFormat.LocalProblems.SKIPPED_FEATURES_OUT_OF_BOUNDS = \
  {0} features fell outside the bounds of the {1} GeoTIFF output and have been ignored. \
  You may need to revise the 'bounds' options that is being used.

nz.org.riskscape.engine.output.GeoTiffFormat.LocalProblems.SKIPPED_FEATURES_NULL_OR_NAN = \
  {0} features have null geometry or null/NaN values and have been ignored from the {1} GeoTIFF output.

nz.org.riskscape.engine.raster.VectorToRaster.LocalProblems.COULD_NOT_CONSTRUCT_COVERAGE = \
  An error occured whilst building the coverage. This is likely to be caused by insufficient memory. \
  You could try to increase the memory RiskScape may use or increase the grid resolution.

nz.org.riskscape.engine.raster.VectorToRaster.LocalProblems.GRID_DIMENSIONS_TOO_BIG = \
  The grid dimensions (width: {0}, height: {1}) are too big. Width times height must be less than {2}.

