右から左に書かれる文章、前後関係でカタチが変わる文字。『FORSPOKEN』のアラビア語ローカライズで行われた9個の工夫【CEDEC2023】

2023.08.31
注目記事ゲームづくりの知識ゲームの舞台裏講演レポートCEDECCEDEC2023ローカライズ
この記事をシェア!
twitter facebook line B!
twitter facebook line B!

国内最大規模のゲーム業界カンファレンス「CEDEC2023」が、2023年8月23日(水)から8月25日(金)までの日程で開催されました。最終日となる8月25日には、スクウェア・エニックス プログラマー 中原 勇氏が登壇し、「FORSPOKENでのアラビア語対応について」と題した講演を行いました。

右から左に書かれる文章や、隣接する文字によっては表示が変わる字形など、数多くの課題に対応する具体的な手法が解説された本講演をレポートします。

TEXT / セレナーデ☆ゆうき

EDIT / 神山 大輝

目次

登壇者紹介、『FORSPOKEN』・Luminous Engineの概要説明

スクウェア・エニックス 第二開発事業本部プログラマー・中原 勇氏。『ファイナルファンタジーⅩⅤ』のPC版や、Google Stadia版の開発などに関わり、その後『FORSPOKEN』のUIやテキスト関連の処理を担当

『FORSPOKEN』は2023年1月14日にPS5・PC向けに発売されたアクションRPG。「アーシア」という異世界に飛ばされた若きニューヨーカー・フレイの旅を描く内容で、魔法の力を利用したパルクールで縦横無尽に世界を駆け抜け、状況に合わせた多種多様な魔法を使って戦略的なバトルを展開します。

『FORSPOKEN』はマルチプラットフォーム対応のハイエンド向けゲームエンジン「Luminous Engine」で開発されていますが、Luminous Engine自体がアラビア語に未対応のため、今回はエンジンの機能レベルでアラビア語に対応する必要がありました。

基本的なテキストシステムと、立ちはだかる壁

Luminous Engineは14言語に対応しており、言語ごとにテキストやフォントを対応する仕様に切り替えることが可能です。また、ヤード・ポンド法やメートル法など、国によって違う測量法についても対応しており、国ごとの数値表記の違いもサポートされています。

しかし、例外がある言語では、別途特別な対応が必要となるケースも存在します。その最たる例が、本講演で扱われるアラビア語。

講演の冒頭では「明るさ設定」を意味する文字列を例に、日本語や英語、そしてアラビア語など、複数言語に切り替えるデモが表示されました。

デモで示されたすべての翻訳テキストが画像の枠内左側に寄っている中、アラビア語テキストのみ右側に寄っている。これは「左から右に文字を読むから」という理由

多くの言語は左から右に文字を入力していきますが、アラビア語は右から左に入力していきます。また、文章の後半(画像の中央)の文字列は隣の文字とつながって表記されています。

なお、Luminous Engineにおける言語の対応としては、アラビア語よりもタイ語のほうがタイミングが後とのこと。こちらも特別な対応が必要な言語とのことだが、本講演では大きくレイアウトが変わるアラビア語にフォーカスを合わせた解説になっている

Luminous Engineをアラビア語に対応させる

Luminous Engineをアラビア語に対応させるにあたって、実装は9つの手順で行われました。中原氏はこれを「戦いの歴史」と述べ、これらの実装について項目ごとに解説を行いました。

1.Unicode Character Databace(UCD)の組み込み

アラビア語を実装する上で最初に行ったのは、それぞれの文字のプロパティを知るためのUnicode Character Databace(以下、UCD)の組み込みでした。今回はUnicodeコンソーシアムの管理するテクニカルサイトに存在するUCDを基に実装が進められています。

アラビア語の対応に必要なUCDは3種類。「UnicodeData」にはUCD内の中心的な情報が内包されており、各文字のプロパティを知ることができます。これがないと「その文字がアラビア語の文字かどうか」という判別が付かないため、必須の項目です。

続いて「BidiMirroring」は、BIDI(バイダイ)処理をした後の鏡像処理に必要な情報です。

最後の「ArabicShaping」は、隣接するアラビア文字が結合する場合に、正しい文字へと置換するための情報です。文字種によって隣接するアラビア文字が繋がってしまう場合に、正しく表記するための情報がこのArabicShapingのデータベースに存在します。

2.双方向テキスト(Bidi)

