- JavaDoc

# Jep Java

- Introduction
- Basic Usage
- Variables
- Data types
- Operators
- Functions
- Custom Functions
- BigDecimal
- FAQ
- Migration
- Version History

# Advanced Features

- Manipulating Expressions
- Components
- Configurable Parser
- Serialization
- Threads
- Localization
- Grammar
- Other advanced features

# Localization

In Jep 3.5 all error messages are externalized using the standard Java Internationalization mechanism. See Java Trail: Internationalization for of an overview.

The default messages are contained in the `com/singularsys/jep/messages.properties` file which can be customised. A copy of this file can be found here: messages.properties.

### Custom messages file

A localized version of the messages file can be specified for a given language and country A typical copy of the properties file might be

    FunctionRequiresNArgumentsFoundN=Fonction «%s» nécessite %d arguments, a trouvé %d.
    functions.IllegalParameterException.UnknownFunction=Fonction inconnue
    functions.IllegalParameterException.IllegalArgument=: argument illégal:
    functions.IllegalParameterException.IllegalArguments=: arguments illégal:
    functions.IllegalParameterException.Comma=,
    functions.IllegalParameterException.Expected=\ attendus %s
    functions.IllegalParameterException.ExpectedMsg=\ attendus %s
    functions.IllegalParameterException.ActualValueClass=\ %s[%s]
    functions.IllegalParameterException.ArgumentNumber=,\ numéro %d argument.

The first line gives the message printed when a function is specified with the wrong number of arguments, say `sin(1,2)`. This message is a format string used by `String.format(spec,args...)`. The second example is a more complex message with multiple parts used when an illegal argument is passed to a function or operator. Not all messages needs to be supplied, some are extremely rare.

For the system to find the file it must be in the class path in the `com/singularsys/jep` directory and named `messages_(language)_(Country).properties` for example `com/singularsys/jep/messages_fr_CA.properties` would specify the messages for French (fr) Canadian (CA) locale.

### Setting the default Locale

The default locale is normally set by the system. This can be overridden by specifying the `user.language` and `user.country` properties on the command line

    java -Duser.language=fr -Duser.country=CA com.singularsys.jepexamples.consoles.Console

on unix machines it may be possible to set the default locale by setting the environment variable, `LANG`, `LC_ALL` or `LC_MESSAGES`.

      bash % export LC_ALL=de_DE

The default locale can also be set within java using

      Locale.setDefault(Locale.GERMANY);

this should be called before any Jep code is loaded.

### Testing messages

The `com.singularsys.jeptests.system.MessagesTest` class is a JUnit test class which tests and displays all messages printed by the system. You can use this class to check the results of any custom localization messages.

### Standard Error reporting methods

The PostfixMathCommand the base class for custom functions provides a number of methods for checking the types of arguments. For example `double asDouble(int position, Object value)` checks that the `value` can be converted to a double. If not a standard error message is generated using the `position` argument and an IllegalParameterException thrown with this message. For example this method is used in the Signum if it is supplied with a illegal argument, say `signum("abc")` then the message

    signum: illegal argument: abc[String] expected Number, argument number 0.

is generated using the `functions.IllegalParameterException.IllegalArgument`, `functions.IllegalParameterException.ActualValueClass`, `functions.IllegalParameterException.Expected` and `functions.IllegalParameterException.ArgumentNumber` messages. Other conversion methods include `asString(pos,str)`, `asInt(pos,val)`, `asLong(pos,val)`, `asBool(pos,val)`, and `asStrictInt(pos,val)`. The final method not only checks if the number can be converted to an integer it also check that no rounding occurs.

The IllegalParameterException class offers a number of different constructors for easy generation of standard error messages. If you want your own error message use the parent class EvaluationException.