88 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
---
 | 
						||
title: UE4 本地化
 | 
						||
date: 2021-02-05 13:55:15
 | 
						||
tags: 
 | 
						||
rating: ⭐️ 
 | 
						||
---
 | 
						||
## 参考
 | 
						||
https://gameinstitute.qq.com/community/detail/123008
 | 
						||
https://blog.csdn.net/u010385624/article/details/89705285
 | 
						||
 | 
						||
视频:
 | 
						||
- UE4 多语言本地化制作思路:https://www.bilibili.com/video/av96177350
 | 
						||
- Localizing Action RPG Game | Inside Unreal:https://www.youtube.com/watch?v=UD2_TEgxkqs
 | 
						||
 | 
						||
 | 
						||
## 代码中的操作
 | 
						||
在源文件中(CPP文档中),我们的本地化操作需要借助FText(FText本身就是为了解决显示信息的本地化而构建)进行操作,FText的创建方式有两种
 | 
						||
 | 
						||
01.声明文本空间宏方式构建
 | 
						||
.cpp 顶端
 | 
						||
```c++
 | 
						||
//引号内容可以随意
 | 
						||
#define LOCTEXT_NAMESPACE "UECppTest"
 | 
						||
.cpp 底端
 | 
						||
```
 | 
						||
```c++
 | 
						||
//放到同文件CPP的底端
 | 
						||
#undef LOCTEXT_NAMESPACE
 | 
						||
```
 | 
						||
对于文本空间声明完毕后即可使用宏LOCTEXT进行FText构建。
 | 
						||
 | 
						||
.cpp
 | 
						||
```c++
 | 
						||
FText t1 = LOCTEXT("UECppGMB_T1", "Hello");//此代码需要在上面的声明宏内部
 | 
						||
```
 | 
						||
02.直接使用宏NSLOCTEXT构建
 | 
						||
.cpp
 | 
						||
```c++
 | 
						||
FText t1 = NSLOCTEXT("UECppTest", "UECppGMB_T1", "Hello");
 | 
						||
```
 | 
						||
第二种方法较第一种可以省去空间声明,但是并没有丢弃空间功能,只是在声明时需要额外多提供一个空间名称作为参数传递给宏
 | 
						||
 | 
						||
## FText
 | 
						||
对于文字使用 本地化工具,批量收集FText进行翻译。
 | 
						||
 | 
						||
## 非文件
 | 
						||
对于音频,视频,图片,各种数据文件相关的本地化操作,可以直接右键其蓝图文件,选择Asset localization操作。
 | 
						||

 | 
						||
 | 
						||
创建以后会在本地化文件夹位置自动生成一个对应的文件副本,然后把该文件副本改成你需要替换的本地化文件就好了,注意该副本的文件名一定要与原件文件名一致,这样才能自动调用到本地化版本的文件。测试和使用方法与9步和10步相同。
 | 
						||
 | 
						||
## 在蓝图中动态切换语言
 | 
						||
C++中设置动态切换语言的函数库。
 | 
						||
创建UBlueprintFunctionLibrary的子类,具体内容如下
 | 
						||
.h文件
 | 
						||
```c++
 | 
						||
#pragma once
 | 
						||
#include "Kismet/BlueprintFunctionLibrary.h"
 | 
						||
#include "MyBlueprintFunctionLibrary.generated.h"
 | 
						||
UCLASS()
 | 
						||
class LOCALIZATIONTEST_API UMyBlueprintFunctionLibrary : public UBlueprintFunctionLibrary
 | 
						||
{
 | 
						||
GENERATED_BODY()
 | 
						||
public:
 | 
						||
/* Change Localization at Runtime. */
 | 
						||
UFUNCTION(BlueprintCallable, meta = (DisplayName = "Change Localization"), Category = "Locale")
 | 
						||
static void ChangeLocalization(FString target);
 | 
						||
UFUNCTION(BlueprintCallable, meta = (DisplayName = "Get Localization"), Category = "Locale")
 | 
						||
static FString GetLocalization();
 | 
						||
};
 | 
						||
.cpp
 | 
						||
#include "localizationTest.h"
 | 
						||
#include "MyBlueprintFunctionLibrary.h"
 | 
						||
void UMyBlueprintFunctionLibrary::ChangeLocalization(FString target)
 | 
						||
{
 | 
						||
FInternationalization::Get().SetCurrentCulture(target);
 | 
						||
}
 | 
						||
FString UMyBlueprintFunctionLibrary::GetLocalization()
 | 
						||
{
 | 
						||
return FInternationalization::Get().GetCurrentCulture().Get().GetName();
 | 
						||
}
 | 
						||
```
 | 
						||
 | 
						||
## 本地化对话
 | 
						||
本地化对话以 Dialogue Wave类型的资源为中心。该资源可以通过本地化控制板界面的GatherText 收集其中的 spoken text 和 optional subtitle overrides。 
 | 
						||
 | 
						||
Dialogue Wave 提供了一种 根据不同说话者与倾听者,说出意思相同的一段话,却使用不同语音与显示字幕的一种方法。
 | 
						||
 |