Titanium Mobile / Alloyで多言語化対応(i18n)する

Titanium Mobileで多言語化対応したいのでググってたら、どうやらstrings.xmlで指定して、tssで読み込め、viewで指定することは出来ない、とかあった。

でもそんなの面倒だし、viewで指定した方が楽だと思ったので調べていたら、viewで指定できたのでその方法をメモ。
iOSでしか試していないので、Androidで上手くいくかは不明。

strings.xmlとか作らないといけないんだけど、それはココらへんを参考に作って下さい。

viewでの指定方法

<Window id="win1" title='L("en2jp_win")' tabBarHidden="false" exitOnClose="true">

こんなかんじで、文字を埋め込みたい場所にviewで'L("win_title")'と書くだけ。
win_titleのとこは適宜strings.xmlのnameに置き換えてください。

別にtssで指定しなくてもviewで出来ます、というだけの話でした。

Sqlite3で日本語入力する(Mac,Terminal)

Sqlite3で日本語入力しようとすると、入力キャンセルされてしまうというか、日本語を入力した瞬間エラー音とともに文字が消えてしまう。

Sqlite3を直に触る機会が少なくて、使う度に日本語入力の方法をググっているのでメモ。

  • Terminal > 環境設定 > 詳細タブ

f:id:star__hoshi:20140607204021p:plain

にある、

  • Control + V で非 ASCII 入力をエスケープ

をチェックすればOK。入力してみる。

// "オボンのみ" を検索したい。
sqlite> select * from item where item = "\U+00E3\U+0082\U+00AA\U+00E3\U+0083\U+009C\U+00E3\U+0083\U+00B3\U+00E3\U+0081\U+00AE\U+00E3\U+0081\U+00BF";
554|オボンのみ

// タラプのみをinsertしたい。
sqlite> insert into item values(620,"\U+00E3\U+0082\U+00BF\U+00E3\U+0083\U+00A9\U+00E3\U+0083\U+0097\U+00E3\U+0081\U+00AE\U+00E3\U+0081\U+00BF");

日本語を入力した瞬間にエスケープされてしまうけど、検索結果は返ってきてるので、いけてるっぽい。
Sqlite3をいじる時はこれでよさそう。

けど文字コード?がおかしくなってしまってる。 文字エンコーディングUnicode (UTF-8)になってるからUTF-8かと思ったら違うみたいだし、
Unicodeっぽいけど違うし、いろいろ調べたらASCII-8bit?とかいうの出てきたけどよくわからない…。

だれか分かる人いたらおしえてください!!!

TiCameraView ビルドメモ

TiCameraViewを使ってみようと思って、 build.py を動かしたんだけどエラーが出てしまったので対処法を。

Githubの Build and Installation には

$ git clone git@github.com:k0sukey/TiCameraView.git
$ cd TiCameraView
$ ./build.py
Generated be.k0suke.ticamera-iphone-x.x.zip file copy to your Titanium project

と書いてあるけど、./build.pyすると

[WARN] please update the manifest key: 'description' to a non-default value
[WARN] please update the manifest key: 'license' to a non-default value
[WARN] please update the LICENSE file with your license text before distributing
Traceback (most recent call last):
  File "build.py", line 220, in <module>
    build_module(manifest,config)
  File "build.py", line 165, in build_module
    from tools import ensure_dev_path
ImportError: No module named tools

と怒られてしまった。

対処法

サポートBBSに似たような質問があったので、それを参考に。

titanium.xcconfig というファイルがあると思いますが、これをテキストエディタで開いてください。
「TITANIUM_SDK_VERSION」という項目があると思いますが、この項目をお使いのSDKのバージョンに併せて編集してください。
デフォルトだと「TITANIUM_SDK_VERSION = 2.1.3.v20120915120319」になっているかと思います。
例えば3.0.0.GAをお使いであれば「TITANIUM_SDK_VERSION = 3.0.0.GA」としてください。
引用元: TiCordovaのビルドについて | Don't Fall - Titanium Mobileユーザー会サポートBBS

