ReactivePropertySlimをMessagePackに対応させてみた(仮)

ReactivePropertySlimをMessagePackに対応させるためのカスタムリゾルバを書いたよ
ReactivePropertyModeが外部から読めないのでデフォルト値オンリーになってます
ReactivePropertyの修正がきたら書き換えるよ


ReactivePropertySlimResolver

非同期で作成したインスタンスをReactivePropertyに

非同期ファイル読み込みで作成したインスタンスをコンストラクタでプロパティにセットするのに手間取ったのでメモ

public ReadOnlyReactivePropertySlim<Setting> Config { get; }

public App()
{
    Config = Observable.FromAsync(() => Setting.LoadAsync()).ToReadOnlyReactivePropertySlim();
}

こうするだけで、Settingクラスの非同期ファイル読み込みの結果をConfigプロパティにセットできます。

XamarinでPickerにEnumをバインドするよ

XamarinでPickerにEnumをバインドしようとしたんだけど、軽くつまずいたんでメモ
alexdunn.org
で99%うまくいくんだけど、このままだとコンバーターが働かないので、Viewを書き換えます。
修正したコードをgistに公開しました。
XamarinでPickerにEnumをバインド

コンバーターをStaticResouceで呼ぶようにするとちゃんと動きました。
SelectedIndexをEnumにコンバートしているから、Enumが0からの連番になっていないとうまく動かないよ。
Enumが特殊な場合は自分で工夫してね。

XamarinでContentPage.Iconを共通のファイルに変更

XamarinでContentPage.Iconを共通プロジェクトからのファイルに変更する方法がわかったよ
Imageのほうは先人の知恵にしたがってね
www.project-respite.com

残念ながらContentPage.Iconは同じ方法が使えないので一工夫いるよ
まず共通プロジェクトの適当な場所に「埋め込みリソース」で元画像ファイルを追加してね
そこから、「Andoroid iOS」それぞれのプロジェクトに「追加」-「既存の項目」で元画像ファイルを「リンクとして追加」すると、元画像ひとつでそれぞれのアイコンとして使えるよ
くわしくは
matatabi-ux.hateblo.jp
を参考にしてね。たぶんImageでも使えるよ。

Transifex でリソースを翻訳しよう

Transifex https://www.transifex.com/ でリソース翻訳できるんだってー 「マジで?」というようなのでやってみました

1.Transifexのアカウントをとろう
grabacr.net
を参考にアカウントをとってリソースファイルを上げておきましょう

2.Transifexで機械翻訳を使うためにMicrosoft Translator APIを使えるようにしよう
MicrosoftGetting Started with Microsoft Translatorという解説ページを作ってくれているのでありがたく参考にしてAPIキーを参照できるようにしましょう
身元確認のために無料プランでもクレジットカード情報が必要です。カードがない人はあきらめてください。

3.Transifexで機械翻訳を使えるようにしよう
Transifexの組織名のところをクリックしてそこから出てくる「組織の設定」をクリックして左側のメニューに出てくる「機械翻訳」をクリックしよう
機械翻訳サービス 」から「Microsoft Translator Text API」を選択して下のテキストボックスにAPIキーを入力し、「変更を保存」ボタンを押しましょう

4.翻訳してみよう
ダッシュボードをクリックして左側メニューの「言語」をクリックして「言語の編集」ボタンを押して翻訳する言語を追加しましょう
f:id:reniris:20180215002019p:plain
追加したら翻訳するファイルをクリックして「翻訳」ボタンをクリックして翻訳ページへ遷移しましょう
f:id:reniris:20180214233221p:plain
真ん中辺りにあるチェックボックスをチェックして「機械翻訳」ボタンを押すと、チェックされた語が機械翻訳されます
言語が機械翻訳に対応してないとボタンが押せないので気をつけてください(zhは対応していませんでした。zh_CNは対応していました。)
f:id:reniris:20180215002726p:plain

3.ファイルをダウンロードしよう
f:id:reniris:20180214233221p:plain
翻訳ファイル名をクリックして出てくるポップアップメニューから「利用のためにダウンロード」をクリックすればダウンロードできます。
f:id:reniris:20180215003549p:plain
そのままだとプログラムでは使いにくいので、いい感じにファイル名を変更しましょう。

Xamarinで文字列リソース使うよ

Xamarinで文字列リソース使おうとして地獄を垣間見たのでメモ

最初に
grabacr.net
を元に Resource.resxとResourceService.csを作成
しかし表示できない

悩んだ末に
blog.pieeatingninjas.be
を参考に

public string this[string key]
    {
        get
        {
            return ResourceManager.GetString(key, CurrentCultureInfo);
        }
    }

をResourceService.csに追加

XAML

<Label Text = "{Binding Source={x:Static m:ResourceService.Current}, Path=[Result], Mode=OneWay}" />

ソースコードでは

 var str = ResourceService.Current["Result"];

でキー「Result」が使えます。

最終的に使ったResourceService.csをGistに貼りました。

C#で漢数字表記

QiitaでC#での漢数字表記の記事を書きました

qiita.com