Skip to content

Commit

Permalink
用户自定义界面中界面名称和Text元素的文本支持从字符串资源加载,解决英语语言下界面名称仍然为中文的问题
Browse files Browse the repository at this point in the history
  • Loading branch information
zhongyang219 committed Mar 26, 2023
1 parent 752513a commit 95cb260
Show file tree
Hide file tree
Showing 11 changed files with 52 additions and 4 deletions.
8 changes: 8 additions & 0 deletions MusicPlayer2/CTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ void CTest::Test()

//TestCueSave();
TestFilePathHelper();
TestReplaceStringRes();
}

void CTest::TestStringMatch()
Expand Down Expand Up @@ -261,3 +262,10 @@ void CTest::TestFilePathHelper()
ASSERT(file_dir == L"C:\\abc.d\\");
ASSERT(folder_name == L"abc.d");
}

void CTest::TestReplaceStringRes()
{
wstring str{ L"abc%(118)eee%(263)" };
CCommon::ReplaceUiStringRes(str);
ASSERT(str == L"abc播放eee自动重命名");
}
1 change: 1 addition & 0 deletions MusicPlayer2/CTest.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,5 +25,6 @@ class CTest
static void TestRating();
static void TestCueSave();
static void TestFilePathHelper();
static void TestReplaceStringRes();
};

25 changes: 25 additions & 0 deletions MusicPlayer2/Common.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1407,6 +1407,31 @@ CString CCommon::LoadTextFormat(UINT id, const std::initializer_list<CVariant>&
return StringFormat(str.GetString(), paras);
}

void CCommon::ReplaceUiStringRes(std::wstring& str)
{
size_t index{};
while (true)
{
index = str.find(L"%(", index);
if (index == std::wstring::npos)
break;
size_t right_bracket_index = str.find(L')', index + 2);
if (right_bracket_index == std::wstring::npos)
break;
int res_id = _wtoi(str.substr(index + 2, right_bracket_index - index - 2).c_str());
std::wstring res_str = LoadText(static_cast<UINT>(res_id)).GetString();
if (!res_str.empty())
{
str.replace(index, right_bracket_index - index + 1, res_str);
index += res_str.size();
}
else
{
index = right_bracket_index + 1;
}
}
}