とあったので、
TiCameraView/titanium.xcconfig の
TITANIUM_SDK_VERSION = 3.1.0.GA
TITANIUM_SDK_VERSION = 3.2.2.GA
に書き換えて実行。

[WARN] please update the manifest key: 'description' to a non-default value
[WARN] please update the manifest key: 'license' to a non-default value
[WARN] please update the LICENSE file with your license text before distributing
Build settings from command line:
    SDKROOT = iphoneos7.1

(中略)

** BUILD SUCCEEDED **

warningは出てるけど、Build完了してzipファイル出来たのでコレにて完了ということで。

いつもモジュール使ってばっかりで自分で作れないので、自分で作れるようになりたい。

TiTesseract-for-iOSをインストール&実行

  • Titanium SDK : 3.2.2.GA

数字を認識するアプリを作りたくて、Titaniumで文字認識を行えるモジュールではTiTesseractが良さそうだったので使ってみました。

インストールと実行でちょっと躓いた点があったので、利用方法をメモっておきます。

インストール

GithubのInstallationに一応手順は書いてるのだけど、フォルダ構成がこんなかんじで書かれていて見難かったりするので

Directory or file the following should have been added. . ├── example │ └── tessdata ├── Tesseract.h ├── Tesseract.mm ├── leptonica ├── liblept.a ├── libtesseract_all.a └── tesseract

インストール(モジュールのzipを作る)までをまとめていきます。

必要なもの

以上の4つをダウンロードし、解凍。

1.まず、TiTesseract-for-iOSを解凍したものに、

  • tesseract-ios/Class/Tesseract.h
  • tesseract-ios/Class/Tesseract.mm

の2つをぶっこみます。

Tesseract.hには
#import <UIKit/UIKit.h>
を追加。

2.tesseract-ios-libの中にある、

  • tesseract-ios-lib-master/include/tesseract
  • tesseract-ios-lib-master/include/leptonica
  • tesseract-ios-lib-master/lib/liblept.a
  • tesseract-ios-lib-master/lib/libtesseract_all.a

の4つをまたまたTiTesseract-for-iOSを解凍したものにぶっこみます。
tesseract-ocrはここではまだ使いません。

Build

上記の手順が完了したらTerminalで

cd TiTesseract-for-iOS
python build.py

を事項すると、たぶん

  • net.appios.titesseract-iphone-1.1.0.zip

というファイルが生成されるはずです。
生成されない人は頑張りましょう。

モジュールインストール

モジュールインストールする手順は割愛します、ググって下さい。

使用方法

<module platform="iphone" version="1.1.0">net.appios.titesseract</module>

をtiapp.xmlに記述します。

GithubのUsageとほぼ同じ内容になりますが、以下を.jsファイルに記述します。

var TiTesseract = require('net.appios.titesseract');
var ocrImage = Titanium.Filesystem.getFile(Titanium.Filesystem.resourcesDirectory + '/ocr.png');
var whitelist = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
var lang = 'eng';
var recognizedText = TiTesseract.recognizedText(ocrImage.toBlob(), lang, whitelist);
Ti.API.info("ocr.png -> " +recognizedText);

これで実行すると、
Tesseract couldn't load any languages!
みたいなエラーが出ると思います。

そしたら、ここでtesseract-ocrの出番です。
tesseract-ocrの中にtessdataというフォルダが有ると思います。そのフォルダを Titanium_Studio_Workspace/xxxxxxxx/app/assets/
以下に設置して下さい。

設置し終わったら、実行してみてください。

[INFO] :   ocr.png -> XXMP2X8H62DGPF 78

となるはずです、以上!

Titanium Mobileでnendのicon広告が可能になったので使ってみた

