| 1 | package com.jsql.util; | |
| 2 | ||
| 3 | import org.apache.commons.lang3.StringUtils; | |
| 4 | import org.apache.logging.log4j.LogManager; | |
| 5 | import org.apache.logging.log4j.Logger; | |
| 6 | ||
| 7 | import java.net.URL; | |
| 8 | import java.util.Locale; | |
| 9 | import java.util.ResourceBundle; | |
| 10 | ||
| 11 | /** | |
| 12 | * Utility class managing different text translations like English, Chinese and Arabic. | |
| 13 | * It retrieves text in the current language of the system and also the one choice | |
| 14 | * manually by user. | |
| 15 | * If the current system language is not supported then the user is proposed to use | |
| 16 | * the community translation protocol. | |
| 17 | */ | |
| 18 | public class I18nUtil { | |
| 19 | | |
| 20 | private static final Logger LOGGER = LogManager.getRootLogger(); | |
| 21 | public static final String BASE_NAME = "i18n.jsql"; | |
| 22 | ||
| 23 | /** | |
| 24 | * Bundle of standard i18n keys and translated text for root language English | |
| 25 | */ | |
| 26 | public static final ResourceBundle BUNDLE_ROOT = ResourceBundle.getBundle(I18nUtil.BASE_NAME, Locale.ROOT); | |
| 27 | | |
| 28 | /** | |
| 29 | * Bundle of i18n keys and translated text for the current system language | |
| 30 | */ | |
| 31 | private static ResourceBundle currentBundle = ResourceBundle.getBundle(I18nUtil.BASE_NAME, Locale.getDefault()); | |
| 32 | ||
| 33 | private I18nUtil() { | |
| 34 | // Utility class | |
| 35 | } | |
| 36 | | |
| 37 | /** | |
| 38 | * Return the text corresponding to an i18n key in the properties. | |
| 39 | * @param key an i18n key in the properties | |
| 40 | * @return text corresponding to the key | |
| 41 | */ | |
| 42 | public static String valueByKey(String key) { | |
| 43 |
1
1. valueByKey : replaced return value with "" for com/jsql/util/I18nUtil::valueByKey → KILLED |
return I18nUtil.currentBundle.getString(key.replace(" ", "_")); // e.g BLIND BINARY |
| 44 | } | |
| 45 | | |
| 46 | /** | |
| 47 | * Verify if there is a language properties file corresponding to the current system language. | |
| 48 | * If not then it invites the user to use the translation process. | |
| 49 | */ | |
| 50 | public static void checkCurrentLanguage() { | |
| 51 | URL path = I18nUtil.class.getClassLoader().getResource("i18n/jsql_"+ Locale.getDefault().getLanguage() +".properties"); | |
| 52 |
2
1. checkCurrentLanguage : negated conditional → NO_COVERAGE 2. checkCurrentLanguage : negated conditional → NO_COVERAGE |
if (!"en".equals(Locale.getDefault().getLanguage()) && path == null) { |
| 53 | String languageHost = Locale.getDefault().getDisplayLanguage(Locale.ENGLISH); | |
| 54 | LOGGER.log( | |
| 55 | LogLevelUtil.CONSOLE_SUCCESS, | |
| 56 |
1
1. lambda$checkCurrentLanguage$0 : replaced return value with null for com/jsql/util/I18nUtil::lambda$checkCurrentLanguage$0 → NO_COVERAGE |
() -> String.join( |
| 57 | StringUtils.EMPTY, | |
| 58 | "Contribute and translate parts of ", StringUtil.APP_NAME, " into ", languageHost, ": ", | |
| 59 | "click on the top right button and open menu [Community], choose [I help translate jSQL into > another language...] and ", | |
| 60 | "translate some text into ", languageHost, " then click on [Send]. Your translation will be integrated to the next release by the developer." | |
| 61 | ) | |
| 62 | ); | |
| 63 | } | |
| 64 | } | |
| 65 | | |
| 66 | | |
| 67 | // Getters and setters | |
| 68 | | |
| 69 | public static void setCurrentBundle(Locale newLocale) { | |
| 70 | I18nUtil.currentBundle = ResourceBundle.getBundle(I18nUtil.BASE_NAME, newLocale); | |
| 71 | } | |
| 72 | | |
| 73 | public static Locale getCurrentLocale() { | |
| 74 |
1
1. getCurrentLocale : replaced return value with null for com/jsql/util/I18nUtil::getCurrentLocale → NO_COVERAGE |
return I18nUtil.currentBundle.getLocale(); |
| 75 | } | |
| 76 | } | |
Mutations | ||
| 43 |
1.1 |
|
| 52 |
1.1 2.2 |
|
| 56 |
1.1 |
|
| 74 |
1.1 |