void CCommon::SetThreadLanguage(Language language)
{
Expand Down
3 changes: 3 additions & 0 deletions MusicPlayer2/Common.h
Original file line number Diff line number Diff line change
Expand Up @@ -353,6 +353,9 @@ class CCommon
//从资源文件中载入字符串,并将资源字符串中形如<%序号%>的字符串替换成可变参数列表中的参数
static CString LoadTextFormat(UINT id, const std::initializer_list<CVariant>& paras);

//将字符串形如“%(数字)”格式的字符替换成字符串资源中对应id的字符串
static void ReplaceUiStringRes(std::wstring& str);

//设置线程语言
static void SetThreadLanguage(Language language);

Expand Down
6 changes: 6 additions & 0 deletions MusicPlayer2/MusicPlayer2.rc
Original file line number Diff line number Diff line change
Expand Up @@ -3905,6 +3905,9 @@ BEGIN
IDS_CONTINUE_WHEN_SWITCH_PLAYLIST_TIP
"勾选此项后,在切换播放列表时,如果新的播放列表中存在正在播放的曲目,则在切换播放列表后继续播放当前播放的曲目。"
IDS_ACKNOWLEDGEMENT "鸣谢"
IDS_SIMPLE_UI "简洁UI"
IDS_GROOVE_MUSIC_STYLE "Groove音乐风格"
IDS_DEFAULT_UI "默认界面"
END

#endif // 中文(简体,中国) resources
Expand Down Expand Up @@ -7232,6 +7235,9 @@ BEGIN
IDS_CONTINUE_WHEN_SWITCH_PLAYLIST_TIP
"When this option is selected, if the playing track exists in the new playlist, the playing track will continue to be played after the playlist is switched."
IDS_ACKNOWLEDGEMENT "Acknowledgement"
IDS_SIMPLE_UI "Simple UI"
IDS_GROOVE_MUSIC_STYLE "Groove Style"
IDS_DEFAULT_UI "Default UI"
END

#endif // 英语(美国) resources
Expand Down
2 changes: 2 additions & 0 deletions MusicPlayer2/UserUi.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -499,6 +499,7 @@ std::shared_ptr<UiElement::Element> CUserUi::BuildUiElementFromXmlNode(tinyxml2:
//text
std::string str_text = CTinyXml2Helper::ElementAttribute(xml_node, "text");
text->text = CCommon::StrToUnicode(str_text, CodeType::UTF8_NO_BOM);
CCommon::ReplaceUiStringRes(text->text);
//alignment
std::string str_alignment = CTinyXml2Helper::ElementAttribute(xml_node, "alignment");
if (str_alignment == "left")
Expand Down Expand Up @@ -697,6 +698,7 @@ void CUserUi::LoadUi()
CTinyXml2Helper::LoadXmlFile(xml_doc, m_xml_path.c_str());
tinyxml2::XMLElement* root = xml_doc.RootElement();
m_ui_name = CCommon::StrToUnicode(CTinyXml2Helper::ElementAttribute(root, "name"), CodeType::UTF8_NO_BOM);
CCommon::ReplaceUiStringRes(m_ui_name);
std::string ui_index = CTinyXml2Helper::ElementAttribute(root, "index");
if (!ui_index.empty())
m_index = atoi(ui_index.c_str());
Expand Down
3 changes: 3 additions & 0 deletions MusicPlayer2/resource.h
Original file line number Diff line number Diff line change
Expand Up @@ -791,6 +791,9 @@
#define IDS_PLAYLIST_EMPTY_INFO 595
#define IDS_CONTINUE_WHEN_SWITCH_PLAYLIST_TIP 596
#define IDS_ACKNOWLEDGEMENT 597
#define IDS_SIMPLE_UI 598
#define IDS_GROOVE_MUSIC_STYLE 599
#define IDS_DEFAULT_UI 600
#define IDC_STATIC_PATH 1001
#define IDC_LIST1 1002
#define IDC_PATH_LIST 1002
Expand Down
2 changes: 1 addition & 1 deletion MusicPlayer2/skins/01_simple.xml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<root name="简洁UI" xmlns="https://github.com/zhongyang219/MusicPlayer2/skin" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://github.com/zhongyang219/MusicPlayer2/skin ./skin.xsd"
<root name="%(598)" xmlns="https://github.com/zhongyang219/MusicPlayer2/skin" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://github.com/zhongyang219/MusicPlayer2/skin ./skin.xsd"
index="7">
<ui type="big">
<verticalLayout margin="4">
Expand Down
2 changes: 1 addition & 1 deletion MusicPlayer2/skins/02_grooveMusic.xml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<root name="Groove音乐风格" xmlns="https://github.com/zhongyang219/MusicPlayer2/skin" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://github.com/zhongyang219/MusicPlayer2/skin ./skin.xsd"
<root name="%(599)" xmlns="https://github.com/zhongyang219/MusicPlayer2/skin" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://github.com/zhongyang219/MusicPlayer2/skin ./skin.xsd"
index="8">
<ui>
<verticalLayout>
Expand Down
2 changes: 1 addition & 1 deletion MusicPlayer2/skins/03_grooveMusicWin11.xml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<root name="Groove音乐风格(Windows11)" xmlns="https://github.com/zhongyang219/MusicPlayer2/skin" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://github.com/zhongyang219/MusicPlayer2/skin ./skin.xsd"
<root name="%(599)(Windows11)" xmlns="https://github.com/zhongyang219/MusicPlayer2/skin" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://github.com/zhongyang219/MusicPlayer2/skin ./skin.xsd"
index="9">
<ui>
<verticalLayout>
Expand Down
2 changes: 1 addition & 1 deletion MusicPlayer2/skins/ui2.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<root xmlns="https://github.com/zhongyang219/MusicPlayer2/skin" xmlns:xsi="http://www.w3.org/2101/XMLSchema-instance" xsi:schemaLocation="https://github.com/zhongyang219/MusicPlayer2/skin ./skin.xsd"
name="默认界面" index="10">
name="%(600)" index="10">

<ui type="big">
<verticalLayout>
Expand Down

0 comments on commit 95cb260

Please sign in to comment.