域的 Realurl 配置组合和语言的获取参数
Realurl config combination of domain an get-parameter for language
希迪霍,
我得到了一个 TYPO3 站点,其中包含每种语言的多种翻译。
翻译的 Realurl-config 工作正常,如果有特定的域。例如domainname.com、domainname.de、domainname.es等。
现在我想添加一个新的翻译(葡萄牙语),但我没有它的域。我想使用 url 域名。com/pt 用于新翻译。
RealUrl 是否支持这种不同的使用方式?
后端预览工作不正常。
语言菜单包含正确的 Link,但打开它时,我得到的是标准语言 (en)。
在 TS 中:
configname {
baseURL = https://www.domainname.com
sys_language_uid = 0
language = en
locale_all = en_EN
htmlTag_langKey = en
}
[globalVar = GP:L = 0]
configname {
sys_language_uid = 0
language = en
locale_all = en_EN
htmlTag_langKey = en
}
[global]
[globalVar = GP:L = 1]
configname {
sys_language_uid = 1
language = de
locale_all = de_DE
htmlTag_langKey = de
baseURL = https://www.domainname.de
}
[global]
....
#new config for portuguese
[globalVar = GP:L = 3]
configname {
sys_language_uid = 3
language = pt
locale_all = pt_PT
htmlTag_langKey = pt
}
[global]
也许我不知道为此目的正确配置 realurl_conf.php。
来了:
$TYPO3_CONF_VARS['EXTCONF']['realurl']['_DEFAULT'] = array(
'preVars' => array(
array(
'GETvar' => 'L',
'valueMap' => array(
'pt' => '3',
),
'valueDefault' => '',
'noMatch' => 'bypass',
),
),
....
);
$TYPO3_CONF_VARS['EXTCONF']['realurl']['_DOMAINS'] = array(
'encode' => array(
array(
'GETvar' => 'L',
'value' => '',
'ifDifferentToCurrent' => true,
'useConfiguration' => '_DEFAULT',
'urlPrepend' => 'https://www.domainname.com',
),
array(
'GETvar' => 'L',
'value' => '0',
'ifDifferentToCurrent' => true,
'useConfiguration' => '_DEFAULT',
'urlPrepend' => 'https://www.domainname.com'
),
array(
'GETvar' => 'L',
'value' => '1',
'ifDifferentToCurrent' => true,
'useConfiguration' => '_DEFAULT',
'urlPrepend' => 'https://www.domainname.de'
),
array(
'GETvar' => 'L',
'value' => '2',
'ifDifferentToCurrent' => true,
'useConfiguration' => '_DEFAULT',
'urlPrepend' => 'https://www.domainname.es'
),
array(
'GETvar' => 'L',
'value' => '4',
'ifDifferentToCurrent' => true,
'useConfiguration' => '_DEFAULT',
'urlPrepend' => 'https://www.domainname.cn'
),
array(
'GETvar' => 'L',
'value' => '6',
'ifDifferentToCurrent' => true,
'useConfiguration' => '_DEFAULT',
'urlPrepend' => 'https://www.domainname.com'
),
),
'decode' => array(
'www.domainname.com' => array(
'GETvars' => array(
'L' => '0',
),
'useConfiguration' => '_DEFAULT',
),
'www.domainname.de' => array(
'GETvars' => array(
'L' => '1',
),
'useConfiguration' => '_DEFAULT'
),
'www.domainname.es' => array(
'GETvars' => array(
'L' => '2',
),
'useConfiguration' => '_DEFAULT'
),
'www.domainname.cn' => array(
'GETvars' => array(
'L' => '4',
),
'useConfiguration' => '_DEFAULT'
),
),
);
关于如何说真实的任何建议url它必须使用的语言 3?
Multilanguange/Multidomain 配置实现起来并不简单...
不过,我从来没有混合使用不同的模式。
第一眼看到的最大问题
是您的所有域配置都使用相同的 [_default] 配置 -
我总是像这样为每个域创建专用数组:
// [_default] stuff
$TYPO3_CONF_VARS['EXTCONF']['realurl']['whatever.de'] = $TYPO3_CONF_VARS['EXTCONF']['realurl']['_DEFAULT'];
$TYPO3_CONF_VARS['EXTCONF']['realurl']['whatever.de']['pagePath']['rootpage_id'] = 1;
$TYPO3_CONF_VARS['EXTCONF']['realurl']['whatever.com'] = $TYPO3_CONF_VARS['EXTCONF']['realurl']['_DEFAULT'];
$TYPO3_CONF_VARS['EXTCONF']['realurl']['whatever.com']['pagePath']['rootpage_id'] = 1;
$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl']['_DOMAINS']['encode'] = array(
array(
'GETvar' => 'L',
'value' => '0',
'useConfiguration' => 'whatever.de',
'urlPrepend' => 'http://whatever.de',
'ifDifferentToCurrent' => true,
),
array(
'GETvar' => 'L',
'value' => '1',
'useConfiguration' => 'whatever.com',
'urlPrepend' => 'http://whatever.com',
'ifDifferentToCurrent' => true,
),
// ...
);
$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl']['_DOMAINS']['decode'] = array(
'whatever.de' => array(
'GETvars' => array(
'L' => '0',
),
'useConfiguration' => 'whatever.de'
),
'whatever.com' => array(
'GETvars' => array(
'L' => '1',
),
'useConfiguration' => 'whatever.com'
),
// ...
);
但最干净的解决方案肯定是获取必要的 .pt 域,恕我直言。
Now i want to add a new translation (Portuguese), but i don't have a domain for it. I want to use the url domainname.com/pt for the new translation.
Does RealUrl supports this different way of use?
不,不是。它要么是域,要么是语言段。
谢谢大家的回答。
我找到了解决办法。这都是关于 encode/decode 块和 preVars 的。此外,为了我的目的(肮脏的修复),我特别将我连接到 UrlDecoder(函数 setRequestVariables(){...})。
一个配置足以让 real_url 混合多域和语言参数。
realurl_conf.php
$TYPO3_CONF_VARS['EXTCONF']['realurl']['_DEFAULT'] = array(
'init' => array(
'enableCHashCache' => true,
'appendMissingSlash' => 'ifNotFile',
'enableUrlDecodeCache' => true,
'emptyUrlReturnValue' => '/',
),
'preVars' => array(
array(
'GETvar' => 'L',
'valueMap' => array(
'en' => '0',
'de' => '1',
'es' => '2',
'pt' => '3',
'cn' => '4',
'it' => '5',
'us' => '6',
'fr' => '7',
),
'valueDefault' => 'en',
'noMatch' => 'bypass',
),
),
...
);
现在 Endcode/Decode 块:
$TYPO3_CONF_VARS['EXTCONF']['realurl']['example.org'] = $TYPO3_CONF_VARS['EXTCONF']['realurl']['_DEFAULT'];
$TYPO3_CONF_VARS['EXTCONF']['realurl']['_DOMAINS'] = array(
'encode' => array(
array(
'GETvar' => 'L',
'value' => '0',
'useConfiguration' => 'example.org',
'urlPrepend' => 'https://www.example.org'
),
array(
'GETvar' => 'L',
'value' => '1',
'useConfiguration' => 'example.org',
'urlPrepend' => 'https://www.example.de'
),
array(
'GETvar' => 'L',
'value' => '2',
'useConfiguration' => 'example.org',
'urlPrepend' => 'https://www.example.es'
),
array(
'GETvar' => 'L',
'value' => '3',
'useConfiguration' => 'example.org',
'urlPrepend' => 'https://www.example.org/pt'
),
array(
'GETvar' => 'L',
'value' => '4',
'useConfiguration' => 'example.org',
'urlPrepend' => 'https://www.example.cn'
),
array(
'GETvar' => 'L',
'value' => '6',
'useConfiguration' => 'example.org',
'urlPrepend' => 'https://www.example.org/us'
),
array(
'GETvar' => 'L',
'value' => '7',
'useConfiguration' => 'example.org',
'urlPrepend' => 'https://www.example.org/fr'
)
),
'decode' => array(
'example.com' => array(
'GETvars' => array(
'L' => '0',
),
'useConfiguration' => 'example.org'
),
'example.de' => array(
'GETvars' => array(
'L' => '1',
),
'useConfiguration' => 'example.org'
),
'example.es' => array(
'GETvars' => array(
'L' => '2',
),
'useConfiguration' => 'example.org'
),
'example.pt' => array(
'GETvars' => array(
'L' => '3',
),
'useConfiguration' => 'example.org'
),
'example.cn' => array(
'GETvars' => array(
'L' => '4',
),
'useConfiguration' => 'example.org'
),
'example.us' => array(
'GETvars' => array(
'L' => '6',
),
'useConfiguration' => 'example.org'
),
'example.fr' => array(
'GETvars' => array(
'L' => '7',
),
'useConfiguration' => 'example.org'
)
)
);
RealurlUrlDecoder.php
use DmitryDulepov\Realurl\Cache\UrlCacheEntry;
class RealurlUrlDecoder extends \DmitryDulepov\Realurl\Decoder\UrlDecoder {
/**
* Sets variables after the decoding.
*
* @param UrlCacheEntry $cacheEntry
*/
public function setRequestVariables(UrlCacheEntry $cacheEntry) {
$languageWithoutDomain = array(
3 => '/pt/',
6 => '/us/',
7 => '/fr/',
);
if (in_array(substr($_SERVER['REQUEST_URI'], 0, 4), $languageWithoutDomain)) {
foreach ($languageWithoutDomain as $key => $value) {
if(substr($_SERVER['REQUEST_URI'], 0, 4) == $value){
$requestVariables = $cacheEntry->getRequestVariables();
if(isset($requestVariables['L'])){
$requestVariables['L'] = $key;
$cacheEntry->setRequestVariables($requestVariables);
}
}
}
}
parent::setRequestVariables($cacheEntry);
}
}
希迪霍,
我得到了一个 TYPO3 站点,其中包含每种语言的多种翻译。
翻译的 Realurl-config 工作正常,如果有特定的域。例如domainname.com、domainname.de、domainname.es等。
现在我想添加一个新的翻译(葡萄牙语),但我没有它的域。我想使用 url 域名。com/pt 用于新翻译。
RealUrl 是否支持这种不同的使用方式?
后端预览工作不正常。 语言菜单包含正确的 Link,但打开它时,我得到的是标准语言 (en)。
在 TS 中:
configname {
baseURL = https://www.domainname.com
sys_language_uid = 0
language = en
locale_all = en_EN
htmlTag_langKey = en
}
[globalVar = GP:L = 0]
configname {
sys_language_uid = 0
language = en
locale_all = en_EN
htmlTag_langKey = en
}
[global]
[globalVar = GP:L = 1]
configname {
sys_language_uid = 1
language = de
locale_all = de_DE
htmlTag_langKey = de
baseURL = https://www.domainname.de
}
[global]
....
#new config for portuguese
[globalVar = GP:L = 3]
configname {
sys_language_uid = 3
language = pt
locale_all = pt_PT
htmlTag_langKey = pt
}
[global]
也许我不知道为此目的正确配置 realurl_conf.php。
来了:
$TYPO3_CONF_VARS['EXTCONF']['realurl']['_DEFAULT'] = array(
'preVars' => array(
array(
'GETvar' => 'L',
'valueMap' => array(
'pt' => '3',
),
'valueDefault' => '',
'noMatch' => 'bypass',
),
),
....
);
$TYPO3_CONF_VARS['EXTCONF']['realurl']['_DOMAINS'] = array(
'encode' => array(
array(
'GETvar' => 'L',
'value' => '',
'ifDifferentToCurrent' => true,
'useConfiguration' => '_DEFAULT',
'urlPrepend' => 'https://www.domainname.com',
),
array(
'GETvar' => 'L',
'value' => '0',
'ifDifferentToCurrent' => true,
'useConfiguration' => '_DEFAULT',
'urlPrepend' => 'https://www.domainname.com'
),
array(
'GETvar' => 'L',
'value' => '1',
'ifDifferentToCurrent' => true,
'useConfiguration' => '_DEFAULT',
'urlPrepend' => 'https://www.domainname.de'
),
array(
'GETvar' => 'L',
'value' => '2',
'ifDifferentToCurrent' => true,
'useConfiguration' => '_DEFAULT',
'urlPrepend' => 'https://www.domainname.es'
),
array(
'GETvar' => 'L',
'value' => '4',
'ifDifferentToCurrent' => true,
'useConfiguration' => '_DEFAULT',
'urlPrepend' => 'https://www.domainname.cn'
),
array(
'GETvar' => 'L',
'value' => '6',
'ifDifferentToCurrent' => true,
'useConfiguration' => '_DEFAULT',
'urlPrepend' => 'https://www.domainname.com'
),
),
'decode' => array(
'www.domainname.com' => array(
'GETvars' => array(
'L' => '0',
),
'useConfiguration' => '_DEFAULT',
),
'www.domainname.de' => array(
'GETvars' => array(
'L' => '1',
),
'useConfiguration' => '_DEFAULT'
),
'www.domainname.es' => array(
'GETvars' => array(
'L' => '2',
),
'useConfiguration' => '_DEFAULT'
),
'www.domainname.cn' => array(
'GETvars' => array(
'L' => '4',
),
'useConfiguration' => '_DEFAULT'
),
),
);
关于如何说真实的任何建议url它必须使用的语言 3?
Multilanguange/Multidomain 配置实现起来并不简单... 不过,我从来没有混合使用不同的模式。
第一眼看到的最大问题 是您的所有域配置都使用相同的 [_default] 配置 - 我总是像这样为每个域创建专用数组:
// [_default] stuff
$TYPO3_CONF_VARS['EXTCONF']['realurl']['whatever.de'] = $TYPO3_CONF_VARS['EXTCONF']['realurl']['_DEFAULT'];
$TYPO3_CONF_VARS['EXTCONF']['realurl']['whatever.de']['pagePath']['rootpage_id'] = 1;
$TYPO3_CONF_VARS['EXTCONF']['realurl']['whatever.com'] = $TYPO3_CONF_VARS['EXTCONF']['realurl']['_DEFAULT'];
$TYPO3_CONF_VARS['EXTCONF']['realurl']['whatever.com']['pagePath']['rootpage_id'] = 1;
$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl']['_DOMAINS']['encode'] = array(
array(
'GETvar' => 'L',
'value' => '0',
'useConfiguration' => 'whatever.de',
'urlPrepend' => 'http://whatever.de',
'ifDifferentToCurrent' => true,
),
array(
'GETvar' => 'L',
'value' => '1',
'useConfiguration' => 'whatever.com',
'urlPrepend' => 'http://whatever.com',
'ifDifferentToCurrent' => true,
),
// ...
);
$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl']['_DOMAINS']['decode'] = array(
'whatever.de' => array(
'GETvars' => array(
'L' => '0',
),
'useConfiguration' => 'whatever.de'
),
'whatever.com' => array(
'GETvars' => array(
'L' => '1',
),
'useConfiguration' => 'whatever.com'
),
// ...
);
但最干净的解决方案肯定是获取必要的 .pt 域,恕我直言。
Now i want to add a new translation (Portuguese), but i don't have a domain for it. I want to use the url domainname.com/pt for the new translation.
Does RealUrl supports this different way of use?
不,不是。它要么是域,要么是语言段。
谢谢大家的回答。
我找到了解决办法。这都是关于 encode/decode 块和 preVars 的。此外,为了我的目的(肮脏的修复),我特别将我连接到 UrlDecoder(函数 setRequestVariables(){...})。 一个配置足以让 real_url 混合多域和语言参数。
realurl_conf.php
$TYPO3_CONF_VARS['EXTCONF']['realurl']['_DEFAULT'] = array(
'init' => array(
'enableCHashCache' => true,
'appendMissingSlash' => 'ifNotFile',
'enableUrlDecodeCache' => true,
'emptyUrlReturnValue' => '/',
),
'preVars' => array(
array(
'GETvar' => 'L',
'valueMap' => array(
'en' => '0',
'de' => '1',
'es' => '2',
'pt' => '3',
'cn' => '4',
'it' => '5',
'us' => '6',
'fr' => '7',
),
'valueDefault' => 'en',
'noMatch' => 'bypass',
),
),
...
);
现在 Endcode/Decode 块:
$TYPO3_CONF_VARS['EXTCONF']['realurl']['example.org'] = $TYPO3_CONF_VARS['EXTCONF']['realurl']['_DEFAULT'];
$TYPO3_CONF_VARS['EXTCONF']['realurl']['_DOMAINS'] = array(
'encode' => array(
array(
'GETvar' => 'L',
'value' => '0',
'useConfiguration' => 'example.org',
'urlPrepend' => 'https://www.example.org'
),
array(
'GETvar' => 'L',
'value' => '1',
'useConfiguration' => 'example.org',
'urlPrepend' => 'https://www.example.de'
),
array(
'GETvar' => 'L',
'value' => '2',
'useConfiguration' => 'example.org',
'urlPrepend' => 'https://www.example.es'
),
array(
'GETvar' => 'L',
'value' => '3',
'useConfiguration' => 'example.org',
'urlPrepend' => 'https://www.example.org/pt'
),
array(
'GETvar' => 'L',
'value' => '4',
'useConfiguration' => 'example.org',
'urlPrepend' => 'https://www.example.cn'
),
array(
'GETvar' => 'L',
'value' => '6',
'useConfiguration' => 'example.org',
'urlPrepend' => 'https://www.example.org/us'
),
array(
'GETvar' => 'L',
'value' => '7',
'useConfiguration' => 'example.org',
'urlPrepend' => 'https://www.example.org/fr'
)
),
'decode' => array(
'example.com' => array(
'GETvars' => array(
'L' => '0',
),
'useConfiguration' => 'example.org'
),
'example.de' => array(
'GETvars' => array(
'L' => '1',
),
'useConfiguration' => 'example.org'
),
'example.es' => array(
'GETvars' => array(
'L' => '2',
),
'useConfiguration' => 'example.org'
),
'example.pt' => array(
'GETvars' => array(
'L' => '3',
),
'useConfiguration' => 'example.org'
),
'example.cn' => array(
'GETvars' => array(
'L' => '4',
),
'useConfiguration' => 'example.org'
),
'example.us' => array(
'GETvars' => array(
'L' => '6',
),
'useConfiguration' => 'example.org'
),
'example.fr' => array(
'GETvars' => array(
'L' => '7',
),
'useConfiguration' => 'example.org'
)
)
);
RealurlUrlDecoder.php
use DmitryDulepov\Realurl\Cache\UrlCacheEntry;
class RealurlUrlDecoder extends \DmitryDulepov\Realurl\Decoder\UrlDecoder {
/**
* Sets variables after the decoding.
*
* @param UrlCacheEntry $cacheEntry
*/
public function setRequestVariables(UrlCacheEntry $cacheEntry) {
$languageWithoutDomain = array(
3 => '/pt/',
6 => '/us/',
7 => '/fr/',
);
if (in_array(substr($_SERVER['REQUEST_URI'], 0, 4), $languageWithoutDomain)) {
foreach ($languageWithoutDomain as $key => $value) {
if(substr($_SERVER['REQUEST_URI'], 0, 4) == $value){
$requestVariables = $cacheEntry->getRequestVariables();
if(isset($requestVariables['L'])){
$requestVariables['L'] = $key;
$cacheEntry->setRequestVariables($requestVariables);
}
}
}
}
parent::setRequestVariables($cacheEntry);
}
}