3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

言語環境を取得する

Posted at

Coronaでは素直に言語環境を取得するメソッドが無いので(多分。あったら教えてください)、それを無理やり取得する方法です。
英語版とか日本語版とかでテキストやアセットが異なり、かつ別々にバイナリ準備するのが面倒な場合はこんな感じで実装すると便利かと。
拙作のVRITRAでも同じような手法で振り分けを行っています。

main.lua
local lang = "checking...";
local lang_text = display.newText( lang , display.contentWidth/2 , display.contentHeight/2 );


local function getLangListener( event )
	local shouldLoad = true;
	local url = event.url;
	if 1 == string.find( url, "lang:" ) then
		lang = url:sub(6, 7);
		lang_text.text = "この環境の言語は「"..lang.."」ですかね?";
		shouldLoad = false;
	end
	return shouldLoad;
end

local options = { hasBackground=false, baseUrl=system.ResourceDirectory, urlRequest=getLangListener };
native.showWebPopup( 0,0,0,0, "get_language.html" , options );
get_language.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>get_language</title>
</head>
	
<body onLoad="document.getElementById('getlangform').submit();">

<script language="JavaScript">

	function getLanguage() {
		try{
			return ( navigator.browserLanguage || navigator.language || navigator.userLanguage ).substr(0,2);
		}catch(e){
			return "en";	//デフォルトの言語入れておく
		}
	}
	document.write('<form action="lang:'+getLanguage()+'" id="getlangform" ></form>');

</script>

</body>
</html>

処理の流れとしては
言語判定用のhtmlをwebPopupで起動->jsで言語判定->main側にレスポンス->webPopupを自動クローズ
という感じになります。

ちょっとだけトリッキーですが、main.luaの変数lang"ja"やら"en"やらが格納されるはずです。

実際には、様々な言語が入ってくるのが想定されるので**"ja"以外が格納されたら全て"en"**扱いにする。だとか
webPopupの起動に時間が掛かったりするのでちゃんとevent張るとか、裏でこっそり行うとか
する必要があるかもしれません。

そういえば、webPopup内の関数をCorona側から実行する方法ってあるんでしょうかね?
もしあれば、jsに一部処理を委ねることも出来そうなのですけど…。
(単にsocket.io.jsが使いたいだけではある)

3
3
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?