summaryrefslogtreecommitdiff
path: root/tools/lpgen/translate.js
diff options
context:
space:
mode:
authorBasil <basil@miranda-ng.org>2013-02-06 08:08:53 +0000
committerBasil <basil@miranda-ng.org>2013-02-06 08:08:53 +0000
commit45b57720a01af5428596b26ce99f2e5ef4e0f0a8 (patch)
treecaab2de6f843f4e3229d49f5bc3602971da8d409 /tools/lpgen/translate.js
parent5807edebd5ed84ab394f8c8fde5654ada00d4ed8 (diff)
translate.js new functions:
1) /outfile:"/path/to/full/langpack_language.txt" will output one full langpack file, instead of translated templates from /english/* 2) /noref:"yes" will remove references to source code files (;file /some/path/filename.ext) Thus, combining this two options, you can generate a fresh langpack file, without references, and using current up-to-date templates from /english/ 3) now use Unicode with BOM code for output files, and UTF-8 are expected from translation templates. Moreover, newline symbols in /english/ templates have to be in windows-style (CRLF, \r\n), not any other types :) git-svn-id: http://svn.miranda-ng.org/main/trunk@3449 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'tools/lpgen/translate.js')
-rw-r--r--tools/lpgen/translate.js87
1 files changed, 63 insertions, 24 deletions
diff --git a/tools/lpgen/translate.js b/tools/lpgen/translate.js
index 00c0ca6017..f9ae910c46 100644
--- a/tools/lpgen/translate.js
+++ b/tools/lpgen/translate.js
@@ -10,7 +10,9 @@
//* Usage: cscript /nologo translate.js /core:"path\=core=.txt" use core file *//
//* Usage: cscript /nologo translate.js /dupes:"path\=dupes=.txt" use dupes file *//
//* Usage: cscript /nologo translate.js /out:"path\folder" output result to folder *//
+//* Usage: cscript /nologo translate.js /outfile:"path\file" output result to one file*//
//* Usage: cscript /nologo translate.js /langpack:"path\lang.txt" - Full langpack *//
+//* Usage: cscript /nologo translate.js /noref:"yes" - remove ref. ";file path\file" *//
//* Note: script will use following sequense to find a translation for string: *//
//* 1) Try to get translation from a same file name. Example: /langpack/english/plugin/ *//
//* /TabSRMM.txt strings will be checked in file named TabSRMM.txt in folder from /path: *//
@@ -23,6 +25,8 @@
//* translation not found, try to find translation in path\lang.txt *//
//* Example2: cscript /nologo translate.js /plugin:"path\file" /langpack:"path\lang.txt" *//
//* will translate path\file using translation from path\lang.txt *//
+//* Example3: cscript /nologo translate.js /langpack:"path\lang.txt" /outfile:"path\file"*//
+//* will translate all /english/* templates using lang.txt & output langpack in path\file *//
//*****************************************************************************************//
//Init Variables
@@ -35,12 +39,19 @@ var overwritefile=true;
var unicode=false;
//disabling log by default
var log=false;
+//output translated templates in separated files by default
+var outfile=false;
+//do not remove refference to source file, where we found a translation string
+var noref=false;
//Path variables
var scriptpath=FSO.GetParentFolderName(WScript.ScriptFullName);
//crazy way to get path two layers upper "\tools\lpgen\"
var trunk=FSO.GetFolder(FSO.GetParentFolderName(FSO.GetParentFolderName(scriptpath)));
-//plugins path
-//var plugins=FSO.BuildPath(trunk,"langpacks\\russian\\Plugins\\");
+//stream - our variable for output UTF-8 files with BOM
+var stream= new ActiveXObject("ADODB.Stream");
+//stream var tune
+stream.Type = 2; // text mode
+stream.Charset = "utf-8";
//init translate dictionaries
CoreTranslateDict=WScript.CreateObject("Scripting.Dictionary");
DupesTranslateDict=WScript.CreateObject("Scripting.Dictionary");
@@ -53,6 +64,14 @@ LangpackTranslateDict=WScript.CreateObject("Scripting.Dictionary");
// if console param /log: specified, put it to var log. To enable log, specify /log:"yes"
if (WScript.Arguments.Named.Item("log")) log=true;
+// if console param /noref: specified, put it to var noref. To remove reff's to files, specifry /noref:"yes"
+if (WScript.Arguments.Named.Item("noref")) noref=true;
+
+// if console pararm /outpfile:"\path\filename.txt" given, put it to var outfile.
+if (WScript.Arguments.Named.Item("outfile")) {
+ outfile=true;
+ full_langpack_file=WScript.Arguments.Named.Item("outfile");
+ }
// if param /out specified, build a path and put it into var.
if (WScript.Arguments.Named.Item("out")) {
var out=WScript.Arguments.Named.Item("out");
@@ -82,7 +101,7 @@ if (WScript.Arguments.Named.Item("plugin")) {
//Call TranslateTemplateFile for path specified in command line argument /path:"path/to/template", output result to "scriptpath"
TranslateTemplateFile(WScript.Arguments.Named.Item("plugin"),cmdline_file_array);
//Output result to scriptpath folder.
- WriteToFile(cmdline_file_array,traslated_cmdline_file);
+ WriteToUnicodeFile(cmdline_file_array,traslated_cmdline_file);
if (log) WScript.Echo("translated file here: "+traslated_cmdline_file);
//We are done, quit.
WScript.Quit();
@@ -95,11 +114,13 @@ if (WScript.Arguments.Named.Item("plugin")) {
//first, check we have files with translated stirngs specified.
checkparams();
if (log) WScript.Echo("Translation begin");
+
//Generate translation dictionaries from /core, /dupes and /langpack files.
GenerateDictionaries ();
-//Array for translated core
+//Array for translated core & full langpack file
Translate_Core=new Array;
+full_langpack=new Array;
if (log) WScript.Echo("Translating Core");
//Call function for translate core template
TranslateTemplateFile(FSO.BuildPath(trunk,"langpacks\\english\\=CORE=.txt"),Translate_Core);
@@ -107,9 +128,12 @@ TranslateTemplateFile(FSO.BuildPath(trunk,"langpacks\\english\\=CORE=.txt"),Tran
Translated_Core=trunk+"\\langpacks\\english\\translated_=CORE=.txt";
//if "out" specified, redefine output to this path
if (out) Translated_Core=out+"\\=CORE=.txt";
-//output traslated core into file
-WriteToFile(Translate_Core,Translated_Core);
-if (log) WScript.Echo("Output to: "+Translated_Core);
+//output traslated core into file, if outfile not specified
+if (!outfile) WriteToFile(Translate_Core,Translated_Core);
+//loggin output
+if (log & !outfile) WScript.Echo("Output to: "+Translated_Core);
+//if output to full langpack, concatenate arrays;
+if (outfile) full_langpack=full_langpack.concat(Translate_Core);
//Init array of template files
TemplateFilesArray=new Array;
@@ -131,13 +155,20 @@ filesenum=new Enumerator(TemplateFilesArray);
if (out) traslatedtemplatefile=out+"\\"+FSO.GetFileName(curfile);
//now put strings from template and translations into array
TranslateTemplateFile(curfile,TranslatedTemplate);
- //Write array into file;
- WriteToFile(TranslatedTemplate,traslatedtemplatefile);
+ //Write array into file, if outfile not specified
+ if (!outfile) WriteToFile(TranslatedTemplate,traslatedtemplatefile);
+ //if we will output one file only, concatenate array
+ if (outfile) full_langpack=full_langpack.concat(TranslatedTemplate);
//Log output to console
- if (log) WScript.Echo("Output to: "+traslatedtemplatefile);
+ if (log & !outfile) WScript.Echo("Output to: "+traslatedtemplatefile);
//move to next file
filesenum.moveNext();
};
+//if output to one langpack file, write a finall array Translate_Core into UTF-8 file with BOM
+if (outfile) {
+ WriteToUnicodeFile(full_langpack,full_langpack_file);
+ WScript.Echo("Langpack file in "+full_langpack_file);
+}
if (log) WScript.Echo("Translation end");
@@ -184,9 +215,10 @@ function GenerateTransalteDict (file,dictionary) {
//if file does not exist, it's a core, we do not need do the job again, so return.
if (!FSO.FileExists(file)) return;
//open file
-var translatefile=FSO.GetFile(file).OpenAsTextStream(ForReading, TristateUseDefault);
+stream.Open();
+stream.LoadFromFile(file);
//read file into var
-var translatefiletext=translatefile.ReadAll();
+var translatefiletext=stream.ReadText();
//"find" - RegularExpression, first string have to start with [ and end with]. Next string - translation
var find=/(^\[.+?\])\r\n(.+?)(?=$)/mg;
//While our "find" RegExp return a results, add strings into dictionary.
@@ -210,7 +242,7 @@ while ((string = find.exec(translatefiletext)) != null) {
dictionary.Add(key,item);
}
//close file
-translatefile.Close();
+stream.Close();
}
//Generate array with stirngs from translation template, adding founded translation, if exist.
@@ -225,16 +257,23 @@ function TranslateTemplateFile(Template_file,array) {
//If file zero size, return;
if (FSO.GetFile(Template_file).Size==0) return;
//access file
- template_file_stream=FSO.GetFile(Template_file).OpenAsTextStream(ForReading, TristateUseDefault);
+ stream.Open();
+ stream.LoadFromFile(Template_file);
//Reading line-by-line
- while (!template_file_stream.AtEndOfStream) {
+ while (!stream.EOS) {
//clear up variable
englishstring="";
- //read on line into rcline
- line=template_file_stream.ReadLine();
+ //read on line
+ var line=stream.ReadText(-2);
//Push line int array, we need all lines from template
- array.push(line);
- //find string covered by[] using regexp
+ //array.push(line);
+ //If we need refference to "; file source\file\path" in template or langpack, put into array every line
+ if (!noref) array.push(line);
+ if (noref) {
+ reffline=line.match(/^;file.+/);
+ if (!reffline) array.push(line);
+ }
+ //find string covered by[] using regexp
englishstring=line.match(/\[.+\]/);
//If current line is english string covered by [], try to find translation in global db
if (englishstring) {
@@ -266,7 +305,7 @@ function TranslateTemplateFile(Template_file,array) {
}
}
//closing file
- template_file_stream.Close();
+ stream.Close();
};
//Recourse find all files in "path" with file RegExp mask "name" and return file list into filelistarray
@@ -303,16 +342,16 @@ function FindFiles (path,name,filelistarray) {
//Put array of strings into file
function WriteToFile (array,file) {
//Create file
- outfile=FSO.CreateTextFile(file, overwritefile , unicode)
+ out_file=FSO.CreateTextFile(file, overwritefile , unicode)
//Finally, write strings from array to file
- for (i=0;i<=array.length-1;i++) outfile.WriteLine(array[i]);
+ for (i=0;i<=array.length-1;i++) out_file.WriteLine(array[i]);
//Close file
- outfile.Close();
+ out_file.Close();
};
//Write UTF-8 file
function WriteToUnicodeFile(array,langpack) {
stream.Open();
-for (i=0;i<=array.length-1;i++) stream.WriteText(array[i]+"\n");
+for (i=0;i<=array.length-1;i++) stream.WriteText(array[i]+"\r\n");
stream.SaveToFile(langpack, 2);
stream.Close();
} \ No newline at end of file