PEAR is discontinued

This is a static archive preserving historical releases and metadata. No new packages or updates will be published. For updates to existing packages, or to publish new packages, please use Composer and Packagist.

Home » Internationalization » Translation2 » Bug #2248

Translation2 Missing Language Index

Details

Submitted2004-08-30 01:05 UTC
Frommatthewh at meta-bit dot com
Assignedquipo
StatusClosed
PackageTranslation2
PHP Version4.3.6
OSWinXP
Roadmaps(Not assigned)

Comments

[2004-08-30 01:05 UTC] matthewh at meta-bit dot com

Description:
------------
If you have additional languages registered in the available languages database table, and the corresponding language doesn't appear within the 'strings_tables' attribute of Translation2 the configuration array, then calls to Admin::remove will generate an index not found error.

Reproduce code:
---------------
-----This erroneously contains only 3 language codes ------
$I18NPARAMS = array(
'langs_avail_table' => TABLE_PREFIX.'languages',
'lang_id_col' => 'locale',
'lang_name_col' => 'name',
'lang_meta_col' => 'meta',
'lang_errmsg_col' => 'error_text',
'strings_tables' => array(
'en' => TABLE_PREFIX.'translations',
'ja' => TABLE_PREFIX.'translations',
'zh' => TABLE_PREFIX.'translations'
),
'string_id_col' => 'token',
'string_page_id_col' => 'pageID',
'string_text_col' => '%s',
//'prefetch' => false //more queries, smaller result sets
//(use when db load is cheaper than network load)
);

BUT the database contains columns for additional languages:
mysql> select * from xw_dlmgr_i18n_languages;
+----+--------+------------+------------------+---------------+
| id | locale | name | meta | error_text |
+----+--------+------------+------------------+---------------+
| 1 | en | english | default language | not available |
| 2 | ja | japanese | charset=utf-8 | nai |
| 3 | zh | chinese | charset=utf-8 | nai |
| 4 | ko | Korean | charset=utf-8 | n/a |
| 5 | ms | Malay | charset=utf-8 | n/a |
| 6 | id | Indonesian | charset=utf-8 | n/a |
| 7 | th | Thai | charset=utf-8 | n/a |
+----+--------+------------+------------------+---------------+
7 rows in set (0.00 sec)

Changes are required within PEAR::Translation2/Admin/Container/db.php
-------------------------------------------------------
class Translation2_Admin_Container_db.....
Line 329:
function remove($stringID, $pageID)
{
$langs = $this->getLangs('ids');
$tables = array();
foreach ($langs as $langID) {
// MiH - Suggested change...
// Check to see if table name is defined in
// configuration...
if (isset(
$this->options['strings_tables'][$langID] ))
$tables[ $langID ] =
$this->options['strings_tables'][$langID];
else
$this->_logger->warning('remove(): Misconfigured language:'.$langID );
}
$tables = array_unique($tables);

Expected result:
----------------
If the Translation2 runtime configuration differs from the Available Languages database table, then index errors shouldnt be sent to stderr.

Possibly use PEAR::Logging [or PHP error logging] to report a misconfigured/missing language from the runtime Translation2 config's.

Alternatively, provide a facility within the config's to nominate a default table for **all languages** for the scenario where strings for multiple languages are stored within different columns in a single table [as is the case here]. Hence, lack of nomination of a specific dbase table could be compensated by, with a fallback to a default_strings_table parameter (or alike).

Actual result:
--------------
PHP Notice: Undefined index: ko in c:\products\php\PEAR\Translation2\Admin\Con
tainer\db.php on line 334
PHP Notice: Undefined index: ms in c:\products\php\PEAR\Translation2\Admin\Con
tainer\db.php on line 334
PHP Notice: Undefined index: id in c:\products\php\PEAR\Translation2\Admin\Con
tainer\db.php on line 334
PHP Notice: Undefined index: th in c:\products\php\PEAR\Translation2\Admin\Con
tainer\db.php on line 334