Index: openacs-4/packages/ref-language/ref-language.info =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ref-language/ref-language.info,v diff -u -r1.9 -r1.10 --- openacs-4/packages/ref-language/ref-language.info 13 May 2010 16:57:20 -0000 1.9 +++ openacs-4/packages/ref-language/ref-language.info 14 May 2010 12:22:49 -0000 1.10 @@ -7,17 +7,18 @@ f t - + Jon Griffin ISO 639-1 language reference data for acs-reference. Mayuli Enterprises, LLC This is the ISO 639-1 language reference data (with languages names in English). - + + Index: openacs-4/packages/ref-language/sql/oracle/ref-language-create.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ref-language/sql/oracle/ref-language-create.sql,v diff -u -r1.6 -r1.7 --- openacs-4/packages/ref-language/sql/oracle/ref-language-create.sql 13 May 2010 16:57:20 -0000 1.6 +++ openacs-4/packages/ref-language/sql/oracle/ref-language-create.sql 14 May 2010 12:22:49 -0000 1.7 @@ -6,7 +6,7 @@ -- --- ISO 639 +-- ISO 639-1 create table language_codes ( language_id char(2) constraint language_codes_language_id_pk @@ -43,3 +43,13 @@ commit; end; / + +-- Languages ISO-639-2 codes + +create table language_639_2_codes ( + iso_639_2 char(3) constraint language_codes_iso_639_2_pk primary key, + iso_639_1 char(2), + label varchar(200) +); + +comment on table language_639_2_codes is 'Contains ISO-639-2 language codes and their corresponding ISO-639-1 when it exists.'; Index: openacs-4/packages/ref-language/sql/oracle/ref-language-drop.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ref-language/sql/oracle/ref-language-drop.sql,v diff -u -r1.4 -r1.5 --- openacs-4/packages/ref-language/sql/oracle/ref-language-drop.sql 30 Sep 2003 12:10:10 -0000 1.4 +++ openacs-4/packages/ref-language/sql/oracle/ref-language-drop.sql 14 May 2010 12:22:49 -0000 1.5 @@ -12,6 +12,8 @@ -- This will probably fail if their is a child table using this. -- I can probably make this cleaner also, but ... no time today +drop table language_639_2_codes; + declare cursor refsrc_cur is select table_name, Index: openacs-4/packages/ref-language/sql/oracle/upgrade/upgrade-5.6.0d2-5.6.0d3.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ref-language/sql/oracle/upgrade/upgrade-5.6.0d2-5.6.0d3.sql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ref-language/sql/oracle/upgrade/upgrade-5.6.0d2-5.6.0d3.sql 14 May 2010 12:22:49 -0000 1.1 @@ -0,0 +1,11 @@ +-- The table is filled by after_install and after_upgrade apm callbacks +-- using the iso-639-2.dat file + +create table language_639_2_codes ( + iso_639_2 char(3) constraint language_codes_iso_639_2_pk primary key, + iso_639_1 char(2), + label varchar(200) +); + +comment on table language_639_2_codes is 'Contains ISO-639-2 language codes and their corresponding ISO-639-1 when it exists.'; + Index: openacs-4/packages/ref-language/sql/postgresql/ref-language-create.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ref-language/sql/postgresql/ref-language-create.sql,v diff -u -r1.3 -r1.4 --- openacs-4/packages/ref-language/sql/postgresql/ref-language-create.sql 13 May 2010 16:57:20 -0000 1.3 +++ openacs-4/packages/ref-language/sql/postgresql/ref-language-create.sql 14 May 2010 12:22:49 -0000 1.4 @@ -38,3 +38,13 @@ 'http://www.iso.ch', now() ); + +-- Languages ISO-639-2 codes + +create table language_639_2_codes ( + iso_639_2 char(3) constraint language_codes_iso_639_2_pk primary key, + iso_639_1 char(2), + label varchar(200) +); + +comment on table language_639_2_codes is 'Contains ISO-639-2 language codes and their corresponding ISO-639-1 when it exists.'; Index: openacs-4/packages/ref-language/sql/postgresql/ref-language-drop.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ref-language/sql/postgresql/ref-language-drop.sql,v diff -u -r1.3 -r1.4 --- openacs-4/packages/ref-language/sql/postgresql/ref-language-drop.sql 15 Sep 2001 01:11:32 -0000 1.3 +++ openacs-4/packages/ref-language/sql/postgresql/ref-language-drop.sql 14 May 2010 12:22:49 -0000 1.4 @@ -10,6 +10,8 @@ -- This will probably fail if their is a child table using this. -- I can probably make this cleaner also, but ... no time today +drop table language_639_2_codes; + create function inline_0() returns integer as ' declare rec acs_reference_repositories%ROWTYPE; Index: openacs-4/packages/ref-language/sql/postgresql/upgrade/upgrade-5.6.0d2-5.6.0d3.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ref-language/sql/postgresql/upgrade/upgrade-5.6.0d2-5.6.0d3.sql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ref-language/sql/postgresql/upgrade/upgrade-5.6.0d2-5.6.0d3.sql 14 May 2010 12:22:49 -0000 1.1 @@ -0,0 +1,10 @@ +-- The table is filled by after_install and after_upgrade apm callbacks +-- using the iso-639-2.dat file + +create table language_639_2_codes ( + iso_639_2 char(3) constraint language_codes_iso_639_2_pk primary key, + iso_639_1 char(2), + label varchar(200) +); + +comment on table language_639_2_codes is 'Contains ISO-639-2 language codes and their corresponding ISO-639-1 when it exists.'; Index: openacs-4/packages/ref-language/tcl/apm-callback-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ref-language/tcl/apm-callback-procs.tcl,v diff -u -r1.1 -r1.2 --- openacs-4/packages/ref-language/tcl/apm-callback-procs.tcl 13 May 2010 16:57:20 -0000 1.1 +++ openacs-4/packages/ref-language/tcl/apm-callback-procs.tcl 14 May 2010 12:22:49 -0000 1.2 @@ -9,6 +9,13 @@ namespace eval ref_language {} namespace eval ref_language::apm {} +ad_proc -private ref_language::apm::after_install { +} { + Fill ISO-639-2 codes table +} { + ref_language::apm::add_language_639_2_codes +} + ad_proc -private ref_language::apm::after_upgrade { {-from_version_name:required} {-to_version_name:required} @@ -21,25 +28,73 @@ set new_languages [ref_language::apm::lang_list_for_5_6_0d2] - foreach {name code} $new_languages { - set exists_p [db_string get_lang {select count(*) from language_codes where language_id = :code} -default 0] - - if { $exists_p } { - db_dml update_lang { - update language_codes set name = :name - where language_id = :code - } - } else { - db_dml insert_lang { - insert into language_codes (language_id, name) - values (:code, :name) - } - } + foreach {code name} $new_languages { + ref_language::set_data -iso1 $code -label $name } + } + 5.6.0d2 5.6.0d3 { + + ref_language::apm::add_language_639_2_codes + + } } } +## Helper procs + +ad_proc -private ref_language::apm::add_language_639_2_codes { +} { + Fills language_639_2_codes + + The ISO-639-2 codes are in a dat file located at + ref-language/sql/commjon directory. The file was downloaded from + http://www.loc.gov/standards/iso639-2/ISO-639-2_utf-8.txt + + Separator is "|" and the columns are: + +
    +
  • ISO 639-2 Bibliographic code (used if terminology one is empty)
  • +
  • ISO 639-2 Terminology code (used if exists)
  • +
  • ISO 639-1 code (2 digits)
  • +
  • Language name in english
  • +
  • Language name in french (ignored if present)
  • +