nend見てたら

  • 2014/02/13【SDK】「Titanium module ver1.2.0」 リリース(※アイコンサイズ追加)

の文字が!
ついにTitanium Mobileでもアイコン広告が使えるようになったので早速使ってみました。
ここからDL出来ます。

使い方

といっても使い方はほぼ従来のバナー広告と同じです。
以下にサンプル載せますが、Titaniumモジュールの中にユーザーガイドがあるので、それを引用してちょこっとだけ変更しただけです。

var ad = require('net.nend');
var adHorizontalIconsView = ad.createIconsView({
    spotId: [管理画面より発行されたアイコン型広告枠の spotID],
    apiKey: '[管理画面より発行されたアイコン型広告枠の apiKey]',
    orientation: 'horizontal', // 水平方向
    //orientation: 'vertical', // 垂直方向
    top: 0,
    left: 0,
    width: 320,// 水平方向
    //width: 75,// 垂直方向
    height: 75,// 水平方向
    //height: 300// 垂直方向
});
win.add(adHorizontalIconsView);

pause(),resume()も従来と変わらず使えたので、実装に関しては問題無しでした。

表示結果

表示結果は以下の画像のようになります。 上が水平、下が垂直です。

f:id:star__hoshi:20140214031555p:plain

f:id:star__hoshi:20140214031811p:plain

アイコン型広告と聞いて、アイコンを1つだけ設置みたいなことが可能になると考えていたのですが、4つ並んで表示されてしまうようです…。
しかも水平表示だと右側にスペース空いちゃうっぽい。
75 x 75 が4つならんでるので、 left:10 にするとちょうどいいんだけど、右に10ズレることになります。

アイコンを1つだけ表示したい時は、Viewをかぶせて隠すといった手法をとってもいいのでしょうか。

Markdownを学んだ

で、Markdown学んだので備忘録的なメモ

h1 - h6タグ

シャープの数でhタグを表す

# Title 1  
## Title 2  
### Title 3  

Title 1

Title 2

Title 3

= , - を下に書くのでも大丈夫

Title
=
Title2
-

Title

Title2

p,br

パラグラフは1行開ければOK

こんにちは

こんにちは

こんにちは

brはスペース2個いれる

こんにちは
こんにちは こんにちは

水平線 - hr

---
***
___
- - -




em,strong

* , _ で囲う

*強調*
_強調_
**強調**
__強調__

強調 強調 強調 強調

引用 - blockquote

入れ子にする時は > > 2つつける

> stay foolish
> > stay foolish

stay foolish

stay foolish

code

`var x = 1;`

var x = 1;

複数行の時はタブかスペース4以上いれる

var x = 1;
var y = 2;

ul,ol

ul

* item 1
+ item 2
- item 3
  • item 1
  • item 2
  • item 3

ol - 数字は順番グチャグチャでも全部1でも上から順番にやってくれる

1. item 1
3. item 2
2. item 3
  1. item 1
  2. item 2
  3. item 3

リンク

自動リンク

<http://google.com>
<hoge@hoge.com>

http://google.com
hoge@hoge.com

インラインリンク - 最後のは"Title" はタイトル属性

