/* LanguageTool, a natural language style checker
* Copyright (C) 2007 Daniel Naber (http://www.danielnaber.de)
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
* USA
*/
package org.languagetool;
import org.junit.Test;
import org.languagetool.tools.StringTools;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.*;
/**
* Check if the translations seem to be complete.
*/
public class TranslationTest {
@Test
public void testTranslationKeyExistence() throws IOException {
// use English version as the reference:
File englishFile = getEnglishTranslationFile();
Properties enProps = new Properties();
enProps.load(new FileInputStream(englishFile));
Set<Object> englishKeys = enProps.keySet();
for (Language lang : Languages.get()) {
if (lang.getShortCode().equals("en")) {
continue;
}
Properties langProps = new Properties();
File langFile = getTranslationFile(lang);
if (!langFile.exists()) {
continue;
}
try (FileInputStream stream = new FileInputStream(langFile)) {
langProps.load(stream);
Set<Object> langKeys = langProps.keySet();
for (Object englishKey : englishKeys) {
if (!langKeys.contains(englishKey)) {
System.err.println("***** No key '" + englishKey + "' in file " + langFile);
}
}
}
}
}
@Test
public void testTranslationsAreNotEmpty() throws IOException {
for (Language lang : Languages.get()) {
File file1 = getTranslationFile(lang);
File file2 = getTranslationFileWithVariant(lang);
if (!file1.exists() && !file2.exists()) {
System.err.println("Note: no translation available for " + lang);
continue;
}
File file = file1.exists() ? file1 : file2;
List<String> lines = loadFile(file);
for (String line : lines) {
line = line.trim();
if (StringTools.isEmpty(line) || line.charAt(0)=='#') {
continue;
}
String[] parts = line.split("=");
if (parts.length < 2) {
System.err.println("***** Empty translation: '" + line + "' in file " + file);
//fail("Empty translation: '" + line + "' in file " + file);
}
}
}
}
private List<String> loadFile(File file) throws IOException {
List<String> l = new ArrayList<>();
try (Scanner scanner = new Scanner(file)) {
while (scanner.hasNextLine()) {
l.add(scanner.nextLine());
}
}
return l;
}
private File getEnglishTranslationFile() {
String name = "../languagetool-core/src/main/resources/org/languagetool/MessagesBundle_en.properties";
return new File(name.replace("/", File.separator));
}
private File getTranslationFile(Language lang) {
String langCode = lang.getShortCode();
String name = "../languagetool-language-modules/" + langCode + "/src/main/resources/org/languagetool"
+ "/MessagesBundle_" + langCode + ".properties";
return new File(name.replace("/", File.separator));
}
private File getTranslationFileWithVariant(Language lang) {
String langCode = lang.getShortCode();
String name = "../languagetool-language-modules/" + langCode + "/src/main/resources/org/languagetool"
+ "/MessagesBundle_" + lang.getShortCodeWithCountryAndVariant().replace('-', '_') + ".properties";
return new File(name.replace("/", File.separator));
}
}