我需要打开网站的语言版本,根据浏览器语言和IP地址。我试图按照文档中的建议使用区域设置提供程序,我将RequestDefaultLocaleProvider.php复制到src文件夹,重命名并在services.yaml中注册为服务,并将他的ID插入sulu_website.yaml。当我打开站点时,我的提供者中的"getDefaultLocale“方法不会被调用,并且我无法打开所需的站点版本。我做错什么了?
services.yaml
app.locale.my_locale_provider:
class: App\Locale\MyLocaleProvider
arguments:
- '@Sulu\Component\Webspace\Analyzer\RequestAnalyzerInterface'
- '@Symfony\Component\HttpFoundation\RequestStack'sulu_website.yaml
sulu_website:
twig:
attributes:
urls: false
path: false
default_locale:
provider_service_id: app.locale.my_locale_providerMyLocaleProvider.php
namespace App\Locale;
use Sulu\Bundle\WebsiteBundle\Locale\DefaultLocaleProviderInterface;
class MyLocaleProvider implements DefaultLocaleProviderInterface
{
public function __construct()
{
dump("from constructor") ;
}
public function getDefaultLocale()
{
dump("from getDefaultLocale") ;
return 'de';
}
}我还尝试使用推荐的方法Symfony (订阅onKernelRequest事件并在$request->setLocale()方法中设置我需要的语言,但这也不起作用)
发布于 2022-06-02 16:56:49
只有在when空间中使用以下url架构时,才会考虑默认的区域设置提供程序:
<url>{host}/{localization}</url>因此,如果您有sulu.rocks/en和sulu.rocks/de,并且有人正在调用sulu.rocks/,默认的地区提供程序将被调用并重定向,那么用户提供的语言就会被调用。
如果在not空间的rootLevel上运行区域设置,默认的区域设置提供程序将不会被调用,因为它是alrea。
发布于 2022-06-03 14:47:02
问题解决了,我的错误是我期望在ISP中执行getDefaultLocale()方法,但是释放了一个重定向到sulu.rocks/{language},而在那里没有执行getDefaultLocale ()。
https://stackoverflow.com/questions/72479328
复制相似问题