initiaql check-in, moved repository -- no-longer a fork of

haikuarchives/yab
This commit is contained in:
Jim
2015-04-13 13:40:27 -07:00
parent 9e266ef95f
commit 3e33065a02
234 changed files with 77847 additions and 1 deletions

View File

@@ -0,0 +1,66 @@
1 de x-vnd.Localizer 1483942934
File Datei
Help Hilfe
New... Neu...
Import ZETA... Importiere aus ZETA...
Mime Type Mime-Typ
English Source Englischer Quelltext
Target Language Code Zielsprachencode
Add Phrase Zeile hinzufügen
Cancel Abbrechen
Commit Ändern
Open... Öffnen...
Save... Speichern...
Save and Install... Speichern und Installieren...
Quit Beenden
Help... Hilfe...
About... Über...
Localizer for Haiku\n\n2011 by Jan Bungeroth Localizer für Haiku\n\n2011 von Jan Bungeroth
Ok Ok
Saving catalog completed.\n\nSaved to Katalog erfolgreich gespeichert.\n\nGespeichert in
All existing data will be lost!\n\nAre you sure? Alle Daten werden gelöscht!\n\nSind Sie sicher?
Yes Ja
No Nein
Error reading file\n Fehler beim Einlesen\n
Duplicate source lines were skipped. Doppelte Zeilen wurden ignoriert.
Mime type invalid.\n\nA valid mime type has the form:\nx-vnd.ApplicationName Mime-Typ ungültig.\n\nEin gültiger Mime-Typ hat die Form:\nx-vnd.ApplicationName
Error writing file\n Fehler beim Schreiben\n
Error reading or writing file\n Fehler beim Lesen oder Schreiben\n
No target language specified.\nOnly the English catalog was generated. Keine Zielsprache angegeben.\nNur der englische Katalog wurde erstellt.
Catalogs saved and installed. Kataloge gespeichert und installiert.
Open Catalog Öffne Katalog
Import ZETA Locale Importiere ZETA Lokalisierung
Select Save Directory Wähle Zielverzeichnis
Delete Löschen
Close Schließen
Localizer helps you to bring localization to your Haiku applications.\n\n Localizer hilft bei der Lokalisierung deiner Haiku Programme.\n\n
Localization is done using special catalog files. These catalog files are then compiled into BMessages and stored in a specific directory. The directory and the catalog files are signed by an application mimetype.\n\n Die Lokalisierung wird mit speziellen Katalogdateien umgesetzt. Diese Dateien werden zu BMessages umgewandelt und in einem speziellen Verzeichnis abgelegt. Das Verzeichnis und die Kataloge werden über den Mime-Typ signiert.\n\n
How to use Localizer:\n\n So funktioniert Localizer:\n\n
1. Add the English strings of your program to the left list and their translations into the right list.\n\n 1. Füge die englischen Strings aus deinem Programm in die linke Liste ein, die übersetzten Strings in die rechte Liste.\n\n
2. Enter the translation short code for the target language and the mimetype of your program.\n\n 2. Trage das Sprachkürzel und den Mime-Typ deines Programmes ein.\n\n
3. 'Save and Install' will save your translations locally and install their compiled version to /boot/common/data/locale/catalogs\n\n 3. 'Speichern und Installieren' speichert deine Übersetzungen und installiert die kompilierten Kataloge nach /boot/common/data/locale/catalogs\n\n
Make sure, both lists are also in sync!\n\n Achte darauf, daß beide Listen synchron sind!\n\n
The language code consists of a two letter country code (e.g. de for Germany or nl for Netherlands) or a combined code if the language code differs from the country code (e.g. nl_be for Dutch in Belgium).\n\n Das Sprachkürzel besteht aus einem Code für das Land (z.B. de für Deutschland) und einem Sprachcode, wenn dieser vom Ländercode abweicht (z.B. nl_be für Niederländisch in Belgien).\n\n
The mimetype identifies the application. An application mimetype usually has the format: x-vnd.ApplicationName Der Mime-Typ identifiziert die Applikation. Ein Applikations-Mime-Typ hat das Format: x-vnd.ApplikationsName
Importing ZETA locale files:\n\n Import von ZETA-Lokalisierungen:\n\n
Localizer allows you to import old ZETA locale files.\n\n Localizer erlaubt den Import von alten ZETA-Lokalisierungsdateien.\n\n
Currently Localizer does feature context support, so all source strings are allowed only once. If there are several equal English strings in the ZETA file, only the first one is imported. The others are ignored.\n\n Zur Zeit unterstützt Localizer noch keinen Context, deshalb dürfen Quelltexte nur einmal vorkommen. Sollte ein englischer String mehrfach in einer ZETA-Datei vorkommen, wird nur der erste verwendet.\n\n
Localizer supports ZETA files using the format:\n Localizer unterstützt das folgende ZETA-Format:\n
\"English string\" <tab> \"Target string\"\n\n \"Englischer String\" <tab> \"Übersetzung\"\n\n
And also this format:\n Und außerdem noch folgendes Format:\n
\"_key\" = \"English string\"\n \"_key\" = \"Englischer String\"\n
\"_value\" = \"Target string\"\n \"_value\" = \"Übersetzung\"\n
(Note: _key and _value need to be on separate lines.) (Achtung: _key und _value müssen jeweils in einer eigenen Zeile stehen.)
How to use localization in yab programs:\n\n Lokalisierung in yab-Programmen:\n\n
First you have to load the locale catalog with the mimetype name:\n localize \"x-vnd.MyApplication\"\n\n Zuerst wird der Lokalisierungskatalog mit einem Mime-Typ geladen:\n localize \"x-vnd.MeineApplikation\"\n\n
All widgets will now automatically translate all their strings.\n\n Alle Strings in Widgets werden jetzt automatisch übersetzt.\n\n
To translate a specific string use:\n translate$(myString$)\n\n Um gezielt einen String zu übersetzen, verwende:\n translate$(meinString$)\n\n
A new feature allows you to turn the automatic translation of widget strings off and on again.\n Eine neue Erweiterung läßt dich die Lokalisierung aus- und einschalten.\n
To turn the automatic translation off, use:\n localize stop\n\n Um die Übersetzung auszuschalten, verwende:\n localize stop\n\n
To turn it on again, use:\n localize Um sie wieder einzuschalten, verwende:\n localize
How to use localization in C++ programs:\n\n Lokalisierung in C++-Programmen:\n\n
First, include Catalog.h and Locale.h:\n #include <Catalog.h>\n #include <Locale.h>\n\n Zunächst müssen Catalog.h und Locale.h eingebunden werden:\n #include <Catalog.h>\n #include <Locale.h>\n\n
Within your code, now you can simply translate a string with:\n B_TRANSLATE(myString);\n\n Im Code kann man dann einfach einen String folgendermaßen übersetzen:\n B_TRANSLATE(meinString);\n\n
The locale kit will search for the catalog files associated with your application's signature mimetype.\n\n Das Locale Kit wird die passenden Katalogdateien zum Mime-Typ deiner Applikationssignatur suchen.\n\n
To link your program, add the locale and localestub libraries:\n -l locale -l localestub Um dein Programm zu linken, verwenden die Libraries locale und localestub:\n -l locale -l localestub
To translate a string separated with colons : use:\n menu translate$(myString$)\nThis is useful for translating menu entries because menu messages are separated with :\n\n Um Strings zu übersetzen, die mit einem Doppelpunkt : getrennt sind, verwende:\n menu translate$(meinString$)\nDas ist besonders bei den Menü-Messages sinnvoll, weil diese mit einem : getrennt werden.\n\n

