2

내 Chrome 확장 프로그램 내에서 사용 가능한 모든 번역 목록을 검색하는 방법이 있습니까?Chrome 확장 프로그램에서 사용 가능한 로켈 번역 목록을받을 수 있습니까?

예를 들어, 내 응용 프로그램은 다음과 같은 폴더를 포함 할 수 있습니다 :

_locales\en\messages.json 
_locales\fr\messages.json 
_locales\es\messages.json 

en, fres 확장 자체 내에서의 것을 알 수있는 방법이 있나요?

두 번째 질문은 특정 messages.json 파일을 JSON 데이터로 구문 분석 할 수있는 방법이 있습니까? chrome.i18n.getMessage()이 제공하는 것보다 조금 더 많은 기능을 의미합니다. 두 질문에

답변

4

예를 확장 자신의 폴더를 읽을 수있는 능력 덕분에 :

chrome.runtime.getPackageDirectoryEntry(function callback)

는 패키지 디렉토리에 대해 DirectoryEntry를 돌려줍니다.

예를 들어, (자신의 오류 검사를 추가, 탄력없는) 이런 식으로 로케일을 나열 할 수 있습니다 마찬가지로

function getLocales(callback) { 
    chrome.runtime.getPackageDirectoryEntry(function(root) { 
    root.getDirectory("_locales", {create: false}, function(localesdir) { 
     var reader = localesdir.createReader(); 
     // Assumes that there are fewer than 100 locales; otherwise see DirectoryReader docs 
     reader.readEntries(function(results) { 
     callback(results.map(function(de){return de.name;}).sort()); 
     }); 
    }); 
    }); 
} 

getLocales(function(data){console.log(data);}); 

, 당신은 messages.json 파일의 FileEntry를 얻기 위해 이것을 사용할 수 있습니다 그것을 분석합니다.
편집 : 또는 폴더 이름을 알면 Marco's answer에 설명 된대로 XHR을 사용할 수 있습니다. 사용자가 사용하는 현재 로케일이 무엇인지 알고

+0

감사합니다. 오류 검사에 관해서는, 나는 그것에 대한 좋은 문서를 찾지 못하는 것 같습니다. 'root.getDirectory()'라고 말하면, 에러가 났을 때 호출 된'errorCallback' (또는 건너 뛴 마지막 매개 변수) 매개 변수는 무엇입니까? – c00000fd

+0

내 자신의 질문에 답하기 위해'errorCallback' 또는'root.getDirectory()'의 마지막 매개 변수에는 오류에 대한 정보가있는 두 가지 편리한 속성 인'message'와'name'이 있습니다. – c00000fd

+0

@ Xan의 코드 예제가 불완전하기 때문에 업데이트 만해도 답변으로 표시 할 수 없습니다. 누군가가 관심이 있다면 다음은 작동 예제입니다. https://developer.mozilla.org/en-US/docs/Web/API/DirectoryReader#example – c00000fd

1

, 당신은이 작업을 수행 할 수 있습니다

currentLocale = chrome.i18n.getMessage("@@ui_locale"); 

지금 currentLocale"en" 또는 "fr" 또는 wathever는 사용자가 사용하는 로케일과 같이 될 것입니다. 이제이를 사용하여 로케일 별 URL을 빌드 할 수 있습니다.

사용하려면 당신의 messages.json 당신이 할 수있는 자바 스크립트 객체로 :

  1. JSON.parse() 방법을 사용하여 객체에 컨텐츠를 구문 분석 현재 로케일에게 XMLHttpRequest
  2. 를 요청 messages.json 파일을 가져옵니다. '

    var currentLocale = chrome.i18n.getMessage("@@ui_locale"), 
        xhr = new XMLHttpRequest(), 
        messages; 
    
    xhr.open("GET", "/_locales/"+currentLocale+"messages.json", false); 
    xhr.send(); 
    
    messages = JSON.parse(xhr.responseText); 
    
    // now you can access the messages like this: 
    alert(messages["hello"].message); 
    

    을 그리고 당신이 좋아, 이제 파일을 얻기 위해 XHR을 할 것입니다

    { 
        "hello": { 
         "message": "Hello world!", 
         "description": "Sample text used for testing." 
        } 
    } 
    

    뭔가를 :

의가이 같은 messages.json 파일을 가지고 있다고 가정 해 봅시다 메시지 알림을 보게됩니다.

관련 문제