我想从php文件中分割js代码,我将转换变量从php转移到js有问题。
CakePhp使用__('text {VAR}', [VAR])
;
这是php文件末尾的代码
$orders = [1=>...,2=>...., 3=>..., 4=>...];
<script>
var allOrders = <?= json_encode($orders ?? null) ?>;
var text_ok = '<?= __('OK') ?>';
.
.
.
var text_doYouWantToDeleteOrder = '<?= __('Do you really want to delete house No. {0}?', [json_encode($order->id)]); ?>';
</script>
我的外部文件(只有JS):
<script type="text/javascript">
var i = 0;
$.each(allOrders, function (index, order) {
$('#delete-order-' + order.id).click(function () {
swal({
title: text_doYouWantToDeleteOrder,
...
closeOnCancel: true
}, function (isConfirm) {
if (isConfirm) {
...
}
});
});
i++;
});
所以问题是如何将第一个文件的翻译与第二个文件匹配得到:
你真的想删除1号房吗? 你真的想删掉5号房吗? 你真的想删掉8号房吗?
旧的工作代码(php和js mix)
<script type="text/javascript">
<?php
$i = 0;
foreach ($orders as $order) {
?>
$('#delete-order-<?= $order->id ?>').click(function () {
swal({
title: "<?= __('Do you really want to delete house No. {0}?', [$order->id]); ?>",
...
closeOnCancel: true
}, function (isConfirm) {
if (isConfirm) {
...
}
});
});
<?php
$i++;
}
?>
答案 0 :(得分:3)
使用I18next并使用gulp-i18next-conv转换* .po文件或使用i18next-po-loader但是po-loader要求您将webpack添加到堆栈中(如果尚未添加)。 / p>
这对我们来说是最好的,也是最完美的,因为它允许我们分享翻译。
答案 1 :(得分:1)
我们遇到了同样的问题,但只有一次使用,所以这是我的解决方案:
替换您的翻译字符串功能
function strFormat(source, params) {
params.forEach(function (n, i) {
source = source.replace(new RegExp("\\{" + i + "\\}", "g"), n);
});
return source;
使用cakePhp的翻译
function translateMe(param) {
var text = "<?= __('Do you really want to delete order No. {0}?'); ?>";
return strFormat(text, [param]);
}
并在你的swal中使用
var i = 0;
$.each(orderData, function (key, order) {
$('#delete-order-' + order.id).click(function () {
swal({
title: translateMe(order.id),
...
closeOnCancel: true
}, function (isConfirm) {
if (isConfirm) {
...
}
});
});
i++;
});
但是对于不断使用https://www.i18next.com/getting-started.html将是我的选择