html如何更改元素url,Silex:允许用户通过单击html元素并保持干净的URL来更改语言...

我正在为网站使用Silex和Twig,并且我希望允许用户更改网站的语言。

我的问题

现在,如果我更改URL的语言环境,则可以使用:

/my-account:我的页面内容为英文(默认为_locale)

/fr/my-account:我的页面内容是法文

/en/my-account:我的页面内容是英文

如何通过单击html元素来执行相同的操作?

我正在寻找解决我的问题的想法,并寻求一些好的实践来尽可能地做到“正确”。

我的密码

这是我用来管理多语言的Silex组件:

// TRANSLATION

$app->register(new Silex\Provider\LocaleServiceProvider());

$app->register(new Silex\Provider\TranslationServiceProvider());

$app->register(new \Pmaxs\Silex\Locale\Provider\LocaleServiceProvider(), [

'locale.locales' => ['en', 'fr'],

'locale.default_locale' => 'en',

'locale.resolve_by_host' => false,

'locale.exclude_routes' => ['^_']

]);

$app->extend('translator', function($translator, $app) {

$translator->addLoader('yaml', new YamlFileLoader());

$translator->addResource('yaml', __DIR__.'/../src/locales/en.yml', 'en');

$translator->addResource('yaml', __DIR__.'/../src/locales/fr.yml', 'fr');

return $translator;

});

这是我的HTML供用户更改语言:

EN // My current langue

// The list of langage the user can choose : here ONE -> FR

FR // Could be nice to change the langue staying on the same page

现在我的jQuery获得价值:

$(document).ready(function() {

$(".change_langue").on("click", function() {

var new_langue = $(this).data("lg");

$.ajax({

url: "{{ path('new-langue') }}",

type: 'POST',

data: {'langue': new_langue},

success: function (resp) {

console.log(resp);

},

error: function (resp) {

console.log(resp);

}

});

});

});

我的Ajax控制器:

$app->match('/new-langue', function (Request $request) use ($app) {

$new_langue = $request->get('langue');

// some code to change the langage

return New Response($new_langue);

})->bind('new-langue');

如果这样做,我的Ajax成功就可以console.log(resp);给我en。

有关如何做的一些想法/问题

用Ajax调用是一个好主意吗?

如果我改变fr通过en在我的网址它的工作原理,它是一个好主意,尝试用做在JavaScript window.location.href的例子吗?(我认为不是,但仍在询问)

我看到了另一个问题的解决方案,并在控制器中尝试了此方法,但出现了这个错误:(500 (Internal Server Error)我做了同样的事情,用$new_langue代替$app['defaultLanguage']和并为我的主页使用了正确的名称)。

这是我第一次使用Silex创建一个完整的网站,并且我是php框架的初学者,因此,如果有人可以帮助实现我想要的…,请先感谢!

编辑:

根据我得到的答案以及我想要实现的目标,是否可以更改语言环境并与Silex / Twig保持同一页面?

例如,这给了我当前路线:global.request.get('_route')这global.request.get('_locale')给了我区域设置。

如果以我的主页为例,这就是我的控制器现在的外观(我只是显示模板):

$app->match('/', function (Request $request) use ($app) {

return $app['twig']->render('home.html.twig');

})->bind('home');

如您所见,我的URL中没有{_locale}参数。 因此,我可以保留没有“

__locale”的“干净的URL”并单击并停留在同一页面上+更改当前语言吗?

我想做这样的事情: FR

但这不能肯定…我可以这样做吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值