- 非同期性はありません。 私はnvimがあることを知っています-しかし、それはそれほど速く、それほどスムーズに動作しません
- プラグインを書くのが難しい。 もちろん、さまざまな達人にとっては論争の的です。しかし、率直に言って、既に実装されている「自転車」には、「おridge」、モジュール性の欠如、何らかの構造性があります。
- あまりにも多くのvimプラグインが起動した場合、長い間正直である必要があり、それが悩ましい
主な趣味であるAndroid Studioも使用しています。 システムリソースのこのIDEに非常に飢えているため、プロセッサは別のgradle assembleDebugサイクルの処理に夢中になります。
Visual Studio Codeは懐疑的でした。 プロジェクトの大規模な構造とともに、起動速度を驚かせた最初のこと。 インスタントファイル検索と多くのプラグイン、Sublimeに似た優れたプラグインマネージャー。 最小プロセッサ負荷。
Android Studioでは、 strings.xmlリソースを他の言語に翻訳するという1つの便利な機能が長い間欠けていました。 前にこれを行うことは非常に不便でした:
- テキストを選択
- コピー
- オンライン翻訳者に行く
- テキストを貼り付け
- 現在の翻訳言語を選択
- 翻訳する言語を選択してください
- 翻訳をコピー
- 結果のstrings.xmlを開きます
- 翻訳を貼り付け
私が望んだもの-すぐに結果を得るための1つのキーの組み合わせ。
正直なところ、私はvim用の同様のプラグインをすぐに探していましたが、すぐに見つかりましたが、その実装は時代遅れで関連性が高いようです。
Visual Studio Codeには独自の市場があります。 翻訳プラグインの検索で1つの結果が得られましたが、私が想像した翻訳者ではありませんでした。繁体字から簡体字への翻訳は、どういうわけか私の要求にあまり合いませんでした。
そこで、独自のプラグインの実装を開始しました。 私は主な問題の解決に役立つサービスを探して始めました-テキストを翻訳します。 幸いなことに、 translate.yandex.ruはそのようなサービスであることが判明しました。
加えて、node.jsのパッケージマネージャーが、Yandex Translateサービス用の実装済みモジュールをすぐに見つけたという事実もありました。
さて、Visual Studio Codeのプラグイン自体を記述することは残っています。
基本構造と説明は十分に文書化されており、実装の準備に困難はありませんでした。
TypeScriptは私にとっては新しいものでしたが、それ以前は会計統計に十分な規模のプロジェクトに純粋なnode.jsを使用していました。
私は困難だった瞬間に専念します。 node.jsでは、プロセスを非同期的に処理するために、 非同期ライブラリを使用すると便利です。 async.mapメソッドは非常に便利で、処理する必要があるデータの配列を転送し、出力で結果の配列を取得できます。
このケースは次のようになります。
var async = require('async'); async.map(['test1','test2','test3'], test, function(err, results){ console.log(results); }); function test(item) { return item; }
同様の構造が必要な理由-選択した行の配列を翻訳機能に転送し、それぞれを翻訳して、タグ間のターゲット行を結果に置き換える
<item>string to translate</item>
これらは、Androidプロジェクトのstrings.xml文字列リソースにあります。
しかし、判明したように、 Promiseを使用できます。
async function processData(data: any[]) { const promises = data.map(async (item) => { await doSomeAsyncStuff(item); // `item` }); await Promise.all(promises); // } async function doSomeAsyncStuff(value) { return new Promise((resolve, reject) => { // setTimeout resolve() reject() promise () }); }
それが与えたもの-結果として、node.jsの非同期パッケージをプルアップする必要がなかったため、プラグインのサイズは2MB減少しました
プラグインを実装する過程で、問題に遭遇しました-デバッグモードではすべてが完全に機能しました。 プラグインを組み立てたとき、私はそれをスタジオの市場に急いで投入しました。 これを行う方法は、 指示にゆっくりと説明されています 。
原因-拡張機能コマンドの実行時のエラー: 「拡張機能にアクティベーションイベントがない可能性があります。」
なぜこれが起こったのか-システムは、メインコードのファイルとカスタムpackage.json拡張ファイルに書き込まれたアクションコマンドの名前を見つけることができませんでした。 実際、すべての名前は同じでした-ポイントは、初期化に失敗した古いノード非同期を使用して間違った非同期ライブラリを最初にプルしたことでした。 その結果、Promiseの使用により、両方の非同期ライブラリが依存関係から削除されました。
実施結果
Visual Studio Codeを起動し、Ctrl + Pを押して「ext install yandex-translate」を貼り付けます。 インストール後、スタジオは「リロード」を提供して、シェルに拡張機能を適用します。 再起動後、何でも翻訳する必要のあるファイルを取得し、F1を押し、Yandex翻訳選択を選択するか、Ctrl + tを押します。
Ctrl + Shift + TまたはF1-> Yandexのキーの組み合わせを使用して、どの言語からどの言語に翻訳するかを指定できます
strings.xmlファイルで、必要な行を強調表示し、Ctrl + alt + tの組み合わせを押すと、要素で囲まれたすべての行の翻訳が得られます。
<item>string to translate</item>
念のため、Yandex Api Keyの変更を実装しました。同じキーを使用して、突然、限られた数の転送を行うことができます。 その後、キーを独自のものに変更することが可能になります。
それだけです! 成功した翻訳。
参照:
ビジュアルスタジオコード
Visual Studio Codeの拡張システムの説明
市場でのyandex-translate拡張機能
Github yandex-translate拡張プロジェクト