[TYPO3-english] Bug in locallangXMLOverride mechanism since TYPO3 4.6?
Lars Patrick Heß
larshess at gmail.com
Wed Dec 14 21:57:56 CET 2011
Okay,
this can be the solution:
protected function doParsingFromRootForElement(SimpleXMLElement $root, $element) {
$bodyOfFileTag = $root->data->languageKey;
// Check if the source llxml file contains localized records
$localizedBodyOfFileTag = $root->data->xpath("languageKey[@index='" . $this->languageKey . "']");
// If no records found return empty array
if ($element === 'target' && count($localizedBodyOfFileTag) === 0)
return array();
$parsedData = $this->getParsedDataForElement($bodyOfFileTag, $element);
if ($element === 'source')
return $parsedData;
if ($element === 'target' && isset($localizedBodyOfFileTag[0]) && $localizedBodyOfFileTag[0] instanceof SimpleXMLElement) {
$parsedTargetData = $this->getParsedDataForElement($localizedBodyOfFileTag[0], $element);
$mergedData = array_merge($parsedData, $parsedTargetData);
if ($this->languageKey === 'default') {
foreach (array_keys($mergedData) as $key) {
if (!isset($parsedData[$key])) {
unset($mergedData[$key]);
}
}
} else {
foreach (array_keys($mergedData) as $key) {
if (!isset($parsedTargetData[$key])) {
unset($mergedData[$key]);
}
}
}
return $mergedData;
}
return $parsedData;
}
I can imagine, that there is a better way then unset all unneeded keys…
Am 14.12.2011 um 20:49 schrieb Lars Patrick Heß:
> i'm sorry, but my post was to optimistic, i found some other cases which doesn't work… i'm working on it…
>
> Am 14.12.2011 um 20:19 schrieb Markus Klein:
>
>> Hi Lars,
>>
>> Do you mind posting this as a bug on http://forge.typo3.org/projects/typo3v4-core/issues and push the suggested fix to our review server?
>>
>> Kind regards
>> Markus
>>
>>> -----Original Message-----
>>> From: typo3-english-bounces at lists.typo3.org [mailto:typo3-english-bounces at lists.typo3.org] On Behalf Of Lars Patrick Heß
>>> Sent: Wednesday, December 14, 2011 1:11 PM
>>> To: TYPO3 English
>>> Subject: Re: [TYPO3-english] Bug in locallangXMLOverride mechanism since TYPO3 4.6?
>>>
>>> After some debugging the question came to my mind, why the parser for XML files always returned all available translation for the
>>> "default" language when it is not available inside the default-node?
>>>
>>> So i change code inside the method "t3lib_l10n_parser_Llxml::doParsingFromRootForElement":
>>>
>>> protected function doParsingFromRootForElement(SimpleXMLElement $root, $element) {
>>> $bodyOfFileTag = $root->data->languageKey;
>>>
>>> $parsedData = $this->getParsedDataForElement($bodyOfFileTag, $element);
>>>
>>> if ($element === 'source')
>>> return $parsedData;
>>>
>>> // Check if the source llxml file contains localized records
>>> $localizedBodyOfFileTag = $root->data->xpath("languageKey[@index='" . $this->languageKey . "']");
>>> if ($element === 'target' && isset($localizedBodyOfFileTag[0]) && $localizedBodyOfFileTag[0] instanceof
>>> SimpleXMLElement) {
>>> $parsedTargetData = $this->getParsedDataForElement($localizedBodyOfFileTag[0], $element);
>>> $mergedData = array_merge($parsedData, $parsedTargetData);
>>>
>>> if ($this->languageKey === 'default') {
>>> foreach (array_keys($mergedData) as $key) {
>>> if (!isset($parsedData[$key]))
>>> unset($mergedData[$key]);
>>> }
>>> foreach (array_keys($mergedData) as $key) {
>>> if (!isset($parsedTargetData[$key]))
>>> unset($mergedData[$key]);
>>> }
>>> }
>>>
>>> return $mergedData;
>>> }
>>>
>>> return $parsedData;
>>> }
>>>
>>>
>>> No my testcase runs very well!
>>> This code will never return default-language translations if they are not available!
>>>
>>> Also this cases do pass (originalTranslationFile.xml is always the same):
>>>
>>> otherTranslationFile V2:
>>> <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
>>> <T3locallang>
>>> <data type="array">
>>> <languageKey index="default" type="array">
>>> <label index="test_label_one">one (default NEW)</label>
>>> <label index="test_label_two">two (default NEW)</label>
>>> </languageKey>
>>>
>>> <languageKey index="de" type="array">
>>> <label index="test_label_one">eins (german NEW)</label>
>>> </languageKey>
>>>
>>> <languageKey index="fr" type="array">
>>> <label index="test_label_one">une (française)</label>
>>> </languageKey>
>>> </data>
>>> </T3locallang>
>>>
>>>
>>> otherTranslationFile V3:
>>> <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
>>> <T3locallang>
>>> <data type="array">
>>> <languageKey index="default" type="array">
>>> <label index="test_label_two">two (default NEW)</label>
>>> </languageKey>
>>>
>>> <languageKey index="de" type="array">
>>> <label index="test_label_one">eins (german NEW)</label>
>>> </languageKey>
>>>
>>> <languageKey index="fr" type="array">
>>> <label index="test_label_one">une (française)</label>
>>> </languageKey>
>>> </data>
>>> </T3locallang>
>>>
>>>
>>>
>>>
>>>
>>> Am 13.12.2011 um 17:52 schrieb Lars Patrick Heß:
>>>
>>>> Hey all :-)
>>>>
>>>> i am using the "locallangXMLOverride" in TYPO3 4.6 mechanism to override XML-languagefiles, i use the following line oh php code
>>> to configure the override in a localconf-file:
>>>>
>>>> $GLOBALS['TYPO3_CONF_VARS']['SYS']['locallangXMLOverride']['path/to/originalTranslationFile.xml'][] =
>>> 'path/to/otherTranslationFile.xml'
>>>>
>>>> The content of the original translation file "originalTranslationFile.xml" is this:
>>>>
>>>> <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
>>>> <T3locallang>
>>>> <data type="array">
>>>> <languageKey index="default" type="array">
>>>> <label index="test_label_one">one (default)</label>
>>>> <label index="test_label_two">two (default)</label>
>>>> </languageKey>
>>>>
>>>> <languageKey index="de" type="array">
>>>> <label index="test_label_one">eins (german)</label>
>>>> <label index="test_label_two">zwei (german)</label>
>>>> </languageKey>
>>>> </data>
>>>> </T3locallang>
>>>>
>>>>
>>>> The content of the translation file "otherTranslationFile.xml", which is used to override translations, is this:
>>>>
>>>> <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
>>>> <T3locallang>
>>>> <data type="array">
>>>> <languageKey index="fr" type="array">
>>>> <label index="test_label_one">une (française)</label>
>>>> </languageKey>
>>>> </data>
>>>> </T3locallang>
>>>>
>>>>
>>>> My testcase in typoscriot is something like this, it only outputs two translations via the TS-TEXT object:
>>>> config {
>>>> linkVars = L
>>>> sys_language_uid = 0
>>>> language = en
>>>> locale_all = en_EN.UTF-8
>>>> htmlTag_langKey = en
>>>> }
>>>>
>>>> # DE
>>>> [globalVar=GP:L=1]
>>>> config {
>>>> sys_language_uid = 1
>>>> language = de
>>>> locale_all = de_DE.UTF-8
>>>> htmlTag_langKey = de
>>>> }
>>>> [global]
>>>>
>>>> # FR
>>>> [globalVar = GP:L = 2]
>>>> config {
>>>> sys_language_uid = 2
>>>> language = fr
>>>> locale_all = fr_FR.UTF-8
>>>> htmlTag_langKey = fr
>>>> }
>>>> [global]
>>>>
>>>> page = PAGE
>>>> page.typeNum = 0
>>>>
>>>> page.10 = TEXT
>>>> page.10.data = LLL:path/to/originalTranslationFile.xml:test_label_one
>>>> page.10.wrap = | <br />
>>>>
>>>> page.20 = TEXT
>>>> page.20.data = LLL:path/to/originalTranslationFile.xml:test_label_two
>>>>
>>>>
>>>> The output in english (the default language) is this:
>>>> une (française) // << that's wrong! It must be "one (default)"
>>>> two (default)
>>>>
>>>> In german:
>>>> une (française) // << that's wrong! It must be "eins (german)"
>>>> zwei (german)
>>>>
>>>> In french:
>>>> une (française)
>>>> two (default)
>>>>
>>>>
>>>> The error occured while processing the locallangXMLOverrides-files, while loading the language "default" from the translation file
>>> "otherTranslationFile.xml" (which does not contain any default-translations), the french-translations are rreturned! So the default
>>> translations from the "originalTranslationFile.xml" translation file will be overridden while the merging process!
>>>> When i replace the t3lib_div::readLLfile method with the code from TYPO3 4.5 (so that the new t3lib_l10n classes are not used) it
>>> works!
>>>>
>>>> Does anyone knows the problem?
>>>>
>>>> Thanks,
>>>> Lars
>>>> _______________________________________________
>>>> TYPO3-english mailing list
>>>> TYPO3-english at lists.typo3.org
>>>> http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-english
>>>
>>> _______________________________________________
>>> TYPO3-english mailing list
>>> TYPO3-english at lists.typo3.org
>>> http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-english
>>
>> _______________________________________________
>> TYPO3-english mailing list
>> TYPO3-english at lists.typo3.org
>> http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-english
>
> _______________________________________________
> TYPO3-english mailing list
> TYPO3-english at lists.typo3.org
> http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-english
More information about the TYPO3-english
mailing list