+ +} { + + set filename "[acs_root_dir]/packages/ref-language/sql/common/iso-639-2.dat" + + set channel [open $filename] + set data [read $channel] + close $channel + + set row_list [split $data "\n"] + foreach row $row_list { + + if { $row eq "" } { + continue + } + + set col_list [split $row "|"] + + # Set iso-639-2 code to terminology if exists, otherwise + # uses the bibliography one (see RFC 4646) + + set iso2b [lindex $col_list 0] + set iso2 [lindex $col_list 1] + set iso1 [lindex $col_list 2] + set label [lindex $col_list 3] + + if { $iso2 eq "" } { + set iso2 $iso2b + } + + ref_language::set_data -iso2 $iso2 -iso1 $iso1 -label $label + + } +} + ad_proc -private ref_language::apm::lang_list_for_5_6_0d2 { } { return { Index: openacs-4/packages/ref-language/tcl/ref-language-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ref-language/tcl/ref-language-procs.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ref-language/tcl/ref-language-procs.tcl 14 May 2010 12:22:49 -0000 1.1 @@ -0,0 +1,58 @@ +ad_library { + + Library for managing language codes + + @author Emmanuelle Raffenne (eraffenne@gmail.com) +} + +namespace eval ref_language {} + +ad_proc -public ref_language::set_data { + -label:required + {-iso1 ""} + {-iso2 ""} +} { + Add new ISO-639 language codes (3 chars and 2 chars) where they don't exist, + update them otherwise. +} { + + if { $iso1 eq "" && $iso2 eq "" } { + + error "you need to provide either a 2 chars or a 3 chars language code" + + } else { + + if { $iso2 ne "" } { + set exists_p [db_string get_lang {} -default 0] + + if { $exists_p } { + db_dml update_lang {} + } else { + db_dml insert_lang {} + } + } + + if { $iso1 ne "" } { + ref_language::set_iso1 -code $iso1 -name $label + } + } + +} + +ad_proc -private ref_language::set_iso1 { + -code:required + -name:required +} { + Add a new ISO-639-1 language code (2 chars) if it doesn't exist, + update it otherwise +} { + + set exists_p [db_string get_lang {} -default 0] + + if { $exists_p } { + db_dml update_lang {} + } else { + db_dml insert_lang {} + } + +} Index: openacs-4/packages/ref-language/tcl/ref-language-procs.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/ref-language/tcl/ref-language-procs.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/ref-language/tcl/ref-language-procs.xql 14 May 2010 12:22:49 -0000 1.1 @@ -0,0 +1,63 @@ + + + + + + + + select count(*) + from language_639_2_codes + where iso_639_2 = :iso2 + + + + + + + + update language_639_2_codes + set label = :label, iso_639_1 = :iso1 + where iso_639_2 = :iso2 + + + + + + + + insert into language_639_2_codes + (iso_639_2, iso_639_1, label) + values + (:iso2, :iso1, :label) + + + + + + + + select count(*) from language_codes + where language_id = :code + + + + + + + + update language_codes set name = :name + where language_id = :code + + + + + + + + insert into language_codes (language_id, name) + values (:code, :name) + + + + +