UE5のプラグインをテキストローカライズする方法

# はじめに

UE5のプラグインをテキストローカライズする方法の解説
プロジェクトをローカライズする為のローカライゼーションダッシュボードはプロジェクトのみ対応しているので個別にやる必要があります。

https://github.com/laycnc/UEPluginLocalizeTest

テストでローカライズ設定をしたプロジェクトを用意したので参考にしてください。
UE5.6で動作検証をしています

> ※ iniの設定なしの場合には動作未検証なので注意してください

# 実装方法

```json-doc:プラグイン名.uplugin

{
	"FileVersion": 3,
	"Version": 1,
	"VersionName": "1.0",
	"FriendlyName": "UEPluginLocalize",
	"Description": "",
	"Category": "Other",
	"CreatedBy": "",
	"CreatedByURL": "",
	"DocsURL": "",
	"MarketplaceURL": "",
	"SupportURL": "",
	"CanContainContent": false,
	"IsBetaVersion": false,
	"IsExperimentalVersion": false,
	"Installed": false,
	"Modules": [
		{
			"Name": "UEPluginLocalize",
			"Type": "Editor",
			"LoadingPhase": "Default"
		}
	],
    // この設定がないとローカライズのテキストが読み込まれない
	"LocalizationTargets": [
		{
			"Name": "UEPluginLocalize",
			"LoadingPolicy": "Editor",
			"ConfigGenerationPolicy": "Auto"
		}
	]
}
```

upluginに`LocalizationTargets`設定する事でローカライズテキストの読み込み設定が行われます。


### [LoadingPolicy](https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Runtime/Projects/ELocalizationTargetDescriptorLoa-)

|ラベル|説明|
|:-|:-|
|Never|ローカライゼーションデータが自動的に読み込まれることはありません。|
|Always|ローカライゼーションデータは常に自動的にロードされます。|
|Editor|エディター実行時にのみローカライズデータがロードされます。|
|Game|ゲーム実行時にのみローカリゼーションデータがロードされます。|
|PropertyNames|エディターがローカライズされたプロパティ名を表示している場合のみ、ローカライゼーションデータがロードされます。|
|ToolTips|エディターがローカライズされたツールチップを表示している場合のみ、ローカライズデータがロードされます。|

### [ConfigGenerationPolicy](https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Runtime/Projects/ELocalizationTargetDescriptorLoa-)

|ラベル|説明|
|:-|:-|
|Never|このローカライゼーション ターゲットにはローカライゼーション コンフィグ ファイルが関連付けられておらず、ローカライゼーション パイプライン中にローカライゼーション コンテンツ ファイルは生成されません。
|User|ユーザーがこのローカリゼーション ターゲットのローカリゼーション コンフィグ ファイルを提供しており、ローカリゼーション ターゲットのローカリゼーション コンテンツ ファイルの生成に使用されます。|
|Auto|ローカリゼーション パイプライン中に一時的なローカリゼーション コンフィグ ファイルが生成され、ローカリゼーション コンテンツ ファイルが生成されます。|


## Userの場合の設定例

```ini:プロジェクト/Plugins/プラグイン名/Config/Localization/プラグイン名.ini
;METADATA=(Diff=true, UseCommands=true)
[CommonSettings]
SourcePath=%LOCPROJECTROOT%Plugins/プラグイン名/Content/Localization/プラグイン名
DestinationPath=Plugins/プラグイン名/Content/Localization/プラグイン名
ManifestName=プラグイン名.manifest
ArchiveName=プラグイン名.archive
PortableObjectName=プラグイン名.po
ResourceName=プラグイン名.locres
# デフォルトの言語設定
NativeCulture=en
# ここに必要な言語設定を行う
CulturesToGenerate=en
CulturesToGenerate=ja

[GatherTextStep0]
CommandletClass=GatherTextFromSource
SearchDirectoryPaths=Plugins/UEPluginLocalize/Source/
FileNameFilters=*.cpp
FileNameFilters=*.h
FileNameFilters=*.c
FileNameFilters=*.inl
FileNameFilters=*.mm
FileNameFilters=*.ini
ShouldGatherFromEditorOnlyData=false

[GatherTextStep1]
CommandletClass=GenerateGatherManifest

[GatherTextStep2]
CommandletClass=GenerateGatherArchive

[GatherTextStep3]
CommandletClass=InternationalizationExport
bImportLoc=true

[GatherTextStep4]
CommandletClass=GenerateTextLocalizationResource

[GatherTextStep5]
CommandletClass=InternationalizationExport
bExportLoc=true

```

```bat
UnrealEditor-Cmd.exe プロジェクト名.uproject -run=GatherText -config="Plugins\プラグイン名\Config\Localization\プラグイン名.ini"
```

ConfigGenerationPolicyがUserの場合には上記のコマンドライン実行で動作できます。


<details><summary>失敗例</summary>

プロジェクト名.uprojectを未設定の場合にはプロジェクトディレクトでは無くエンジンディレクトに生成されました。  
プロジェクト.uproject未指定の方法もあるかもですが未検証です

</details>


# 参考箇所

本件を調べるにあたってエンジンの参考箇所の一覧です。

> FPluginManager::GetLocalizationPathsForEnabledPlugins

↑の箇所でプラグインが条件を満たしている場合にテキストローカライズのパスを追加するコードが記述されています。


> UE_5.6\Engine\Plugins\Online\OnlineSubsystem\Config\Localization\OnlineSubsystem.ini

ローカライズの設定の参考にしたもの