2017-08-24 1 views
3

Ich möchte Js-Code aus PHP-Dateien aufgeteilt werden und ich habe Probleme mit der Übertragung von Variablen von PHP zu js übersetzen. CakePhp machen Übersetzung mit __('text {VAR}', [VAR]);CakePhp übersetzen Variable als JS-Variable

Hier ist der Code am Ende der PHP-Datei

$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> 

Und meine externe Datei (nur 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++; 
    }); 

so das Problem ist, wie die Übersetzung in zweite von der ersten Datei übereinstimmen zu erhalten:

Möchten Sie wirklich Haus Nr. 1 löschen?
Möchten Sie Haus Nr. 5 wirklich löschen?
Möchten Sie Haus Nr. 8 wirklich löschen?

Alter Arbeits Code (php und js mischt)

<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++; 
    } 
    ?> 

Antwort

3

Verwenden I18next und konvertieren Sie Ihre * .po-Dateien gulp-i18next-conv mit oder i18next-po-loader verwenden, aber der po-loader erfordert, dass Sie webpack zu Ihrem Stack hinzufügen, wenn Sie habe ich nicht schon.

Dies funktionierte für uns am besten und makellos, da es uns ermöglicht, die Übersetzungen zu teilen.

1

Wir hatten das gleiche Problem, aber nur für den einmaligen Gebrauch, so war meine Lösung:

von CakePHP Ihre Übersetzung String-Funktion

function strFormat(source, params) { 
    params.forEach(function (n, i) { 
    source = source.replace(new RegExp("\\{" + i + "\\}", "g"), n); 
    }); 
    return source; 

Verwenden Übersetzung ersetzen

function translateMe(param) { 
    var text = "<?= __('Do you really want to delete order No. {0}?'); ?>"; 
    return strFormat(text, [param]); 
    } 

und verwenden Sie in Ihrem 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++; 
}); 

Aber für die ständige Verwendung https://www.i18next.com/getting-started.html wird meine Wahl sein