続いて行われたのは、双方向テキスト、通称BIDIの実装。BIDIはBi-directionalの略称で、双方向という意味があります。日本語や英語などと同じ、左から右に書く記法(LTR)と、アラビア語のように右から左に書く記法(RTL)の混在するテキストを双方向テキストと呼んでいます。

例えば、「1234ABC」という文字を入力した際、日本語や英語は入力した順番通り左から右に並びます。一方、アラビア語のように右から左へ並ぶ言語は「ABC」にあたる文字列が逆転し、「CBA1234」という表記となります。

「1234」はLTR言語の数字のため、右揃えで左から右に1234と表記されます。その後RTL記法に則り、数字のあとに「ABC」が“右から左という順”で入力されます。このような処理を行うのがBIDIです。

2-1.鏡像(BidiMirroring)

BidiMirroringは、BIDI処理後にグリフ(字形・字体などのこと)が正しく表示されるように行われる処理です。ここでは、BidiMirroringのUCDを参照します。

括弧などを扱う際には、日本語などのLTR言語では左側から先に入力します(“[”など)。しかし、RTL言語で同じ入力をしてしまうと、この“[”は右側に来てしまい、“][”で文字列が挟まれる形になってしまいます。これを解決するのがBidiMirroringであり、アラビア語で括弧を使うケースでは必須となるUCDです。

3.コンテキスト依存グリフ

これまでも何度か話題に上がりましたが、アラビア文字は隣接するアルファベットによって結合する可能性があります。このコンテキスト依存グリフの処理では、文字が結合する場合に、正しい文字へと置換することが可能になります。ここでは、UnicodeDataとArabicShapingのUCDを参照します。

コンテキスト依存グリフ処理を行うと、対応前は「ق」「ل」「م」と分かれている文字が「قـلـم」と繋がった形になります。

結合がなくてはアラビア語として成り立たない。このような処理は最低限必要なものであるとのこと

4.合字(Ligature)

合字とは複数の文字を合成して1文字にまとめたもので、「抱き字」や「連字」とも呼ばれます。本講演では、ユリウス・カエサルの表記「Julius Cæsar」の「æ」部分が例として挙げられました。

この合字はアラビア語にも存在するため、対応が必要となります。ここではUnicodeDataを参照して処理を行います。

アラビア語には「لا(ラー)」という文字がありますが、この文字は「ل(ラーム)」と「ا(アリフ)」の合字となっています。実例となる上記スライドでは、合字対応前にはアルファベットの「U」のような形になっている文字が、合字対応後には正しく「لا」の形になっているのが分かります。

この「لا」はNo(いいえ)を意味し、使用頻度が非常に高いとのこと。そのため、合字についても「絶対に対応しなくてはいけない要素」と中原氏は述べています。

5.カシーダ(タトウィール)

カシーダ(タトウィール)とは、アラビア系文字の表記において、単語の横幅を引き伸ばすために使用される連結線のことを指します。可読性を高めるほか強調や装飾にも使われるそうですが、カシーダの有無によって語の意味が変わることはありません。

Unicodeでのコードポイントは「U+0640」となっており、カシーダに関してはこのコードポイントを直接参照して実装されました。

カシーダの対応例。対応前には「ـــم」部分と「قـل」部分が離れているが、対応後には連結している

中原氏によると、これがゲームで使用されることはそう多くないとのことですが、中原氏自身がプライベートで受講しているアラビア語講座のテキストでは「これでもか」と言うほど多用されているそうです。

6.結合文字

複数の文字を1文字にまとめる合字とは逆に、「か」と「゛(濁点)」から「が」を作るように、2つのパーツから1文字を作ることもあります。このとき、先行する文字の後に、組み合わせるようにつくような部分(この場合は濁点)を結合文字と呼びます。結合文字は、UnicodeDataのUCDを参照して実装しています。

対応前(左)と比べると、対応後(右)には語の上下に記号がついているのが分かる。これは母音を表す記号になっており、この母音の発音記号があることで、アラビア語の初学者にとっては可読性が高まる。「結合文字は複数重なったときのルールがあるなど、ちゃんと実装しようとすると奥が深そうな処理です」(中原氏)

7.ゼロ幅非接合子(ZWNJ)

コンテキスト依存グリフの処理により、アラビア文字は隣接した文字によって自動的に連結されるようになっています。一方、連結したくない場合において使われるのが、ZWNJ(Zero Width Non-Joiner)とも呼ばれるこちらのゼロ幅非接合子です。

スペースと似たような働きをしますが、こちらは幅がゼロのため、ZWNJを挟んだ文字がスペースよりも離れないのが特徴です。こちらもUnicodeでのコードポイント「U+200C」を直接参照して使用されます。

同じくアラビア文字をベースとした別言語、ペルシア語にて必要となるそう。「私は欲する」を意味する文章において、「誤」のほうでは序盤(右側)の文字が繋がっているが、ZWNJを挟むことで「正」のように序盤の文字を分割することが可能となる

8.ゼロ幅接合子(ZWJ)

ゼロ幅非接合子とは逆に、本来は結合しない形で表示される文字の後ろにつけることで、結合する形で表示されるのが、こちらのゼロ幅接合子(Zero Width Joiner)です。こちらはコードポイント「U+200D」を直接参照します。

例えば、「アイン(ع)」というアラビア文字アルファベットは、前後の文字によって形が大きく変わります。本来は隣接する文字によってしか変形しませんが、文字単体を変形させた状態で表示したいときなどにこのZWJを用いることがあります。

『FORSPOKEN』など、ゲームで使うことは少ないが、アラビア語学習の際など、アルファベットの説明という点では必ずといっていいほど出てくる表現となる

9.一部多言語で対応していた機能の抑制

アラビア語には、コンテキスト依存グリフ処理で隣接文字が結合されて表示されることや、文字が右から左に書かれるといった、他の言語にはない特徴があります。そのため、アラビア語に対応するにあたって、一部機能が抑制されています。

例えば「テキストのランダマイザ」。これは文字単位で位置をランダムにずらしたり、文字の大きさの倍率を変えたりする機能ですが、隣の文字との繋がりなどの特性が担保できなくなってしまうため、この機能はアラビア語においてはOFFとなるという対応が取られました。

また、「タイプライター的な文字入力の演出」についても、アラビア語ではOFFとなってしまうとのこと。タイピングのシーンなどで見られる、1文字ずつ入力していくような演出ですが、文字の流れる方向が逆であることや、機能との相性が良くないことが理由に挙げられました。

『FORSPOKEN』のアラビア語対応

本作においてアラビア語を実装する際、当初はUI内のテキスト部分のみの差し替えで対応していたと話す中原氏。しかし、ローカライズQAから、アラビア語では不自然だという指摘を多数受け取っていたとのこと。講演の後半では、指摘内容ならびに対応方法が一部紹介されました。

まずは、文字を左詰めから右詰めへと変更。LTR言語の場合は左詰めで違和感がありませんが、RTL言語では右詰めが一般的になります。例えばUIメニューにおいて、左詰めでは違和感となるため、アラビア語対応の過程で右詰め処理を行っています。

UIデータは全言語共通ですが、言語ごとにUIアニメーションを切り替える機能がLuminous Engineに搭載されていたため、デザイナーにはこの機能を利用してもらうことで対応したとのこと。

「いくつかの例外はありつつも、あくまでデータの修正なので、プログラム単位の対応は不要だった」と中原氏は語っています。

単位と数値の表現を逆転

本作では、主に経験値などの表示の際、単位と数値の表現を逆転させています。例えば、「EXP:+3」のような表記は、アラビア語では「3+:EXP」といった表記に変更されています。

こちらも先程と同じく、UIアニメーションのデータをアラビア語専用のアニメーションに修正する形で対応できたとのこと。

今後の課題とまとめ

『FORSPOKEN』のアプリケーション側でアラビア語に対応したものの多くは、UIデータ側での対応にとどまったため、プログラム側の修正は少なかったそう。しかし、その一方でUIデータ修正の工数は決して少なかったわけではなく、その結果ほかの言語に比べてアラビア語対応にかかるコストが高くなってしまった点が課題として挙げられました。

また、タイプライターのような演出などに使える「1文字ずつの表示」という機能にアラビア語が未対応なため、なんらかの形で対応したいと展望が語られました。

講演の最後に、アラビア語対応をするにあたって「何から始めればいいのか分からない」と途方に暮れた中原氏が本件を解決するに至ったきっかけとなる、トニー・グラハム氏著の「Unicode標準入門」という書籍が紹介されました。中原氏は「アラビア語について触れている本はこれ以外おそらく見たことがない」と述べ、この書籍を出版した「翔泳社」が中原氏の前職であったという素晴らしい縁のカミングアウトと共に本講演を締めくくりました。

『FORSPOKEN』公式サイトFORSPOKENでのアラビア語対応について - CEDEC2023
セレナーデ☆ゆうき

ゲームのタイムアタックを中心に、ストリーミングサイト・Twitchで活動をしているストリーマー。ゲームイベントの紹介記事など、WEBメディアでの活動実績もあるが、繰り出されるダジャレのクオリティには賛否両論がある。

https://www.twitch.tv/serenade_yuuki

関連記事

バンダイナムコスタジオ、「CEDEC2023」から6セッションの動画を公開。インタラクティブミュージック作曲の舞台裏や、『BLUE PROTOCOL』のAI実装など
2024.04.01
CEDEC2024セッション講演者の公募が受付開始。締切は4/1まで。「CEDEC ゲーム開発技術ロードマップ2023 年度版」も公開
2024.02.01
カプコン技研の開発者がCEDEC2015からCEDEC2018にて登壇したセッション資料がDocswellにて公開
2024.01.22
ユニティ・テクノロジーズ・ジャパン、『CEDEC2023』4講演の動画・スライドをUnity Learning Materialsに公開。CEDECのYouTubeチャンネルで未公開の『推論ライブラリを実装する』など
2023.12.27
バンダイナムコスタジオが『CEDEC2023』での講演資料を公開。『BLUE PROTOCOL』の AI 実装やインタラクティブミュージックなどジャンルも多様な6セッション
2023.12.20
ゲームフリークによるSplunk活用術。ジョブ利用状況の可視化やログの自動収集により、Jenkinsのデータ分析を強化【CEDEC2023】
2023.12.14

注目記事ランキング

2024.04.22 - 2024.04.29
1
【2022年5月版】今から始めるフォートナイトの「クリエイティブ」モードープレイ開始から基本的な操作方法まで解説
2
フォートナイト クリエイティブとUEFNで使える仕掛け一覧
3
『フォートナイト』で動く本格的なゲームが作れるツール「UEFN」とは?従来のクリエイティブモードから進化したポイントを一挙紹介!
4
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.1「アイテム系」
5
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.5「島の設定」
6
【CHALLENGE1】「クリエイター ポータル」を使って、UEFNで作成した島を世界中に公開する
7
フォートナイトとUEFNがv29.30にアップデート。すでに公開した島をプレイできないようにする機能が導入される
8
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.7「NPC系」Part1
9
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.4「ゲームシステム系」
10
まるで『マイクラ』?ボクセル地形を生み出す無料アセット「VoxelPlugin Free」で”地形を掘ったり積み重ねたり”して遊んでみよう
11
UEFNで使えるプログラミング言語「Verse」のノウハウが集結。『UEFN.Tokyo 勉強会 03 Verse Night』レポート
12
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.2「ユーティリティ系」
13
フォートナイトとUEFNがv29.20にアップデート。見下ろし視点でもプレイヤーキャラクターの向きを操作できるようになった
14
【STEP2】UEFNの基本的な使い方を覚えよう
15
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.6「チーム・対戦系」Part1
16
フルカラー書籍「UEFN(Unreal Editor For Fortnite)でゲームづくりを始めよう!」、ついに本日発売!全国書店で好評発売中!
17
【CHALLENGE2-1】フレンドと一緒にゲームを作ろう――UEFNプロジェクトをチームメンバーとリアルタイムで共同編集する
18
『フォートナイト』で建築ビジュアライゼーション!?UEFNでオリジナルの世界観をどう作り上げたか、その手法を解説【UNREAL FEST 2023 TOKYO】
19
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.10「UI系」Part1
20
【CHALLENGE3】UEFNの機能「ランドスケープ」を使ってオリジナルの地形を作る
21
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.8「ゾーン系」
22
「UEFN」って実際どうなの? 編集部が3時間で「みんなで遊べるアクションゲーム(?)」を作ってみた
23
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.9「建築物系」Part1
24
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.10「UI系」Part2
25
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.3「プレイヤー系」
26
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.7「NPC系」Part2
27
【STEP4-2】リスポーンとチェックポイントの仕組みを作る
28
【STEP4-1】コース外に出たらデスする仕組みを作る
29
【STEP3】オリジナルのアスレチックコースを作ろう
30
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.9「建築物系」Part2
VIEW MORE

イベントカレンダー

VIEW MORE

今日の用語

乱数
ランスウ プログラムにおいてランダムに生成される数値。アルゴリズムによって導かれ、実際には完全なランダムではないため疑似乱数とも呼ばれる。
VIEW MORE

Twitterで最新情報を
チェック!