...
Language | Locale | initial | 1.3.1 | 1.3.2 | 1.4 | 1.4.1 | 1.4.2 | 1.5 | 1.5.1 | 1.5.2 | 1.6.0 | 1.6.1 | 1.6.2 | 1.7.0 | 1.7.1 | 1.8.0 | 1.8.1 | 1.8.2 | 3.0 | 3.1 | 3.2 | 4.0 | 4.1 | 4.2 | 5.0 | ||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Basque | eu |
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
| ||||||||||
Bulgarian | bg |
|
|
|
|
|
|
|
|
| X |
| X | X |
| X | X | ||||||||||
Catalan | ca |
| x | x |
| X |
|
|
|
|
|
|
|
|
|
| |||||||||||
Chinese CN | zh_cn | X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| ||||||||||
Chinese TW | zh_tw | X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| ||||||||||
Czech | cs | X |
|
|
|
|
| X | X | X | X |
| X |
|
|
| |||||||||||
French | fr | X |
| X |
| X |
|
|
|
|
|
|
|
|
|
| |||||||||||
Galician | gl | X |
|
|
|
| X |
|
|
|
|
|
|
|
|
| |||||||||||
German | de | X |
|
| X | X | X | X | X | X | X | X | X | X | X | X | X | ||||||||||
Greek | el | X |
|
| X |
|
|
|
|
|
|
|
|
|
|
|
| ||||||||||
Hungarian | hu | X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| Indonesian | |||||||||
Indonesian | id | id | X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |||||||||
Italian | it | X |
| X | X |
|
|
|
| X |
|
|
|
|
|
|
| ||||||||||
Japanese | ja | X |
| X | X |
|
|
| X |
|
|
|
| X |
|
|
| ||||||||||
Norwegian | no | X |
| X |
|
| X |
|
|
|
|
|
|
|
|
| |||||||||||
Polish | pl | X |
| X | X |
|
|
|
|
|
|
|
|
|
|
|
| ||||||||||
Portuguese | pt |
|
|
|
|
|
| X | X |
|
|
|
|
|
|
|
| ||||||||||
Portuguese PT | pt_PT | X |
|
| X |
|
| X | X | X |
|
|
|
|
|
|
| ||||||||||
Portuguese BR | pt_BR | X |
| X |
|
|
| X |
|
|
|
|
|
|
|
|
| ||||||||||
Russian | ru | X |
| X | X |
|
|
|
|
|
|
|
|
|
|
|
| ||||||||||
Spanish | es | X |
|
|
| X |
|
| X |
|
|
|
|
|
|
|
| ||||||||||
Swedish | sv | X |
|
| X |
|
| X | X |
|
|
|
|
|
|
|
| ||||||||||
Thai | th |
|
|
|
|
| X |
| X |
|
|
|
|
|
|
|
| Ukrainian | uk | ||||||||
Ukrainian | uk |
|
|
|
| X |
|
|
| x |
|
|
|
|
|
| |||||||||||
Welsh | cy |
|
|
|
| X | X | X | X |
|
|
|
|
|
|
|
|
Available translations of messages.xml for XML-UI
Language | Locale | 1.5 | 1.5.1 | 1.5.2 | 1.6.0 | 1.6.1 | 1.6.2 | 1.7.0 | 1.7.1 | 1.8.0 | 1.8.1 | 1.8.2 | 3.0 | 3.1 | 3.2 | 4.0 | 4.1 | 4.2 | 5.0 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
German | de | x | x | x | x | x | x | x | x | x | x | ||||||||
Greek | el |
| x |
|
|
|
|
|
|
|
| ||||||||
Catalan | ca | x | x |
|
|
|
|
|
| x |
| ||||||||
Catalan (Central) | ca_ES |
|
| x |
|
|
|
|
|
|
| ||||||||
Czech | cs |
|
| x | x | x |
| x | x | x |
| ||||||||
Italian | it | x |
| x |
|
|
|
|
|
|
| ||||||||
Japanese | ja |
| x |
|
|
|
| x | x |
|
| ||||||||
Portuguese | pt_BR |
| x |
|
|
| x | x | x | x | x | x | x | x | x | x | x | x | x |
Spanish | es | x | x |
|
|
|
| x | x | x | x | x | x | x | x | x | x | ||
Galician | gl | x |
Localized parts of DSpace not yet managed on Github
...
Given the English original (messages.xml or Messages.properties) and the corresponding translation file, this script will report both strings missing in the translation file and extra strings that shouldn't be in the translation. Tested on Python 2.7, requires ElementTree (wrapper for libxml2) for checking XML and/or jprops for testing .properties.
Code Block | ||||
---|---|---|---|---|
| ||||
#!/usr/bin/env python import sys class MessagesXmlParser(): def __init__(self, filename): import xml.etree.ElementTree as etree self.keys = [] tree = etree.parse(filename) root = tree.getroot() for message in root: self.keys.append(message.attrib['key']) class MessagesPropertiesParser(): def __init__(self, filename): try: import jprops except: print('Error: jprops module for parsing .properties files is missing. Download and follow installation instructions from http://mgood.github.com/jprops/') sys.exit(2) self.keys = [] with open(filename) as fp: for key, value in jprops.iter_properties(fp): self.keys.append(key) if __name__ == "__main__": if len(sys.argv) != 3: print("Usage:") print(" %s messages.xml messages_XX.xml" % (sys.argv[0])) print("or") print(" %s Messages.properties Messages_XX.properties" % (sys.argv[0])) sys.exit(1) testfile = open(sys.argv[1], 'rb') if testfile.readline().find('<?xml') != -1: # xml file detected, assume messages.xml messages_tmpl = MessagesXmlParser(sys.argv[1]) messages_in = MessagesXmlParser(sys.argv[2]) else: # assume Messages.properties messages_tmpl = MessagesPropertiesParser(sys.argv[1]) messages_in = MessagesPropertiesParser(sys.argv[2]) print "Present in %s but missing in %s:" % (sys.argv[1], sys.argv[2]) for i in set(messages_tmpl.keys) - set(messages_in.keys): print i print "\nPresent in %s but missing in %s:" % (sys.argv[2], sys.argv[1]) for i in set(messages_in.keys) - set(messages_tmpl.keys): print i |
Newer version of the script which allows comparison and dumping in columnar TSV of several messages files simulatenously: dspace-i10n-check2.py. Usage example:
Code Block | ||||
---|---|---|---|---|
| ||||
./dspace-i10n-check2.py --compare file1 file2
./dspace-i10n-check2.py --dump file1
./dspace-i10n-check2.py --dump-tsv-for-translation /dspace/webapps/xmlui/i18n/messages.xml /dspace/webapps/xmlui/i18n/messages_es.xml /dspace/webapps/xmlui/i18n/messages_it.xml
|
PHP Script to check for missing/extra strings
Given the English original (messages.xml and the corresponding translation file, this script will report both strings missing in the translation file and extra strings that shouldn't be in the translation.
Code Block | ||||
---|---|---|---|---|
| ||||
<?php
if ($argc != 3) {
echo "Usage: checkkeys.php <master> <tocheck>\n";
exit(1);
}
$masterKeys = getKeys($argv[1]);
$toCheckKeys = getKeys($argv[2]);
print "IN $argv[1] BUT NOT IN $argv[2]:\n\n";
printMissing($masterKeys, $toCheckKeys);
print "\n\n\nIN $argv[2] BUT NOT IN $argv[1]:\n\n";
printMissing($toCheckKeys, $masterKeys);
function printMissing($reference, $test)
{
foreach ($test as $value) {
if (! in_array($value, $reference)) {
echo "$value \n";
}
}
}
function readFileMessage($path)
{
if (! $fileContent = @file($path)) {
echo "Can't open $path \n";
exit(1);
}
return $fileContent;
}
function getKeys($path)
{
$fileContent = readFileMessage($path);
return readKeys($fileContent);
}
function readKeys($file)
{
$keys = [];
foreach ($file as $key => $line) {
if (strpos($line, '<message key="') === false) {
continue;
}
$key = getKey($line);
$keys[] = $key;
}
return $keys;
}
function getKey($line)
{
$line = trim($line);
$line = substr($line, 14);
$charEnd = strpos($line, '">');
$key = substr($line, 0, $charEnd - strlen($line));
return $key;
} |
Code Block | ||||
---|---|---|---|---|
| ||||
php ./checkkeys.php file1 file2 php ./checkkeys.php /dspace/webapps/xmlui/i18n/messages.xml /dspace/webapps/xmlui/i18n/messages_es.xml /dspace/webapps/xmlui/i18n/messages_it.xml |
Perl Script for unused keys
...