2017年1月26日木曜日

Picmvr 0.72を公開した / WPFアプリのローカライズ

0.72では細かい修正のほかに、英語版を追加した。このとき発生したローカライズ作業について書いておく。

WPFアプリをローカライズするときは、言語リソースをサテライトアセンブリとして配布するのが普通だと思う。アセンブリはResource.resxのテーブルに書いてVSで作る方法や、使ったことはないがLocBamlというツールを使って生成する方法などがある。

しかし、今回Picmvrでは、とにかくローカライズの手間を減らしたかったのでサテライトアセンブリを作らなかった。どれくらい手間を減らしたかったというと、言語リソースファイルすら一つも作りたくなかった(特に言語リソースの文字列それぞれのリソース名を考えたり見るのが苦痛で、匿名リソース的なものにできないかと考えていた)。

そこで、今回C#とXAMLの文字列リテラルを擬似的に多言語化して記入することにした。これはText="$りんご$Apple"的な記法を使う。そしてC#とXAMLに対応したプリプロセッサ的なツールを作り、そのソースコード内のリテラルをビルド時に解決するというやり方をしてみた。一応うまくいったようだ。

ローカライズ情報がC#とXAMLコード内に完全におさまるので、翻訳の分業には全く向かないが、プログラマが一人でプログラミングと全翻訳を担当するケースであれば作業効率の点でなかなか良いかもしれない。プリプロセッサ的なツールの設計・実装からローカライズまで短時間でできた。いつものようにソースコードを書くだけで、翻訳テーブルを広げて編集するような手間は発生しない。

配布アプリは、言語リソースがなく、EXEファイルに言語情報が完全に含まれる非グローバルなアプリと同じような構成になる。そしてVSのソリューション構成の方に別言語が追加される。

ビルドのたびにローカライズ処理が発生するのが難点。またBlendなどでのデザイン編集がとてもやりにくくなる。

ダウンロード:

9 件のコメント:

  1. 数年、Picmvrを使わせてもらっています、
    良いソフトですね、ひとつ要望があります
    転送後の属性を読み取り専用にしたいのです。
    ぜひ、対応をお願いいたします。

    返信削除
    返信
    1. コメントありがとうございます。読み取り専用属性のご要望ですが、便利なシチュエーションもありそうですので検討したいと思います。

      削除
  2. picmvrを使わせていただいております
    撮影日付の入っていないファイルをドロップすると動作を停止してしまいます
    対策をお願いします

    返信削除
  3. 撮影日付の入っていないJPEGファイルをドロップしてみましたが、再現しません。
    できれば詳しい情報(障害の起きたファイル、命名ルール設定、全体的な設定)などを頂ければ幸いです。

    返信削除
    返信
    1. このコメントは投稿者によって削除されました。

      削除
    2. ファイル名はPhoto_Dima_01等、ごく一般的なファイル名です
      命名ルールはG:\Users\xxxx\Pictures\gra\checked\%Y%m\%o
      全体設定は初期設定のままだと思います
      撮影月でフォルダー分けをしているのでその部分が問題なのでしょうか?
      スルーするか、ユニークなフォルダー名で分けてもらえるとありがたいです

      削除
    3. コメントありがとうございます。情報をいただけて助かります。

      さて撮影月でフォルダー分けするのは問題ありませんが、命名ルールの「G:\Users\xxxx\」や「G:\Users\」への書き込みアクセス許可は大丈夫でしょうか。ここのアクセス許可がないと、現バージョンのPicmvrは必ず動作を停止します(←この問題を修正したver.0.77をさきほど上書きリリースしましたので、よろしければお試しください)。
      この場合Picmvrを管理者権限で実行するとうまくいくかもしれません。

      ところで、「撮影日付の入っていないファイル」とは、具体的には「EXIFヘッダがない、もしくはEXIFヘッダに日付が記録されていないJPEGファイル)という理解でよろしいでしょうか?
      逆に撮影日付の入っているファイルでは、エラーなくコピーできるのでしょうか?

      なお、Picmvrは撮影日付の入っていないファイル(=EXIFヘッダに撮影情報がないファイル)は、タイムスタンプを撮影日として扱います。

      ついさきほど再リリースしたver0.77では、書き込みアクセス許可のないフォルダにコピーしようとした場合に、動作停止していたのを、エラーメッセージウィンドウ表示に変更しました。

      削除
    4. アクセス許可は問題ありません
      管理者権限で起動するとドロップが出来ません
      撮影日付が入ってないファイルでもタイムスタンプで仕分けが可能なものがあったりしました
      相変わらず幾つかのファイルで停止していました

      何度も再起動が面倒臭くなったので、Ralphaでjpg>jpgの画像変換をしたら全部いけました
      お騒がせしました

      削除
  4. 了解しました。
    さしつかえなければ、その必ずエラーの発生するJPEGファイルをメールか何かで頂けるとうれしいです。

    返信削除