public class TranslationCheck extends AbstractFileSetCheck
Ensures the correct translation of code by checking property files for consistency
regarding their keys. Two property files describing one and the same context
are consistent if they contain the same keys. TranslationCheck also can check
an existence of required translations which must exist in project, if
requiredTranslations
option is used.
Consider the following properties file in the same directory:
#messages.properties hello=Hello cancel=Cancel #messages_de.properties hell=Hallo ok=OK
The Translation check will find the typo in the German hello
key,
the missing ok
key in the default resource file and the missing
cancel
key in the German resource file:
messages_de.properties: Key 'hello' missing. messages_de.properties: Key 'cancel' missing. messages.properties: Key 'hell' missing. messages.properties: Key 'ok' missing.
Language code for the property requiredTranslations
is composed of
the lowercase, two-letter codes as defined by
ISO 639-1.
Default value is empty String Set which means that only the existence of default
translation is checked. Note, if you specify language codes (or just one
language code) of required translations the check will also check for existence
of default translation files in project.
Attention: the check will perform the validation of ISO codes if the option is used. So, if you specify, for example, "mm" for language code, TranslationCheck will rise violation that the language code is incorrect.
Attention: this Check could produce false-positives if it is used with Checker that use cache (property "cacheFile") This is known design problem, will be addressed at issue.
fileExtensions
- Specify file type extension to identify
translation files. Setting this property is typically only required if your
translation files are preprocessed and the original files do not have
the extension .properties
Type is java.lang.String[]
.
Default value is .properties
.
baseName
- Specify
Base name of resource bundles which contain message resources.
It helps the check to distinguish config and localization resources.
Type is java.util.regex.Pattern
.
Default value is "^messages.*$"
.
requiredTranslations
- Specify language codes of required
translations which must exist in project.
Type is java.lang.String[]
.
Default value is {}
.
To configure the check to check only files which have '.properties' and '.translations' extensions:
<module name="Translation"> <property name="fileExtensions" value="properties, translations"/> </module>
Note, that files with the same path and base name but which have different extensions will be considered as files that belong to different resource bundles.
An example of how to configure the check to validate only bundles which base names start with "ButtonLabels":
<module name="Translation"> <property name="baseName" value="^ButtonLabels.*$"/> </module>
To configure the check to check existence of Japanese and French translations:
<module name="Translation"> <property name="requiredTranslations" value="ja, fr"/> </module>
The following example shows how the check works if there is a message bundle which element name contains language code, county code, platform name. Consider that we have the below configuration:
<module name="Translation"> <property name="requiredTranslations" value="es, fr, de"/> </module>
As we can see from the configuration, the TranslationCheck was configured to check an existence of 'es', 'fr' and 'de' translations. Lets assume that we have the resource bundle:
messages_home.properties messages_home_es_US.properties messages_home_fr_CA_UNIX.properties
Than the check will rise the following violation: "0: Properties file 'messages_home_de.properties' is missing."
Parent is com.puppycrawl.tools.checkstyle.Checker
Violation Message Keys:
translation.missingKey
translation.missingTranslationFile
AutomaticBean.OutputStreamOptions
Modifier and Type | Field and Description |
---|---|
static String |
MSG_KEY
A key is pointing to the warning message text for missing key
in "messages.properties" file.
|
static String |
MSG_KEY_MISSING_TRANSLATION_FILE
A key is pointing to the warning message text for missing translation file
in "messages.properties" file.
|
Constructor and Description |
---|
TranslationCheck()
Creates a new
TranslationCheck instance. |
Modifier and Type | Method and Description |
---|---|
void |
beginProcessing(String charset)
Called when about to be called to process a set of files.
|
void |
finishProcessing()
Called when all the files have been processed.
|
protected void |
processFiltered(File file,
FileText fileText)
Called to process a file that matches the specified file extensions.
|
void |
setBaseName(Pattern baseName)
Setter to specify
Base name of resource bundles which contain message resources.
|
void |
setRequiredTranslations(String... translationCodes)
Setter to specify language codes of required translations which must exist in project.
|
addMessages, destroy, fireErrors, getFileContents, getFileExtensions, getMessageDispatcher, getMessages, getTabWidth, init, log, log, process, setFileContents, setFileExtensions, setMessageDispatcher, setTabWidth
finishLocalSetup, getCustomMessages, getId, getMessageBundle, getSeverity, getSeverityLevel, setId, setSeverity
configure, contextualize, getConfiguration, setupChild
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
configure
contextualize
public static final String MSG_KEY
public static final String MSG_KEY_MISSING_TRANSLATION_FILE
public TranslationCheck()
TranslationCheck
instance.public void setBaseName(Pattern baseName)
baseName
- base name regexp.public void setRequiredTranslations(String... translationCodes)
translationCodes
- a comma separated list of language codes.public void beginProcessing(String charset)
FileSetCheck
beginProcessing
in interface FileSetCheck
beginProcessing
in class AbstractFileSetCheck
charset
- the character set used to read the files.protected void processFiltered(File file, FileText fileText)
AbstractFileSetCheck
processFiltered
in class AbstractFileSetCheck
file
- the file to be processedfileText
- the contents of the file.public void finishProcessing()
FileSetCheck
finishProcessing
in interface FileSetCheck
finishProcessing
in class AbstractFileSetCheck
Copyright © 2001–2020. All rights reserved.