8

Tôi đang điều tra các công cụ dịch khác nhau cho ứng dụng Góc của tôi. Cho đến nay, angular-translate có vẻ là một giải pháp tốt cho điều đó. Nó sử dụng các file JSON mỗi ngôn ngữ được cấu trúc như "lang/namespace/LANG.json" (ví dụ: "lang/người dùng/de.json") và tìm kiếm như thế này:Công cụ tổ chức bản dịch trong các tệp JSON

{ 
    "key1": "Value1", 
    "key2": "Value2", 
    "key3": "Value3", 
} 

Tùy chọn, JSON cũng có thể được lồng nhau.

Điều này có vẻ dễ sử dụng. Tuy nhiên, hơi bất tiện khi thực sự thêm bản dịch mới hoặc thay đổi. Bạn phải thay đổi qua lại các tệp ngôn ngữ khác nhau và rất cồng kềnh để tìm bản dịch cho một khóa nhất định. So sánh các bản dịch khác nhau cũng là bất tiện.

Có công cụ nào có thể đọc địa phương tệp dịch và có thể hiển thị từng bản dịch khác nhau cho mỗi khóa không? Ứng dụng (hỗ trợ Mac OS là phải) hoặc dựa trên trình duyệt.

+1

Có thể sao chép: http://stackoverflow.com/questions/16877062/program-for-managing-json-localization-files – Ganbin

+0

Có thể sao chép vào: http://stackoverflow.com/questions/12664823/angular-js -support-for-localization –

Trả lời

-1

Hãy nhìn vào góc-dịch: https://github.com/angular-translate/angular-translate

cho tất cả các folks DIY:

Bạn có thể tìm các file cục bộ cho góc: đây

Những tập tin này sẽ giúp bạn với các build-in góc bộ lọc: ngày, tiền tệ và số. Tuyệt vời ... cho đến nay.

Bây giờ bạn muốn sử dụng văn bản của riêng mình, hơn tất cả những gì bạn cần là sức mạnh của việc tiêm phụ thuộc vào angular.js. Tạo một file mới như: "myTexts_en_us.js" và sử dụng $ provide.value như thế này:

$provide.value("myTexts", {firstText : "This is my localized text"}); 

Để biết chi tiết: http://jsfiddle.net/4tRBY/24/

Đối với sử dụng thực tế, bạn nên thêm một bộ lọc: http://jsfiddle.net/4tRBY/41/

Mẹo:

  • Hãy chắc chắn để chèn mới nội địa hóa file của bạn vào html của bạn bằng tay, JS hoặc server. (Máy chủ là sự lựa chọn tốt nhất ở đây!)
  • nếu bạn bao gồm một trong các tệp cục bộ góc cạnh, bạn không cần phải thiết lập nó trong mô-đun ứng dụng của mình. (bạn sẽ có $ locale tự động - xem fiddle)
  • thêm khóa id vào giá trị -giá trị của bạn - và đặt giá trị thành mã ngôn ngữ bạn đang sử dụng trong tệp của mình - điều này sẽ có ích để thử nghiệm.
+0

Có lẽ tôi đã không làm cho bản thân mình đủ rõ ràng. Tôi biết và đã sử dụng góc dịch; Tôi thậm chí còn đặt một liên kết đến nó trong câu hỏi của tôi. Tuy nhiên, điều mà tôi thực sự đang tìm kiếm là một công cụ để dễ dàng quản lý các tệp JSON chứa các bản dịch sang các ngôn ngữ khác nhau khi thay đổi và mở rộng chúng trong một trình soạn thảo văn bản đơn giản là cồng kềnh. – str

0

tôi cần điều tương tự bản thân mình và vì vậy tôi chỉ viết nó như thế này:

Tôi đã có 2 Dropdowns với các ngôn ngữ hiện có, từ ngôn ngữ từ 1 tới ngôn ngữ 2 là ý tưởng.

khi chọn cả hai ngôn ngữ Tôi đọc các tệp json thành các mảng và hiển thị nó bằng ng-repeat bằng cách kết hợp hai cách để nội dung của trường nhập thay đổi, mảng đã được cập nhật ngay lập tức.

Phương pháp áp dụng sau đó tải lên tên tệp và mảng đối với tệp php đã ghi nó vào tài liệu.

eng.json:

{ 
    "ALBUM":{ 
    "TITEL":"album", 
    "LAAD_MEER":"Load more", 
    "ALBUMS":"Back to albums" 
    }, 
    "INFO":{ 
    "TITEL":"information", 
    "HOTELS":"Hotels", 
    "SPORTHAL":"Sportscenter", 
    "INTHISHOTEL":"In this facility" 
    } 
} 

html của tôi:

