Internationalizing Existing Packages
Internationalize Message text in ADP and TCL
Acs-lang includes tools to automate some
internationalization. From
- /acs-admin/apm/, select a
+ /acs-admin/apm/, select a
package and then click on
- Internationalization, then
- Convert ADP, Tcl, and SQL files to using the
+ Internationalization, then
+ Convert ADP, Tcl, and SQL files to using the
message catalog..
Replace text with tags:
- Choose Find human language text and replace with <# ... #> tags. This automated process
+ Choose Find human language text and replace with <# ... #> tags. This automated process
automatically locates chunks of translatable text,
generates a reasonable message key, and replaces the text
- with a "temporary" tag as described above.
+ with a "temporary" tag as described above.
Any pieces of text found but not extractable -- for
example, pieces of text with embedded adp variables
(i.e. @var_name@) -- will be listed on the result
page. Make sure to take note of these texts and translate
them manually. Suppose for example that our script tells you
- that it left the text "Manage forum @forum_name@"
+ that it left the text "Manage forum @forum_name@"
untouched. What you should do then is to edit the
corresponding adp file and manually replace that text with
- something like "<#manage_forum Manage forum @forum_name@#>"
+ something like "<#manage_forum Manage forum @forum_name@#>"
(to save you from too much typing you may use the shorthand
<#_ Manage forum @forum_name@#>; an underscore key will
result in the script auto-generating a key for you based on
the text). After you have made all such manual edits you can
- simply run the second action labeled "Replace tags with keys
- and insert into catalog".
+ simply run the second action labeled "Replace tags with keys
+ and insert into catalog".
Note: running this action will not find translatable text within HTML or adp tags on adp pages (i.e. text in alt tags of images), nor will it find translatable text in tcl files. Such texts will have to be found manually. If those texts are in adp files they are best replaced with the <#message_key text#> tags that can be extracted by the action described below. Here are some commands that we used on Linux to look for texts in adp pages not found by the script:
# List image tags with alt attributes, look for alt attributes with literal text
find -iname '*.adp'|xargs egrep -i '<img.*alt='
# List submit buttons, look for text in the value attribute
-find -iname '*.adp'|xargs egrep -i '<input[^>]*type="?submit'
+find -iname '*.adp'|xargs egrep -i '<input[^>]*type="?submit'
When you run this step, any modified files are backed up in
- a file with a ".orig" suffix. Those files are
+ a file with a ".orig" suffix. Those files are
never overwritten, though, so the .orig file will always be
the original page file, not the second-to-last file. Running
this action multiple times is harmless.
@@ -199,7 +199,7 @@
files, marking up translatable text with the
<#...#> notation.
Ttranslatable texts are often found in page titles, context bars, and form labels and options. Many times the texts are enclosed in double quotes. Use the following grep commands on Linux to highlight translatable text in tcl files for us:
# Find text in double quotes
-find -iname '*.tcl'|xargs egrep -i '"[a-z]'
+find -iname '*.tcl'|xargs egrep -i '"[a-z]'
# Find untranslated text in form labels, options and values
find -iname '*.tcl'|xargs egrep -i '\-(options|label|value)'|egrep -v '<#'|egrep -v '\-(value|label|options)[[:space:]]+\$[a-zA-Z_]+[[:space:]]*\\?[[:space:]]*$'
# Find text in page titles and context bars
@@ -214,8 +214,8 @@
${var_name}) with %var_name%
You are now ready to follow the normal procedure
and mark up the text using a tempoarary message tag (<#_
text_with_percentage_vars#>) and run the action replace
- tags with keys in the APM.
The variable values in the message are usually fetched with upvar, here is an example from dotlrn:
ad_return_complaint 1 "Error: A [parameter::get -parameter classes_pretty_name]
- must have no[parameter::get -parameter class_instances_pretty_plural] to be deleted"
+ tags with keys in the APM.
The variable values in the message are usually fetched with upvar, here is an example from dotlrn:
ad_return_complaint 1 "Error: A [parameter::get -parameter classes_pretty_name]
+ must have no[parameter::get -parameter class_instances_pretty_plural] to be deleted"
was replaced by:
set subject [parameter::get -localize -parameter classes_pretty_name]
set class_instances [parameter::get -localize -parameter class_instances_pretty_plural]
ad_return_complaint 1 [_ dotlrn.class_may_not_be_deleted]
@@ -233,18 +233,18 @@
find -iname '*.tcl'|xargs egrep -i '<#_[^ ]'
# Review the list of tcl files with no message lookups
for tcl_file in $(find -iname '*.tcl'); do egrep -L '(<#|\[_)' $tcl_file; done
-
When you feel ready you may run the action "Replace tags with keys and insert into catalog" on the tcl files that you've edited to replace the temporary tags with calls to the message lookup procedure.
The acs-lang/bin/check-catalog.sh script checks that the set of keys used in message lookups in tcl, adp, and info files and the set of keys in the catalog file are identical. The scripts below assume that message lookups in adp and info files are on the format #package_key.message_key#, and that message lookups in tcl files are always done with the underscore procedure. The script assumes that you have perl installed and in your path. Run the script like this:
acs-lang/bin/check-catalog.sh package_key
where package_key is the key of the package that you want to test. If you don't provide the package_key argument then all packages with catalog files will be checked. The script will run its checks on en_US xml catalog files.
+
When you feel ready you may run the action "Replace tags with keys and insert into catalog" on the tcl files that you've edited to replace the temporary tags with calls to the message lookup procedure.
The acs-lang/bin/check-catalog.sh script checks that the set of keys used in message lookups in tcl, adp, and info files and the set of keys in the catalog file are identical. The scripts below assume that message lookups in adp and info files are on the format #package_key.message_key#, and that message lookups in tcl files are always done with the underscore procedure. The script assumes that you have perl installed and in your path. Run the script like this:
acs-lang/bin/check-catalog.sh package_key
where package_key is the key of the package that you want to test. If you don't provide the package_key argument then all packages with catalog files will be checked. The script will run its checks on en_US xml catalog files.
Replace tags with keys:
This is an automated process, which will replace the
temporary <#...#> notation in both ADP and Tcl files
with the appropriate notation for the type of file, and
store the text in the message catalog. You need to run the
process twice, once for ADP files, and once for Tcl files.
-