📝
Unity LocalizationのSmart Stringを使ってスクリプトから動的にローカライズテキストを変更する
はじめに
OSSのデスクトップマスコット「uDesktopMascot」を開発しています。
こちらは多言語に対応したプロジェクトにしていくために、unityのLocalizationを使って多言語対応を行っています。
TMPにコンポーネントを付けたシンプルなローカライズ対応の方法を以下の記事にまとめています。
LocalizationデータをGitHub Actions + openaiのapiを使って自動翻訳をするフローを記事にしています。合わせてローカライズ対応のワークフローとしてご覧ください
デモ
(少しわかりずらいですが) 「新しい~」の文言の v{x.x.x}は、versionごとに動的に変更しています。
開発環境
- Unity 6000.0.31f1(IL2CPP)
- Localization 1.5.4
スクリプトからSmart Stringを使う
Localize Tablesの設定
以下のように必要データをLocalize Tablesに追加しているものとします。
Valueは 新しいVerのv{0}が\nリリースされています
になります。
またSmart Stringを使う場合は、以下のようにValueの設定からSmartStringを有効にする必要があります。
テーブル名とキーから LocalizedString オブジェクトを作成
まずはローカライズのテーブルからkeyを指定して、ローカライズデータを取得します。
public static LocalizedString GetLocalizedStringFromTable(string tableName, string key, params object[] arguments)
{
var localizedString = new LocalizedString(tableName, key);
if (arguments != null && arguments.Length > 0)
{
localizedString.Arguments = arguments;
}
return localizedString;
}
LocalizedString オブジェクトからローカライズされた文字列を取得
ローカライズされた文字列の非同期取得で取得して、対象の言語に変更したい値を結合した文字列を返します。
public static async UniTask<string> GetLocalizedStringAsync(LocalizedString localizedString, CancellationToken cancellationToken)
{
try
{
return await localizedString.GetLocalizedStringAsync().ToUniTask(cancellationToken: cancellationToken);
}
catch (Exception ex)
{
Log.Error("ローカライズ文字列の取得中にエラーが発生しました: " + ex.Message);
return string.Empty;
}
}
使用例
使用例は以下のようになります。テーブル名(const定義)とkeyおよび変更したい値のlatestVersion
を渡して、結果をテキストに入れて更新します
private async UniTask SetMessage(string latestVersion,CancellationToken cancellationToken)
{
// LocalizationUtility を使用してローカライズされた文字列を同期的に取得
string message = await LocalizationUtility.GetLocalizedStringAsync(TableName, "MSG_NEW_VERSION",cancellationToken, latestVersion);
// メッセージテキストを更新
messageText.text = message;
}

midra-lab.notion.site/MidraLab-dd08b86fba4e4041a14e09a1d36f36ae 個人が興味を持ったこと × チームで面白いものや興味を持ったものを試していくコミュニティ
Discussion