爲了本地化我的JavaScript中使用的字符串,我想掃描所有我的js文件中的這樣的字符串。JS Lexer來檢測函數調用
我使用的是t()
函數來請求串的翻譯如下:
t("Hello world");
,或利用動態的部分:
t("Hello @user", {"@user": "d_inevitable"});
欲所有呼叫檢測到t()
功能,因此收集第一個參數包含在php「build」腳本中的字符串,但跳過以下內容:
function foo(t) {
t("This is not the real t, do not localize this!");
}
function bar() {
var t = function(){}; //not the real t either...
}
function zoo() {
function t() {
//This also isn't the real t() function.
}
}
t("Translate this string, because this is the real t() in its global scope");
所以這裏的一個簡單規則是被調用的t函數必須在全局範圍內才能使第一個參數成爲轉換字符串。
作爲一項規則,動態運行時數據作爲第一個參數是不允許的。 t()
的第一個參數必須始終爲「常量」文字字符串。
我認爲php codesniffer將幫助我做到這一點,但是我能找到的所有文檔都是關於強制執行代碼標準(或檢測違規行爲)。我需要更低級別的js詞法分析器。
我的問題是:
- 請問PHP codesniffer的JS詞法分析器可以幫助我解決我的問題?
- 如果是這樣,我該如何訪問該詞法分析器?
- 是否有任何其他的PHP庫可以幫助我找到
t()
的調用?
請不要建議獨立的正則表達式,因爲它們不可能完全解決我的問題。
預先感謝您。
嘿感謝您的詳細想法。所以我必須通過'phpcs'運行嗅探?我可以不通過PHP函數調用直接調用它嗎?我仍然需要詳細瞭解你的想法。也是真的有必要爲此分叉phpcs嗎? –
你絕對不需要爲此分叉PHPCS。只需要回購的本地克隆即可滿足您的所有需求。你實際上不會改變任何PHPCS文件本身。至於直接調用它,你當然可以放棄它。你可能想看看CodeSniffer/CLI.php文件,看看它如何調用各種函數,也可能是CodeSniffer/Standards/Squiz/Sniffs/PHP/CommentedOutCodeSniff.php。即使它是PHP,它仍然顯示如何構造一個字符串並在其上調用核心標記器函數。可能是你需要的一切。 –