読者です 読者をやめる 読者になる 読者になる

フニゲの開発日記

Electronとか...

とりあえずネイティブメニュー

Electron
// main.js
app.on('ready', function () {
    createWindow();
    installMenu(); // 追加
});
...
function installMenu() {
    var menu = Menu.buildFromTemplate([
        {
            label: 'MyApp',
            submenu: [
                { label: 'About MyApp' },
                { label: 'Quit MyApp',
                  accelerator: 'Command+Q',
                  click: function() {
                      app.quit();
                  }}
            ]
        },
        {
            label: 'View',
            submenu: [
                { label: 'Toggle Status Bar',
                  accelerator: 'Command+Option+S',
                  click: function() {
                      if (win) {
                          win.webContents.executeJavaScript('toggleStatusBar();');
                      }
                  }}
            ]
        },
        ...
    ]);
    Menu.setApplicationMenu(menu);
};

//myapp.js
function toggleStatusBar() { $("#statusBar").toggle(); }

 Electronはメインプロセスとレンダラプロセスの2種類のプロセスがある。
 app.quit()みたいなメインプロセスのメソッドは直接呼び出せばいいし、レンダラプロセスのメソッド(上の例だとtoggleStatusBar())は、executeJavaScriptで呼び出すのが簡単だと思う。

 どうせすぐにipcでプロセス間通信することになるんだけど。

 メニューなんだから多言語化もやりたいところ。何か正式なやり方があるような気もするけど、とにかく簡単に。

// main.js
function getLocaleFunc() {
    var dic = {
        "ja": {
            "About MyApp": "MyApp について",
            "Quit MyApp": "MyApp を終了",
            "View": "表示",
            "Toggle Status Bar": "ステータスバー",
            ...
        },
        ...
    };
    
    var locale = app.getLocale();
    for (var x in dic) {
        if (locale.indexOf(x) == 0) {
            return function(str) { return dic[x][str] || str };
        }
    }
    return function(str) { return str };
}

var L = getLocaleFunc();

 こんな感じで翻訳用の関数を作っておいて、文字列をL()で囲っておくとか、そんな感じでいいのではないかと。

広告を非表示にする