View File

@@ -0,0 +1,66 @@
1 english x-vnd.Localizer 1483942934
File File
Help Help
New... New...
Import ZETA... Import ZETA...
Mime Type Mime Type
English Source English Source
Target Language Code Target Language Code
Add Phrase Add Phrase
Cancel Cancel
Commit Commit
Open... Open...
Save... Save...
Save and Install... Save and Install...
Quit Quit
Help... Help...
About... About...
Localizer for Haiku\n\n2011 by Jan Bungeroth Localizer for Haiku\n\n2011 by Jan Bungeroth
Ok Ok
Saving catalog completed.\n\nSaved to Saving catalog completed.\n\nSaved to
All existing data will be lost!\n\nAre you sure? All existing data will be lost!\n\nAre you sure?
Yes Yes
No No
Error reading file\n Error reading file\n
Duplicate source lines were skipped. Duplicate source lines were skipped.
Mime type invalid.\n\nA valid mime type has the form:\nx-vnd.ApplicationName Mime type invalid.\n\nA valid mime type has the form:\nx-vnd.ApplicationName
Error writing file\n Error writing file\n
Error reading or writing file\n Error reading or writing file\n
No target language specified.\nOnly the English catalog was generated. No target language specified.\nOnly the English catalog was generated.
Catalogs saved and installed. Catalogs saved and installed.
Open Catalog Open Catalog
Import ZETA Locale Import ZETA Locale
Select Save Directory Select Save Directory
Delete Delete
Close Close
Localizer helps you to bring localization to your Haiku applications.\n\n Localizer helps you to bring localization to your Haiku applications.\n\n
Localization is done using special catalog files. These catalog files are then compiled into BMessages and stored in a specific directory. The directory and the catalog files are signed by an application mimetype.\n\n Localization is done using special catalog files. These catalog files are then compiled into BMessages and stored in a specific directory. The directory and the catalog files are signed by an application mimetype.\n\n
How to use Localizer:\n\n How to use Localizer:\n\n
1. Add the English strings of your program to the left list and their translations into the right list.\n\n 1. Add the English strings of your program to the left list and their translations into the right list.\n\n
2. Enter the translation short code for the target language and the mimetype of your program.\n\n 2. Enter the translation short code for the target language and the mimetype of your program.\n\n
3. 'Save and Install' will save your translations locally and install their compiled version to /boot/common/data/locale/catalogs\n\n 3. 'Save and Install' will save your translations locally and install their compiled version to /boot/common/data/locale/catalogs\n\n
Make sure, both lists are also in sync!\n\n Make sure, both lists are also in sync!\n\n
The language code consists of a two letter country code (e.g. de for Germany or nl for Netherlands) or a combined code if the language code differs from the country code (e.g. nl_be for Dutch in Belgium).\n\n The language code consists of a two letter country code (e.g. de for Germany or nl for Netherlands) or a combined code if the language code differs from the country code (e.g. nl_be for Dutch in Belgium).\n\n
The mimetype identifies the application. An application mimetype usually has the format: x-vnd.ApplicationName The mimetype identifies the application. An application mimetype usually has the format: x-vnd.ApplicationName
Importing ZETA locale files:\n\n Importing ZETA locale files:\n\n
Localizer allows you to import old ZETA locale files.\n\n Localizer allows you to import old ZETA locale files.\n\n
Currently Localizer does feature context support, so all source strings are allowed only once. If there are several equal English strings in the ZETA file, only the first one is imported. The others are ignored.\n\n Currently Localizer does feature context support, so all source strings are allowed only once. If there are several equal English strings in the ZETA file, only the first one is imported. The others are ignored.\n\n
Localizer supports ZETA files using the format:\n Localizer supports ZETA files using the format:\n
\"English string\" <tab> \"Target string\"\n\n \"English string\" <tab> \"Target string\"\n\n
And also this format:\n And also this format:\n
\"_key\" = \"English string\"\n \"_key\" = \"English string\"\n
\"_value\" = \"Target string\"\n \"_value\" = \"Target string\"\n
(Note: _key and _value need to be on separate lines.) (Note: _key and _value need to be on separate lines.)
How to use localization in yab programs:\n\n How to use localization in yab programs:\n\n
First you have to load the locale catalog with the mimetype name:\n localize \"x-vnd.MyApplication\"\n\n First you have to load the locale catalog with the mimetype name:\n localize \"x-vnd.MyApplication\"\n\n
All widgets will now automatically translate all their strings.\n\n All widgets will now automatically translate all their strings.\n\n
To translate a specific string use:\n translate$(myString$)\n\n To translate a specific string use:\n translate$(myString$)\n\n
A new feature allows you to turn the automatic translation of widget strings off and on again.\n A new feature allows you to turn the automatic translation of widget strings off and on again.\n
To turn the automatic translation off, use:\n localize stop\n\n To turn the automatic translation off, use:\n localize stop\n\n
To turn it on again, use:\n localize To turn it on again, use:\n localize
How to use localization in C++ programs:\n\n How to use localization in C++ programs:\n\n
First, include Catalog.h and Locale.h:\n #include <Catalog.h>\n #include <Locale.h>\n\n First, include Catalog.h and Locale.h:\n #include <Catalog.h>\n #include <Locale.h>\n\n
Within your code, now you can simply translate a string with:\n B_TRANSLATE(myString);\n\n Within your code, now you can simply translate a string with:\n B_TRANSLATE(myString);\n\n
The locale kit will search for the catalog files associated with your application's signature mimetype.\n\n The locale kit will search for the catalog files associated with your application's signature mimetype.\n\n
To link your program, add the locale and localestub libraries:\n -l locale -l localestub To link your program, add the locale and localestub libraries:\n -l locale -l localestub
To translate a string separated with colons : use:\n menu translate$(myString$)\nThis is useful for translating menu entries because menu messages are separated with :\n\n To translate a string separated with colons : use:\n menu translate$(myString$)\nThis is useful for translating menu entries because menu messages are separated with :\n\n

