2014年10月15日

続 Xamarin.Formsでローカライズ

久しぶりですが
Xamarin.Formsでローカライズ
Xamarin.Formsでローカライズ(XAML編)

の続きです。
Xamarin.FormsってタイトルですがXamarin.iOS限定で。

前回・前々回ではString.resxを使った.Net的なローカライズを書きました。(便宜上.Net形式とします)

ですがもともとXamarin.iOS(というかiOSのアプリ)ではApple strings形式(?)なファイルを使ったローカライズがあります。
*.stringsってファイルを作って言語のフォルダ作ってごにょごにょ、って感じです。ググればいくらでも出てくるので割愛。

iOSの部分は上記Apple形式で、共通部分は.Net形式でローカライズしたんですが、ガッツリはまりましたよ。

.Net形式では使用する言語は
System.Threading.Thread.CurrentThread.CurrentUICulture
で切り替えます。(多分)

Apple形式ではどうやら
NSLocale.PreferredLanguages[0]
を使うみたいです。(使っていることがわかるだけ?)

それぞれOSのどこを見るかというと、

iOS Simulator Screen Shot 2014.10.15 18.39.27.png

こんな感じです。
.Net形式は書式変えると言語が変わります。

この仕様が正しいのかどうかしりませんが、Apple形式と.Net形式で見ている設定が違うのは困ったもんです。


ということで AppDelegate.FinishedLaunching の先頭にでも

System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(NSLocale.PreferredLanguages[0]);

でCurrentUICultureを書き換えてやればApple形式と同じ言語を使ってくれます。

めでたしめでたし(?)

posted by ぷにお at 19:16 | Comment(0) | Xamarin | このブログの読者になる | 更新情報をチェックする

2014年09月02日

Bindの順番

WPFでしか確認していなのでカテゴリはWPFですがXAMLのお話。
いつも以上に裏を取っていないのではじめにあやまっておきます、ごめんなさい。
あとコードの埋め込みも面倒なのでスクリーンショットです。最後にプロジェクト一式置いておきます。ごめんなさい。

一つのコントロールの複数のプロパティにデータバインドしている時、どのプロパティからバインドされていくのか、が気になりました。

ということで、DependencyPropertyを二つ持つユーザーコントロールをつくって
Binding1.PNG
Binding2.PNG
プロパティを表示。


データクラスはプロパティが参照された順番を返すようにしておきます。
Binding3.PNG


あとはこんな感じで表示。
Binding4.PNG

リストボックスで選択したデータを表示するようにして、
Row="1"のユーザーコントロールは、Property1=〜,Property2=〜の順に記述。
Row="2"のユーザーコントロールは、Property2=〜,Property1=〜の順に記述。

これを実行すると
Binding5.PNG

こうなります。
もうちょっと見やすく作ればよかったんですが、Row="1"のユーザーコントロールの場合はProperty1,Property2の順にデータのプロパティを参照していますが、Row=”2"のユーザーコントロールはProperty2,Property1の順に参照しています。


ちなみに
Binding6.PNG

こんな感じにRow=”2”を先に書いておくと
Binding7.PNG

Row=”2”のユーザーコントロールからデータのプロパティを参照します。



結論
XAMLに書いた順でプロパティに設定していく(多分)

少し検索してみましたが該当するような説明は私には見つけられなかったので"多分"です。


あまりこういう機会はないと思いますが、SliderのValueとMaximumを両方バインドしたらValueが変わっちゃった、なんてこともあるかもないかも。


プロジェクトはこちら
BindingTest.zip
posted by ぷにお at 13:07 | Comment(0) | TrackBack(0) | WPF | このブログの読者になる | 更新情報をチェックする

2014年06月18日

Xamarin.Formsで実機デバッグが出来なくなった話

多分期間限定な内容だと思います。

現象を箇条書きすると
・Visual Studio 2013でXamarin.Forms使ったiOSアプリを作っている
・Mac上のiOSシミュレータでは問題なくデバッグ可能
・実機でデバッグしようとすると配置でエラー
・MacのXamarin Studioで同じソリューション使うと配置可能

配置時のエラーはこんな感じ。
xamarin.forms.error00.PNG
MT2002:Failed to resolve "Xamarin.Forms.TextCellStyle〜”って出てます。(検索用文字列ということで)

上の文字列で検索するとXamarinのForumでこんなのが
http://forums.xamarin.com/discussion/comment/56841/#Comment_56841

Mapsの話みたいですが、Nugetで最新にしてみたら?とかなんとかって書いてある、、、ような気がします。

ということで、この前作ったローカライズのプロジェクトと今回のプロジェクトを比較してみると
xamarin.forms.error01.PNG
(上が配置に失敗するプロジェクト、下が成功するプロジェクト)

上の1.1.0.6201は2014/6/12リリース
下の1.0.6186は2014/6/4リリース
先ほどのForumで言っている最新バージョンは下のバージョンですね。


ということで試しに下のバージョンを入れてみます。
こんな感じ。
xamarin.forms.error02.PNG


すると、めでたくVisual Studioから実機へ配置ができるようになりました。

Xamarin.Formsは今どんどん新しいバージョンが出ているし、今後どうなるのかもわからないので、2014/6/18時点でのどうにかする方法でした。


続きを読む
posted by ぷにお at 18:00 | Comment(0) | Xamarin | このブログの読者になる | 更新情報をチェックする
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。