[Google](http://google.com "Title")

Google

外部参照リンク - タイトル属性は横でも、改行インデントしてもOK

[Google][1]
[1]: http:google.com "title"

Google

画像 - img

![ピカチュウ](http://cdn1.www.st-hatena.com/users/st/star__hoshi/profile.gif?1387477664)

ピカチュウ

タイトル属性でも出来る

![ピカチュウ][2]
[2]: http://cdn1.www.st-hatena.com/users/st/star__hoshi/profile.gif?1387477664

ピカチュウ

画像にリンクを貼る

[![ピカチュウ](http://cdn1.www.st-hatena.com/users/st/star__hoshi/profile.gif?1387477664)](http://starhoshi.hatenablog.com/)

ピカチュウ

インラインHTML, escape

普通にHTMLかいてもいい

<a href="http://google.com" target="_blank">Google</a>

Google

エスケープはバクスラ

\# Title

# Title

Github Microは学生なら2年間無料

Githubプライベートリポジトリが欲しくなったので契約しようと思ったら、学生はMicroプランが無料らしいので登録した。
2年間無料らしくて、3月に卒業するんだけど関係なく2年間いけるっぽくて良い。

で、ポチポチやれば登録できる。


f:id:star__hoshi:20140130134147p:plain

結果2年無料になった、プラン上げても$7引きされるみたい。

学生の皆さん無料なのでやってみてはいかがでしょう。
3月に卒業する人も2年有効みたいなので、卒業前にとりあえず登録しておくといいと思います。

Titanium Studio 3.2にした

titaniumのバージョンを上げた、ListViewを使いたかったため。
ListViewめっちゃ早くていい、ソースも綺麗になる(気がする)。

Titanium Studioも3.2になって、不具合がいくつか出たのでそれについて。

いきなり起動できない

バージョンアップしてとりあえずシュミレータ起動したら

"--ios-version" value "7.0"

みたいに言われて、うわーTitaniumっぽい、暗黒臭がするエラーだ、と思ってググったら

ここで、SDKを3.2.0.GAにしろと言っているので、3.2.0.GAでビルドしたらあっさり成功した。
でももう3.1.3でビルドできなくなってしまった、まあ3.2.0でちゃんと動いているのでいいんだけど、3.2.0で重大なエラーが有った時キツくなるので3.1.3が動かないのはどうなんでしょう。

アイコンのてかりを消す

3.2.0で新しいプロジェクト作ってみて、tiapp.xml見てみたら結構変わっていた。
特にios関係のtiapp.xmlがかなり変わっていて、アイコンのてかりを消す prerendered-icon を探したんだけど無くて、

<key>UIPrerenderedIcon</key>
<false/>

に変わっていた。falseをtrueに変えるとてかりが消えます。
tiapp.xmlはぱっと見ごっそり変わっていたけど、よく見ると書き方が変わっただけなので特に問題なしでした。

また、今まではデフォルトユニットが

<property name="ti.ui.defaultunit" type="string">system</property>

systemだったのが

<property name="ti.ui.defaultunit" type="string">dp</property>

になってたので、Androidも標準でdpになったみたい。

他にも、3.2.0でビルドしたらLabelがずれていたので人によっては修正する必要があると思う。
ここらへんは事象を確認する前に修正してしまったので、特に述べるところはないです。

Titanium Studio 3.2にしてみて

Run/Debug/Packageがまとめられたり、
今までは⌘+Fで検索欄にフォーカスあたっていたのが、検索欄が表示されるだけでフォーカス当たらなくなっちゃったし、
タブ表示のファイル名が縦にでかくなって表示スペース取るし、
タブたくさん開くとタブが圧迫されてタブ名が「...」で見切れちゃうし、
入力ラグが大きくなってるし、
表示項目の間が大きくなってしまってテキスト表示部分が減るし、
iOS5で切り捨て(初代iPadオワタ)だし、
なんか今のところ特に良い点がない気がする…。

Titanium Mobileでボタン連打

個体値検査ずかん for XY で、ボタン連打が効かないと指摘されたので対処。

Androidはもともと連打できたけど、iOSは連打効かなかった。

を参考に、ボタンクリックイベントで

<Button id="levelUpButton" onClick="levelUp">▲</Button>
<Button id="levelDownButton" onClick="levelDown">▼</Button>

onClickから

<Button id="levelUpButton" onTouchstart="levelUp">▲</Button>
<Button id="levelDownButton" onTouchstart="levelDown">▼</Button>

こんなかんじでonTouchstartに変えました、今のところ大丈夫そう。
AndroidもonTouchstartで問題ないっぽい。


はてな記法とかMarkDownとかよくわかんないので覚えないとツラい