645
Localizer/Localizer.yab Executable file
View File

@@ -0,0 +1,645 @@
#!yab
doc Author: Jan Bungeroth
doc (c) 2011 in terms of the Artistic License
doc
doc The Localizer helps you to localize your yab applications
doc and import old Zeta localizations.
localize "x-vnd.Localizer"
INSTALLPATH$ = "/boot/common/data/locale/catalogs"
mime$ = "x-vnd."
lastdir$ = "/boot/home"
targetLang$ = ""
OpenMainWindow()
MainMessageLoop()
CloseWindows()
sub MainMessageLoop()
local finished, i, j, n, selected, tmp
local tmp$, t$
dim msg$(1)
while(not finished)
n = split(message$, msg$(), "|")
for i = 1 to n
// if(msg$(i) <> "") print msg$(i)
// menu
switch(msg$(i))
case menu translate$("MainWindow:File:New...")
NewLocale()
break
case menu translate$("MainWindow:File:Open...")
OpenLocale()
break
case menu translate$("MainWindow:File:Import ZETA...")
ImportZETA()
break
case menu translate$("MainWindow:File:Save...")
if(SaveLocale()) then
alert translate$("Saving catalog completed.\n\nSaved to ") + lastdir$, "Ok", "info"
endif
break
case menu translate$("MainWindow:File:Save and Install...")
if(SaveLocale()) then
InstallLocale()
endif
break
case menu translate$("MainWindow:File:Quit")
case "MainWindow:_QuitRequested"
case "_QuitRequested"
finished = true
break
case menu translate$("MainWindow:Help:Help...")
Help()
break
case menu translate$("MainWindow:Help:About...")
About()
break
end switch
// textcontrols
if(left$(msg$(i), 6) = "AddSrc") then
tmp$ = right$(msg$(i), len(msg$(i)) - 7)
selected = 0
for j = 1 to listbox count "SrcList"
t$ = listbox get$ "SrcList", j
if(t$ = tmp$) then
selected = j
break
endif
next j
if(selected = 0) then
localize stop
listbox add "SrcList", tmp$
localize
selected = listbox count "SrcList"
endif
listbox select "SrcList", selected
if(listbox count "TgtList" >= selected) then
listbox select "TgtList", selected
else
listbox select "TgtList", 0
endif
end if
if(left$(msg$(i), 6) = "AddTgt") then
listbox add "TgtList", right$(msg$(i), len(msg$(i)) - 7)
selected = listbox count "TgtList"
listbox select "TgtList", selected
if(listbox count "SrcList" >= selected) then
listbox select "SrcList", selected
else
listbox select "SrcList", 0
endif
end if
if(left$(msg$(i), 4) = "Mime") then
mime$ = right$(msg$(i), len(msg$(i)) - 5)
end if
// listboxes
if(left$(msg$(i), 7) = "SrcList") then
selected = val(right$(msg$(i), len(msg$(i)) - 16))
if(listbox count "TgtList" >= selected) then
listbox select "TgtList", selected
else
listbox select "TgtList", 0
end if
end if
if(left$(msg$(i), 7) = "TgtList") then
selected = val(right$(msg$(i), len(msg$(i)) - 16))
if(listbox count "SrcList" >= selected) then
listbox select "SrcList", selected
else
listbox select "SrcList", 0
end if
end if
if(mid$(msg$(i), 9, 7) = "_Invoke") then
OpenEditor(msg$(i))
end if
next i
wend
end sub
sub OpenMainWindow()
local h, w
h = peek("desktopheight") - 200
w = peek("desktopwidth") - 400
window open 200, 100 to w + 200, h + 100, "MainWindow", "Localizer"
window set "MainWindow", "minimumto", 100,100
menu "File", "New...", "N", "MainWindow"
menu "File", "Open...", "O", "MainWindow"
menu "File", "Import ZETA...", "Z", "MainWindow"
menu "File", "--", "", "MainWindow"
menu "File", "Save...", "S", "MainWindow"
menu "File", "Save and Install...", "I", "MainWindow"
menu "File", "--", "", "MainWindow"
menu "File", "Quit", "Q", "MainWindow"
menu "Help", "Help...", "H", "MainWindow"
menu "Help", "--", "", "MainWindow"
menu "Help", "About...", "", "MainWindow"
layout "top, left, right", "MainWindow"
textcontrol 10,30 to w-20,55, "Mime", "Mime Type", mime$, "MainWindow"
layout "top, bottom, left, right", "MainWindow"
splitview 0,65 to w,h, "Split", true, true, "MainWindow"
layout "top, left", "Split1"
text 10,10, "EngText", "English Source", "Split1"
layout "top, bottom, left, right", "Split1"
listbox 10,30 to w/2 - 10,h-125, "SrcList", 3, "Split1"
layout "bottom, left", "Split1"
text 10,h-115, "AddEngText", "Add Phrase", "Split1"
layout "top, left, right", "Split2"
textcontrol 10, 4 to w/2-20, 25, "TgtLang", "Target Language Code", targetLang$, "Split2"
layout "top, bottom, left, right", "Split2"
listbox 10,30 to w/2 - 20,h-125, "TgtList", 3, "Split2"
layout "bottom, left", "MainWindow"
text 10,h-115, "AddTgtText", "Add Phrase", "Split2"
layout "bottom, left, right", "Split1"
textcontrol 10,h-100 to w/2 - 20, h-80, "AddSrc", "", "", "Split1"
layout "bottom, left, right", "MainWindow"
textcontrol 10,h-100 to w/2-20, h-80, "AddTgt", "", "", "Split2"
end sub
sub CloseWindows()
window close "MainWindow"
end sub
sub OpenEditor(msg$)
local h, w, pos
local entry$, list$, t$
local editorFinished, i, n
h = peek("desktopheight") / 2
w = peek("desktopwidth") / 2
window open w-300,h - 40 to w+300,h+40, "EditorWindow", ""
window set "EditorWindow", "look", "bordered"
window set "EditorWindow", "feel", "modal-app"
pos = val(right$(msg$, len(msg$)-16))
list$ = left$(msg$, 7)
entry$ = listbox get$ list$, pos
localize stop
textcontrol 10,10 to 580,35, "Editor", "", entry$, "EditorWindow"
localize
button 300,40 to 390,70, "Cancel", "Cancel", "EditorWindow"
button 400,40 to 490,70, "Delete", "Delete", "EditorWindow"
button 500,40 to 590,70, "Commit", "Commit", "EditorWindow"
option set "Editor", "Focus", true
dim editorMsg$(1)
editorFinished = false
while(not editorFinished)
n = split(message$, editorMsg$(), "|")
for i = 1 to n
if(editorMsg$(i) = "_QuitRequested") exit(1)
if(editorMsg$(i) = "Cancel") editorFinished = true
if(editorMsg$(i) = "Commit") then
listbox remove list$, pos
t$ = textcontrol get$ "Editor"
localize stop
listbox add list$, pos, t$
localize
listbox select list$, pos
editorFinished = true
endif
if(editorMsg$(i) = "Delete") then
listbox remove list$, pos
listbox select list$, 0
editorFinished = true
endif
next i
wend
window close "EditorWindow"
end sub
sub NewLocale()
local selected
selected = alert "All existing data will be lost!\n\nAre you sure?", "Yes", "No", "", "warning"
if(selected = 1) then
ClearAll()
endif
end sub
sub OpenLocale()
local readno, n
local line$
file$ = filepanel "load-file", "Open Catalog", lastdir$
if(file$ = "") return
ClearAll()
lastdir$ = left$(file$, rinstr(file$, "/"))
readno = open(file$, "r")
if(readno = 0) then
alert translate$("Error reading file\n") + peek$("error"), "Ok", "stop"
return
endif
line input #readno line$
dim tabs$(1)
n = split(line$, tabs$(), "\t")
if(n <> 4) then
alert "Error reading file\n", "Ok", "stop"
close(readno)
return
endif
if(tabs$(2) <> "english") then
targetLang$ = tabs$(2)
else
targetLang$ = ""
endif
mime$ = tabs$(3)
textcontrol set "TgtLang", targetLang$
textcontrol set "Mime", mime$
while(not eof(readno))
line input #readno line$
n = split(line$, tabs$(), "\t")
if(n <> 4) then
alert "Error reading file\n", "Ok", "stop"
close(readno)
return
endif
localize stop
listbox add "SrcList", tabs$(1)
localize
if(targetLang$ <> "") then
listbox add "TgtList", tabs$(4)
endif
wend
close(readno)
end sub
sub ClearAll()
listbox clear "SrcList"
listbox clear "TgtList"
textcontrol clear "AddSrc"
textcontrol clear "AddTgt"
mime$ = "x-vnd."
textcontrol set "Mime", mime$
end sub
sub ImportZETA()
local file$, line$
file$ = filepanel "load-file", "Import ZETA Locale", lastdir$
if(file$ <> "") then
ClearAll()
lastdir$ = left$(file$, rinstr(file$, "/"))
open file$ for reading as #1
while(not eof(#1))
line input #1 line$
ParseZETA(line$)
wend
close #1
file$ = right$(file$, len(file$) - rinstr(file$, "/"))
if(lower$(right$(file$,2)) = mid$(file$,len(file$)-3,2)) then
targetLang$ = lower$(right$(file$,2))
else
targetLang$ = mid$(file$,len(file$)-3,2) + "_" + lower$(right$(file$,2))
endif
textcontrol set "TgtLang", targetLang$
mime$ = "x-vnd." + left$(file$, instr(file$, ".") - 1)
textcontrol set "Mime", mime$
if(warnDuplicates) then
warnDulicates = false
alert "Duplicate source lines were skipped.", "Ok", "warning"
endif
endif
end sub
sub ParseZETA(line$)
local i, counter
local a$, b$, m$
line$ = trim$(line$)
if(left$(line$,1) <> "#") then
counter = 0
for i = 1 to len(line$)
m$ = mid$(line$, i, 1)
if(m$ = chr$(34) and (mid$(line$, i-1, 1) <> chr$(92))) then
counter = counter + 1
endif
if(counter = 1) a$ = a$ + m$
if(counter = 3) b$ = b$ + m$
next i
if(trim$(a$) <> "") then
a$ = right$(a$, len(a$) - 1)
b$ = right$(b$, len(b$) - 1)
if(a$ = "_key") then
if(IsUnique(b$)) then
localize stop
listbox add "SrcList", b$
localize
else
warnDuplicates = true
endif
elsif(a$ = "_value") then
listbox add "TgtList", b$
else
if(IsUnique(a$)) then
localize stop
listbox add "SrcList", a$
localize
listbox add "TgtList", b$
else
warnDuplicates = true
endif
endif
endif
endif
end sub
sub IsUnique(entry$)
local i
local t$
for i = 1 to listbox count "SrcList"
t$ = listbox get$ "SrcList", i
if(t$ = entry$) return false
next i
return true
end sub
sub SaveLocale()
local fileno, i, writerno, n
local entry$, file$, saveFile$
targetLang$ = textcontrol get$ "TgtLang"
if(targetLang$ <> "") then
saveFile$ = targetLang$ + ".catalog"
else
saveFile$ = "en.catalog"
endif
dir$ = filepanel "Save-File", "Save Catalog", lastdir$, saveFile$
if(dir$ = "") return false
lastdir$ = left$(dir$, rinstr(dir$, "/") - 1)
mime$ = textcontrol get$ "Mime"
if(mime$ = "" or mime$ = "x-vnd.") then
alert "Mime type invalid.\n\nA valid mime type has the form:\nx-vnd.ApplicationName", "Ok", "warning"
return false
endif
file$ = right$(mime$, len(mime$) - instr(mime$, "."))
fileno = open(file$ + ".tmp", "w")
if(fileno = 0) then
alert translate$("Error writing file\n") + peek$("error"), "Ok", "stop"
return false
endif
for i = 1 to listbox count "SrcList"
entry$ = listbox get$ "SrcList", i
entry$ = "B_CATKEY\"" + entry$ + "\""
print #fileno entry$
next i
close fileno
system("collectcatkeys -l english -s " + mime$ + " " + file$ + ".tmp")
fileno = open(file$ + ".catkeys", "r")
if(targetLang$ <> "") then
writerno = open(lastdir$ + "/en.catalog", "w")
else
writerno = open(dir$, "w")
endif
if(fileno = 0 or writerno = 0) then
alert translate$("Error reading or writing file\n") + peek$("error"), "Ok", "stop"
return false
endif
line input #fileno entry$
dim tabs$(1)
n = split(entry$, tabs$(), "\t")
if(n <> 4) then
alert "Error reading file\n", "Ok", "stop"
close(writerno)
close(fileno)
return false
endif
print #writerno tabs$(1) + "\tenglish\t" + tabs$(3) + "\t" + tabs$(4)
for i = 1 to listbox count "SrcList"
entry$ = listbox get$ "SrcList", i
print #writerno entry$ + "\t\t\t" + entry$
next i
close(writerno)
close(fileno)
system("rm " + file$ + ".catkeys")
if(targetLang$ <> "") then
fileno = open(lastdir$ + "/en.catalog", "r")
writerno = open(dir$, "w")
if(fileno = 0 or writerno = 0) then
alert translate$("Error reading or writing file\n") + peek$("error"), "Ok", "stop"
return false
endif
line input #fileno entry$
dim tabs$(1)
n = split(entry$, tabs$(), "\t")
if(n <> 4) then
alert "Error reading file\n", "Ok", "stop"
close(writerno)
close(fileno)
return false
endif
print #writerno tabs$(1) + "\t" + targetLang$ + "\t" + tabs$(3) + "\t" + tabs$(4)
i = 1
while(not eof(fileno))
line input #fileno entry$
n = split(entry$, tabs$(), "\t")
if(n <> 4) then
alert "Error reading file\n", "Ok", "stop"
close(writerno)
close(fileno)
return false
endif
print #writerno tabs$(1) + "\t\t\t" + GetTarget$(tabs$(1))
i = i + 1
wend
close(writerno)
close(fileno)
else
alert "No target language specified.\nOnly the English catalog was generated.", "Ok", "warning"
endif
system("rm " + file$ + ".tmp")
return true
end sub
sub InstallLocale()
local inst$
inst$ = INSTALLPATH$ + "/" + mime$
system("mkdir -p " + inst$)
if(targetLang$ <> "") then
system("linkcatkeys -l english -s "+mime$+" -o "+inst$+"/en.catalog "+lastdir$+"/en.catalog")
system("linkcatkeys -l "+targetLang$+" -s "+mime$+" -o "+inst$+"/"+targetLang$+".catalog "+dir$)
else
system("linkcatkeys -l english -s "+mime$+" -o "+inst$+"/en.catalog "+dir$)
endif
alert "Catalogs saved and installed.", "Ok", "info"
end sub
sub GetTarget$(source$)
local t$
local i
for i = 1 to listbox count "SrcList"
t$ = listbox get$ "SrcList", i
if(t$ = source$) then
if(i <= listbox count "TgtList") then
return listbox get$ "TgtList", i
else
return ""
endif
endif
next i
return ""
end sub
sub About()
alert "Localizer for Haiku\n\n2011 by Jan Bungeroth", "Ok", "idea"
end sub
sub Help()
local w,h, helpFinished, i, n, currentPage, maxPages
h = peek("desktopheight")
w = peek("desktopwidth")
window open w/2-200,150 to w/2+200,h-150, "HelpWindow", "Help"
window set "HelpWindow", "Flags", "not-zoomable, not-resizable"
view 0,0 to 400,h-350, "HelpText", "HelpWindow"
draw set "bgcolor", 255,255,255, "HelpText"
draw set "highcolor", "Panel-Background-Color, Lighten-1-Tint", "HelpWindow"
draw line 0,h-347 to 400,h-347, "HelpWindow"
draw set "highcolor", "Panel-Background-Color, Darken-1-Tint", "HelpWindow"
draw line 0,h-348 to 400,h-348, "HelpWindow"
button 10,h-340 to 40,h-310, "HelpBack", "\xe2\x86\xa9", "HelpWindow"
option set "HelpBack", "enabled", false
button 360,h-340 to 390,h-310, "HelpForward", "\xe2\x86\xaa", "HelpWindow"
button 120,h-340 to 280,h-310, "HelpClose", "Close", "HelpWindow"
textedit 0,0 to 400,h-350, "Help", 1, "HelpText"
textedit set "Help", "editable", false
restore Pages
read maxPages
currentPage = 1
ShowHelpPage(currentPage)
dim helpMsg$(1)
helpFinished = false
while(not helpFinished)
n = split(message$, helpMsg$(), "|")
for i = 1 to n
switch(helpMsg$(i))
case "_QuitRequested"
exit(0)
break
case "HelpWindow:_QuitRequested"
case "HelpClose"
helpFinished = true
break
case "HelpForward"
if(currentPage < maxPages) then
currentPage = currentPage + 1
ShowHelpPage(currentPage)
if(currentPage = maxPages) option set "HelpForward", "enabled", false
if(currentPage = 2) option set "HelpBack", "enabled", true
endif
break
case "HelpBack"
if(currentPage > 1) then
currentPage = currentPage - 1
ShowHelpPage(currentPage)
if(currentPage = 1) option set "HelpBack", "enabled", false
if(currentPage = maxPages - 1) option set "HelpForward", "enabled", true
endif
break
end switch
next i
wend
window close "HelpWindow"
end sub
sub ShowHelpPage(num)
local lines, i
local line$
textedit clear "Help"
restore "Page" + str$(num)
read lines
for i = 1 to lines
read line$
textedit add "Help", translate$(line$)
next i
end sub
// Help pages
label Pages
data 4
label Page1
data 9 // data lines for this page
data "Localizer helps you to bring localization to your Haiku applications.\n\n"
data "Localization is done using special catalog files. These catalog files are then compiled into BMessages and stored in a specific directory. The directory and the catalog files are signed by an application mimetype.\n\n"
data "How to use Localizer:\n\n"
data "1. Add the English strings of your program to the left list and their translations into the right list.\n\n"
data "2. Enter the translation short code for the target language and the mimetype of your program.\n\n"
data "3. 'Save and Install' will save your translations locally and install their compiled version to /boot/common/data/locale/catalogs\n\n"
data "Make sure, both lists are also in sync!\n\n"
data "The language code consists of a two letter country code (e.g. de for Germany or nl for Netherlands) or a combined code if the language code differs from the country code (e.g. nl_be for Dutch in Belgium).\n\n"
data "The mimetype identifies the application. An application mimetype usually has the format: x-vnd.ApplicationName"
label Page2
data 9
data "Importing ZETA locale files:\n\n"
data "Localizer allows you to import old ZETA locale files.\n\n"
data "Currently Localizer does feature context support, so all source strings are allowed only once. If there are several equal English strings in the ZETA file, only the first one is imported. The others are ignored.\n\n"
data "Localizer supports ZETA files using the format:\n"
data " \"English string\" <tab> \"Target string\"\n\n"
data "And also this format:\n"
data " \"_key\" = \"English string\"\n"
data " \"_value\" = \"Target string\"\n"
data "(Note: _key and _value need to be on separate lines.)"
label Page3
data 7
data "How to use localization in yab programs:\n\n"
data "First you have to load the locale catalog with the mimetype name:\n localize \"x-vnd.MyApplication\"\n\n"
data "All widgets will now automatically translate all their strings.\n\n"
data "To translate a specific string use:\n translate$(myString$)\n\n"
data "To translate a string separated with colons : use:\n menu translate$(myString$)\nThis is useful for translating menu entries because menu messages are separated with :\n\n"
data "A new feature allows you to turn the automatic translation of widget strings off and on again.\n"
data "To turn the automatic translation off, use:\n localize stop\n\n"
data "To turn it on again, use:\n localize"
label Page4
data 5
data "How to use localization in C++ programs:\n\n"
data "First, include Catalog.h and Locale.h:\n #include <Catalog.h>\n #include <Locale.h>\n\n"
data "Within your code, now you can simply translate a string with:\n B_TRANSLATE(myString);\n\n"
data "The locale kit will search for the catalog files associated with your application's signature mimetype.\n\n"
data "To link your program, add the locale and localestub libraries:\n -l locale -l localestub"