<section ng-if="toSelected" 
     class="bg-g-r bg-u-1 card flyin" 
     ng-repeat="section in fromContents" 
     id="{{'trans'+section.TITEL}}" 
     class="translatorSection"> 

    <p class="paddedText bg-u-1 blueElement">{{section.TITEL}}</p> 
    <div class="textContainer bg-u-1" 
     ng-repeat="line in section"> 
     <p style="color:grey">{{line}}</p> 
     <textarea class="bg-u-1" ng-model="toContents[getKeys(toContents,$parent.$index)][getKeys(section,$index)]" 
       style="padding: 8px;border-radius: 10px" 
       ></textarea> 
    </div> 
</section> 

điều khiển của tôi:

//Bound to the dropdowns in my case 
$scope.fromSelected = null; //language from wich to start 
$scope.toSelected = null; //language i wish to extend 

$scope.fromContents = null; 
$scope.toContents = null; 

$scope.$watch('fromSelected', function (abbr) { 
    if(abbr) { 
     jsonFactory.getLanguageContents(abbr).then(function (data) { 
      $scope.fromContents = data.data; 
     }); 
    } 
}); 
$scope.$watch('toSelected', function (abbr) { 
    if(abbr) { 
     jsonFactory.getLanguageContents(abbr).then(function(data){ 
      $scope.toContents = data.data; 
     }); 
    } 
}); 

$scope.getKeys = function (array,index){ 
    return Object.keys(array)[index]; 
}; 

$scope.getToValueByKey = function (key){ 
    return $scope.toContents[key]; 
}; 

$scope.apply = function(){    
    jsonFactory.UploadLanguage($scope.toSelected,$scope.toContents) 
     .then(function(data){ 
      alert('update succesfull, please reload') 
     }); 
}; 

Jsonfactory:

function getLanguageContents(lang) { 
     var deferred = $q.defer(), 
      httpPromise = $http.get('languages/'+lang+'.json'); 

     httpPromise.then(function (response) { 
      deferred.resolve(response); 
     }, function (error) { 
      console.error(error); 
     }); 

     return deferred.promise; 
    } 

    function UploadLanguage(lang,content){ 
      return $q(function(resolve,reject){ 
       var xmlhttp, 
        params = 'lang='+lang+'&content='+JSON.stringify(content); 

       if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari 
        xmlhttp = new XMLHttpRequest(); 
       } 
       else { // code for IE6, IE5 
        xmlhttp = new ActiveXObject('Microsoft.XMLHTTP'); 
       } 

       xmlhttp.open('POST', 'http://localhost:63342/website/app/php/translator.php', true); 
       xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 
       xmlhttp.onreadystatechange = function() { 
        if (xmlhttp.readyState === 4 && xmlhttp.status === 200) { 
         var data = xmlhttp.responseText; 
         resolve(data); 
        }else if (xmlhttp.readyState === 4){ 
         reject('not found'); 
        } 
       }; 
       xmlhttp.send(params); 
      }); 
     } 

đọc bạn thư mục với các file json trong javascript vào một số mảng, Đối với mỗi mảng chỉ cần tạo ra một ng-lặp lại sử dụng các trường đầu vào để bạn thấy khóa và tất cả các bản dịch với nó, khi bạn thực hiện thay đổi tạo một nút gửi cho bạn mảng và tên tệp ngôn ngữ tới tập lệnh php này: (tôi chỉ chấp nhận một ngôn ngữ tại thời điểm đó)

<?php 
    header("Access-Control-Allow-Origin: *"); 
    $taal = $_POST["lang"]; 
    $content = $_POST["content"]; 
    $myfile = fopen("../languages/".$taal.".json", "w"); 
    fwrite($myfile, $content); 
    fclose($myfile); 
    echo $taal; 
    echo $content; 
?> 

Nó thực sự rất dễ tạo, tôi muốn thêm nó vào trang web của mình, để mọi người có thể dịch nhưng không bao giờ đến đó.

Tôi không thể cung cấp tất cả mã, nhưng tôi thik điều này sẽ giúp bạn bắt đầu.

Result in webpage

+0

Cảm ơn câu trả lời của bạn. Thật không may, viết một công cụ như vậy của riêng tôi hiện không có tùy chọn. – str

5

Tôi đã không thử nó (chưa) nhưng điều này có thể làm việc: https://github.com/jcbvm/i18n-editor

Được viết bằng Java, vì vậy sẽ (có lẽ hầu hết) làm việc trên máy Mac.

+2

Cảm ơn bạn, tôi sẽ thử điều đó. Ai đó đã downvoted điều này mặc dù nó trả lời chính xác câu hỏi ... – str

+1

Điều này sẽ được đánh dấu là câu trả lời. Cảm ơn. –

Các vấn đề liên quan