五、语言切换功能实现

五、语言切换功能实现

在SlAiInternation.h中本地化文本

#pragma once

#include "CoreMinimal.h"

/**
 * 
 */
class SLAICOURSE_API SlAiInternation
{
public:
	static void Refister(FText Value) {
		return;
	}
};


#define LOCTEXT_NAMESPACE "SlAiMenu"

//用一次可以,多了会重复定义报错
SlAiInternation::Refister(LOCTEXT("Menu", "Menu"));

//现在可以直接
//LOCTEXT("Menu", "Menu")
#undef LOCTEXT_NAMESPACE


//SlAiInternation::Refister(NSLOCTEXT("SlAiMenu", "Menu", "Menu"));
//等同于
//#define LOCTEXT_NAMESPACE "SlAiMenu"
//SlAiInternation::Refister(LOCTEXT("Menu", "Menu"));
//#undef LOCTEXT_NAMESPACE

将菜单标题文本改为本地化文本

SAssignNew(TitleText, STextBlock)
		.Font(SlAiStyle::Get().GetFontStyle("MenuItemStyle"))
		.Text(NSLOCTEXT("SlAiMenu", "Menu", "Menu"))

翻译本地化文本

打开窗口------本地化面板
五、语言切换功能实现
.

获取本地文本所在位置

.

五、语言切换功能实现

添加新语言

五、语言切换功能实现

本地语言依旧为英文
五、语言切换功能实现

获取文件路径中的本地化文本

五、语言切换功能实现

手动翻译本地化文本

点击按钮
五、语言切换功能实现
五、语言切换功能实现
五、语言切换功能实现

计算字数

五、语言切换功能实现

再次翻译

五、语言切换功能实现

完成后
五、语言切换功能实现
运行
五、语言切换功能实现

SlAiInternation.h

#pragma once

#include "CoreMinimal.h"

/**
 * 
 */



#define LOCTEXT_NAMESPACE "SlAiMenu"

//主界面
LOCTEXT("Menu", "Menu");//菜单
LOCTEXT("StartGame", "StartGame");//开始游戏
LOCTEXT("GameOption", "GameOption");//游戏设置
LOCTEXT("QuitGame", "QuitGame");//退出游戏

LOCTEXT("NewGame", "NewGame");//新游戏
LOCTEXT("LoadRecord", "LoadRecord");//加载存档

LOCTEXT("ChooseRecord", "ChooseRecord");//选择存档

//进入游戏界面
LOCTEXT("RecordName", "RecordName");//存档名
LOCTEXT("EnterGame", "EnterGame");//进入游戏
LOCTEXT("EnterRecord", "EnterRecord");//进入存档
LOCTEXT("RecordNameHint", "Input Record Name!");//输入存档名
LOCTEXT("NameRepeatedHint", "Record Name Repeated!");//输入存档名

//游戏设置界面
LOCTEXT("Chinese", "Chinese");//中文
LOCTEXT("English", "English");//英文
LOCTEXT("Music", "Music");//音乐
LOCTEXT("Sound", "Sound");//音效

//公用
LOCTEXT("GoBack", "GoBack");//返回

#undef LOCTEXT_NAMESPACE

再次进入本地化面板翻译

语言切换

...
#include"Internationalization.h"
...
//切换为中文
//FInternationalization::Get().SetCurrentCulture(TEXT("en"));
//切换为英文
//FInternationalization::Get().SetCurrentCulture(TEXT("zh"));

注意

Roboto-Regular.ttf 高版本中文可能会乱码

**SlAiInternation::Refister(LOCTEXT("Menu", "Menu"));**


报错重复定义可以改为

LOCTEXT("Menu", "Menu");//菜单
上一篇:C#


下一篇:AT1181 隠れた言葉【过水已隐藏】 题解