五、语言切换功能实现
在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");//菜单