diff --git a/TIDALDL-UI-PRO/.vs/TIDALDL-UI/v16/.suo b/TIDALDL-UI-PRO/.vs/TIDALDL-UI/v16/.suo
index 2982413..5226d25 100644
Binary files a/TIDALDL-UI-PRO/.vs/TIDALDL-UI/v16/.suo and b/TIDALDL-UI-PRO/.vs/TIDALDL-UI/v16/.suo differ
diff --git a/TIDALDL-UI-PRO/App.xaml b/TIDALDL-UI-PRO/App.xaml
index ecfe942..b089463 100644
--- a/TIDALDL-UI-PRO/App.xaml
+++ b/TIDALDL-UI-PRO/App.xaml
@@ -27,7 +27,9 @@
-
+
+
+
diff --git a/TIDALDL-UI-PRO/Bootstrapper.cs b/TIDALDL-UI-PRO/Bootstrapper.cs
index 7a8530e..dcc9859 100644
--- a/TIDALDL-UI-PRO/Bootstrapper.cs
+++ b/TIDALDL-UI-PRO/Bootstrapper.cs
@@ -2,6 +2,7 @@
using Stylet;
using StyletIoC;
using TIDALDL_UI.Pages;
+using TIDALDL_UI.Else;
namespace TIDALDL_UI
{
diff --git a/TIDALDL-UI-PRO/Else/Language.cs b/TIDALDL-UI-PRO/Else/Language.cs
index 127bd73..5568022 100644
--- a/TIDALDL-UI-PRO/Else/Language.cs
+++ b/TIDALDL-UI-PRO/Else/Language.cs
@@ -22,7 +22,9 @@ public enum Type
{
Default,
English,
- 简体中文,
+ Chinese,
+ Russian,
+ Turkish,
}
private static ResourceDictionary GetResourceDictionaryByType(Type type = Type.Default)
@@ -36,12 +38,13 @@ private static ResourceDictionary GetResourceDictionaryByType(Type type = Type.D
pList.Add(item);
//find resource file
- if (type == Type.Default)
- findstr = string.Format(@"StringResource.{0}.xaml", CultureInfo.CurrentCulture.Name);
- else if(type == Type.简体中文)
- findstr = string.Format(@"StringResource.{0}.xaml", "zh-CN");
- else
+ if (type == Type.Default || type == Type.English)
findstr = @"StringResource.xaml";
+ else
+ {
+ string sub = AIGS.Common.Convert.ConverEnumToString((int)type, typeof(Type), 0);
+ findstr = string.Format(@"StringResource.{0}.xaml", sub);
+ }
ret = pList.FirstOrDefault(x => x.Source != null && x.Source.OriginalString.Contains(findstr));
if(ret == null)
diff --git a/TIDALDL-UI-PRO/Else/Settings.cs b/TIDALDL-UI-PRO/Else/Settings.cs
index f9b6e8c..f95b7a0 100644
--- a/TIDALDL-UI-PRO/Else/Settings.cs
+++ b/TIDALDL-UI-PRO/Else/Settings.cs
@@ -164,8 +164,8 @@ public static void Change(Settings newItem, Settings oldItem = null)
{
if(oldItem == null || oldItem.ThemeType != newItem.ThemeType)
Theme.Change(newItem.ThemeType);
- //if (oldItem == null || oldItem.LanguageType != newItem.LanguageType)
- // Language.Change(newItem.LanguageType);
+ if (oldItem == null || oldItem.LanguageType != newItem.LanguageType)
+ Language.Change(newItem.LanguageType);
if (oldItem == null || oldItem.ThreadNum != newItem.ThreadNum)
ThreadTool.SetThreadNum(newItem.ThreadNum);
}
diff --git a/TIDALDL-UI-PRO/Else/TrackTask.cs b/TIDALDL-UI-PRO/Else/TrackTask.cs
index 0a882a4..b3e2d6a 100644
--- a/TIDALDL-UI-PRO/Else/TrackTask.cs
+++ b/TIDALDL-UI-PRO/Else/TrackTask.cs
@@ -169,6 +169,8 @@ public void Download()
CALL_RETURN:
TellParentOver();
+
+ DownloadSpeedString = "";
}
public void ErrDownloadNotify(long lTotalSize, long lAlreadyDownloadSize, string sErrMsg, object data)
diff --git a/TIDALDL-UI-PRO/Else/VideoTask.cs b/TIDALDL-UI-PRO/Else/VideoTask.cs
index 47acbce..a34f15e 100644
--- a/TIDALDL-UI-PRO/Else/VideoTask.cs
+++ b/TIDALDL-UI-PRO/Else/VideoTask.cs
@@ -123,6 +123,8 @@ public void Download()
CALL_RETURN:
TellParentOver();
+
+ DownloadSpeedString = "";
}
public bool UpdateDownloadNotify(long lTotalSize, long lAlreadyDownloadSize, long lIncreSize, object data)
diff --git a/TIDALDL-UI-PRO/Pages/AboutView.xaml b/TIDALDL-UI-PRO/Pages/AboutView.xaml
index ca11fcf..3102be7 100644
--- a/TIDALDL-UI-PRO/Pages/AboutView.xaml
+++ b/TIDALDL-UI-PRO/Pages/AboutView.xaml
@@ -32,6 +32,7 @@
+
diff --git a/TIDALDL-UI-PRO/Pages/AboutViewModel.cs b/TIDALDL-UI-PRO/Pages/AboutViewModel.cs
index fc5ca20..2fe465c 100644
--- a/TIDALDL-UI-PRO/Pages/AboutViewModel.cs
+++ b/TIDALDL-UI-PRO/Pages/AboutViewModel.cs
@@ -54,17 +54,17 @@ public void StartUpdate()
Progress.ValueInt = 0;
CountIncreSize = 0;
ShowProgress = Visibility.Visible;
- DownloadStatusInfo = "Get new version file-url...";
+ DownloadStatusInfo = Language.Get("strmsgGetNewVersionUrl");
string url = GithubHelper.getFileUrl(Global.NAME_GITHUB_AUTHOR, Global.NAME_GITHUB_PROJECT, LastVersion, Global.NAME_GITHUB_FILE);
if (PathHelper.Mkdirs(Global.PATH_UPDATE) == false)
{
- DownloadStatusInfo = "Creat update folder falied!";
+ DownloadStatusInfo = Language.Get("strmsgCreatUpdateFolderFailed");
EndUpdate();
return;
}
- DownloadStatusInfo = "Start update...";
+ DownloadStatusInfo = Language.Get("strmsgStartUpdate");
Progress.SetStatus(ProgressHelper.STATUS.RUNNING);
StartTime = TimeHelper.GetCurrentTime();
LoginKey key = Tools.GetKey();
@@ -99,7 +99,7 @@ public void CompleteDownloadNotify(long lTotalSize, object data)
{
Progress.ValueInt = 100;
Progress.SetStatus(ProgressHelper.STATUS.COMPLETE);
- DownloadStatusInfo = "Download complete, start update...";
+ DownloadStatusInfo = Language.Get("strmsgDownloadCompleteStartUpdate");
string sBat = "ping -n 5 127.0.0.1\n";
sBat += string.Format("move {0} {1}\\tidal-gui.exe\n", Global.PATH_UPDATE + Global.NAME_GITHUB_FILE, Path.GetFullPath(".\\"));
diff --git a/TIDALDL-UI-PRO/Pages/DownloadView.xaml b/TIDALDL-UI-PRO/Pages/DownloadView.xaml
index b1572c2..fec6384 100644
--- a/TIDALDL-UI-PRO/Pages/DownloadView.xaml
+++ b/TIDALDL-UI-PRO/Pages/DownloadView.xaml
@@ -24,24 +24,24 @@
-
+
-
+
-
+
-
+
diff --git a/TIDALDL-UI-PRO/Pages/DownloadViewModel.cs b/TIDALDL-UI-PRO/Pages/DownloadViewModel.cs
index d62a8f6..2beb363 100644
--- a/TIDALDL-UI-PRO/Pages/DownloadViewModel.cs
+++ b/TIDALDL-UI-PRO/Pages/DownloadViewModel.cs
@@ -21,9 +21,9 @@ public class DownloadViewModel : ModelBase
public bool VisibilityError{ get; set; }
public string PageHeader { set { } get {
- if (VisibilityDownload) return "Download";
- if (VisibilityComplete) return "Complete";
- return "Error";
+ if (VisibilityDownload) return Language.Get("strDownload");
+ if (VisibilityComplete) return Language.Get("strComplete");
+ return Language.Get("strError");
} }
public DownloadViewModel()
diff --git a/TIDALDL-UI-PRO/Pages/LoginView.xaml b/TIDALDL-UI-PRO/Pages/LoginView.xaml
index abe62e0..b57e42d 100644
--- a/TIDALDL-UI-PRO/Pages/LoginView.xaml
+++ b/TIDALDL-UI-PRO/Pages/LoginView.xaml
@@ -46,7 +46,7 @@
-->
-
+
@@ -57,7 +57,7 @@
-
-
+
@@ -116,10 +116,10 @@
-
+
-
-
+
+
@@ -127,7 +127,7 @@
-
+
diff --git a/TIDALDL-UI-PRO/Pages/LoginViewModel.cs b/TIDALDL-UI-PRO/Pages/LoginViewModel.cs
index 3b77812..59deca2 100644
--- a/TIDALDL-UI-PRO/Pages/LoginViewModel.cs
+++ b/TIDALDL-UI-PRO/Pages/LoginViewModel.cs
@@ -66,7 +66,7 @@ protected override async void OnViewLoaded()
//get device code
(string msg1, TidalDeviceCode code) = await Client.GetDeviceCode(PROXY);
if (msg1.IsNotBlank())
- Growl.Error("Get device code failed!", Global.TOKEN_LOGIN);
+ Growl.Error(Language.Get("strmsgGetDeviceCodeFailed"), Global.TOKEN_LOGIN);
else
DeviceCode = code;
goto RETURN_POINT;
@@ -96,7 +96,7 @@ public async void Login()
(string msg1, TidalDeviceCode code) = await Client.GetDeviceCode(PROXY);
if (msg1.IsNotBlank())
{
- Growl.Error("Get device code failed!", Global.TOKEN_LOGIN);
+ Growl.Error(Language.Get("strmsgGetDeviceCodeFailed"), Global.TOKEN_LOGIN);
BtnLoginEnable = true;
return;
}
@@ -121,7 +121,7 @@ public async void Login2()
if (Settings.Username.IsBlank() || Settings.Password.IsBlank())
{
- Growl.Error("Username or password is err!", Global.TOKEN_LOGIN);
+ Growl.Error(Language.Get("strmsgUsenamePasswordErr"), Global.TOKEN_LOGIN);
goto RETURN_POINT;
}
@@ -136,7 +136,7 @@ public async void Login2()
(string msg3, LoginKey key3) = await Client.Login(Settings.Username, Settings.Password, token2, PROXY);
if (msg.IsNotBlank() || key == null)
{
- Growl.Error("Login Err! " + msg, Global.TOKEN_LOGIN);
+ Growl.Error(Language.Get("strmsgLoginErr") + msg, Global.TOKEN_LOGIN);
goto RETURN_POINT;
}
diff --git a/TIDALDL-UI-PRO/Pages/SearchView.xaml b/TIDALDL-UI-PRO/Pages/SearchView.xaml
index a13d0db..9eebd5b 100644
--- a/TIDALDL-UI-PRO/Pages/SearchView.xaml
+++ b/TIDALDL-UI-PRO/Pages/SearchView.xaml
@@ -25,10 +25,10 @@
-
+
-
+
@@ -50,14 +50,14 @@
-
+
-
+
@@ -68,14 +68,14 @@
-
-
-
-
+
+
+
+
-
+
@@ -86,14 +86,14 @@
-
-
-
-
+
+
+
+
-
+
@@ -104,13 +104,13 @@
-
-
-
+
+
+
-
+
@@ -120,12 +120,12 @@
-
-
+
+
-
+
@@ -135,9 +135,9 @@
-
-
-
+
+
+
@@ -145,10 +145,12 @@
+
+
-
+
@@ -180,10 +182,10 @@
-
-
-
-
+
+
+
+
@@ -192,11 +194,11 @@
-
+
-
+
diff --git a/TIDALDL-UI-PRO/Pages/SearchViewModel.cs b/TIDALDL-UI-PRO/Pages/SearchViewModel.cs
index 7604644..28e8506 100644
--- a/TIDALDL-UI-PRO/Pages/SearchViewModel.cs
+++ b/TIDALDL-UI-PRO/Pages/SearchViewModel.cs
@@ -26,6 +26,8 @@ public class SearchViewModel : ModelBase
public bool ShowList { get; set; } = false;
//search parameter
+ public int searchOffset { get; set; } = 0;
+ public string SearchStr { get; set; }
public SearchResult SearchResult { get; set; }
public ObservableCollection CoverCards { get; set; }
@@ -44,21 +46,31 @@ protected override async void OnViewLoaded()
}
#region search \ get detail \ download
-
- public async void Search(string SearchStr)
+ public async void Search(string method)
{
+ if (method == "search")
+ searchOffset = 0;
+ else if (method == "searchNext")
+ searchOffset += Global.Settings.SearchNum;
+ else if (method == "searchPre")
+ {
+ searchOffset -= Global.Settings.SearchNum;
+ if (searchOffset < 0)
+ searchOffset = 0;
+ }
+
if (SearchStr.IsBlank())
{
- Growl.Error("Search string is empty!", Global.TOKEN_MAIN);
+ Growl.Error(Language.Get("strmsgSearchStringIsEmpty"), Global.TOKEN_MAIN);
return;
}
ShowWait = true;
- (string msg, eType type, object data) = await Client.Get(Global.CommonKey, SearchStr, eType.NONE, Global.Settings.SearchNum, Global.Settings.IncludeEP, false);
+ (string msg, eType type, object data) = await Client.Get(Global.CommonKey, SearchStr, eType.NONE, Global.Settings.SearchNum, Global.Settings.IncludeEP, false, searchOffset);
if (msg.IsNotBlank() || data == null)
{
- Growl.Error("Search Err!" + msg, Global.TOKEN_MAIN);
+ Growl.Error(Language.Get("strmsgSearchErr") + msg, Global.TOKEN_MAIN);
}
else if (type == eType.SEARCH)
{
@@ -80,7 +92,7 @@ public async void GetDetail()
{
if (SearchResult == null)
{
- Growl.Error("Please search first!", Global.TOKEN_MAIN);
+ Growl.Error(Language.Get("strmsgPleaseSearchFirst"), Global.TOKEN_MAIN);
return;
}
@@ -89,35 +101,35 @@ public async void GetDetail()
string id = null;
eType type = eType.NONE;
string selectHeader = ((System.Windows.Controls.TabItem)((SearchView)this.View).ctrSearchTab.SelectedItem).Header.ToString();
- if (selectHeader == "ALBUM")
+ if (selectHeader == Language.Get("strALBUM"))
{
if (((SearchView)this.View).ctrAlbumGrid.SelectedIndex < 0)
goto ERR_NO_SELECT;
id = SearchResult.Albums[((SearchView)this.View).ctrAlbumGrid.SelectedIndex].ID.ToString();
type = eType.ALBUM;
}
- else if (selectHeader == "TRACK")
+ else if (selectHeader == Language.Get("strTRACK"))
{
if (((SearchView)this.View).ctrTrackGrid.SelectedIndex < 0)
goto ERR_NO_SELECT;
id = SearchResult.Tracks[((SearchView)this.View).ctrTrackGrid.SelectedIndex].ID.ToString();
type = eType.TRACK;
}
- else if (selectHeader == "VIDEO")
+ else if (selectHeader == Language.Get("strVIDEO"))
{
if (((SearchView)this.View).ctrVideoGrid.SelectedIndex < 0)
goto ERR_NO_SELECT;
id = SearchResult.Videos[((SearchView)this.View).ctrVideoGrid.SelectedIndex].ID.ToString();
type = eType.VIDEO;
}
- else if (selectHeader == "ARTIST")
+ else if (selectHeader == Language.Get("strARTIST"))
{
if (((SearchView)this.View).ctrArtistGrid.SelectedIndex < 0)
goto ERR_NO_SELECT;
id = SearchResult.Artists[((SearchView)this.View).ctrArtistGrid.SelectedIndex].ID.ToString();
type = eType.ARTIST;
}
- else if (selectHeader == "PLAYLIST")
+ else if (selectHeader == Language.Get("strPLAYLIST"))
{
if (((SearchView)this.View).ctrPlaylistGrid.SelectedIndex < 0)
goto ERR_NO_SELECT;
@@ -134,7 +146,7 @@ public async void GetDetail()
return;
ERR_NO_SELECT:
- Growl.Error("Please select one item!", Global.TOKEN_MAIN);
+ Growl.Error(Language.Get("strmsgPleaseSelectOneItem"), Global.TOKEN_MAIN);
ShowWait = false;
return;
}
@@ -143,7 +155,7 @@ public async void Download()
{
if (Detail == null)
{
- Growl.Error("Nothing to downlond!", Global.TOKEN_MAIN);
+ Growl.Error(Language.Get("strmsgNothingToDownload"), Global.TOKEN_MAIN);
return;
}
@@ -156,7 +168,7 @@ public async void Download()
(string msg, Album album) = await Client.GetAlbum(Global.CommonKey, track.Album.ID, false);
if(msg.IsNotBlank() || album == null)
{
- Growl.Error("Get track's album information failed!", Global.TOKEN_MAIN);
+ Growl.Error(Language.Get("strmsgGetTrackAlbumInfoFailed"), Global.TOKEN_MAIN);
goto RETURN_POINT;
}
track.Album = album;
@@ -170,7 +182,7 @@ public async void Download()
(msg, album.Tracks, album.Videos) = await Client.GetItems(Global.CommonKey, album.ID, eType.ALBUM);
if (msg.IsNotBlank())
{
- Growl.Error("Get artist's album information failed!", Global.TOKEN_MAIN);
+ Growl.Error(Language.Get("strmsgGetArtistAlbumInfoFailed"), Global.TOKEN_MAIN);
goto RETURN_POINT;
}
}
@@ -301,9 +313,9 @@ public Detail(Album album)
{
Data = album;
Title = album.Title;
- Intro = $"by {album.ArtistsName}-{TimeHelper.ConverIntToString(album.Duration)} Tracks-{album.NumberOfTracks} Videos-{album.NumberOfVideos}";
+ Intro = $"by {album.ArtistsName}-{TimeHelper.ConverIntToString(album.Duration)} {Language.Get("strTRACK")}-{album.NumberOfTracks} {Language.Get("strVIDEO")}-{album.NumberOfVideos}";
CoverUrl = album.CoverUrl;
- ReleaseDate = $"Release date {album.ReleaseDate}";
+ ReleaseDate = $"{Language.Get("strReleaseDate")} {album.ReleaseDate}";
Flag = album.Flag;
for (int i = 0; i < album.NumberOfTracks && i < album.Tracks.Count; i++)
@@ -338,7 +350,7 @@ public Detail(Video video)
Title = video.Title;
Intro = $"by {video.ArtistsName}-{TimeHelper.ConverIntToString(video.Duration)}";
CoverUrl = video.CoverUrl;
- ReleaseDate = $"Release date {video.ReleaseDate}";
+ ReleaseDate = $"{Language.Get("strReleaseDate")} {video.ReleaseDate}";
Flag = video.Flag;
Items.Add(new Item()
{
@@ -357,7 +369,7 @@ public Detail(Track track)
Title = track.Title;
Intro = $"by {track.ArtistsName}-{TimeHelper.ConverIntToString(track.Duration)}";
CoverUrl = track.Album.CoverUrl;
- ReleaseDate = $"Release date {track.Album.ReleaseDate}";
+ ReleaseDate = $"{Language.Get("strReleaseDate")} {track.Album.ReleaseDate}";
Flag = track.Flag;
Items.Add(new Item()
{
@@ -374,9 +386,9 @@ public Detail(Playlist playlist)
{
Data = playlist;
Title = playlist.Title;
- Intro = $"by {TimeHelper.ConverIntToString(playlist.Duration)} Tracks-{playlist.NumberOfTracks} Videos-{playlist.NumberOfVideos}";
+ Intro = $"by {TimeHelper.ConverIntToString(playlist.Duration)} {Language.Get("strTRACK")}-{playlist.NumberOfTracks} {Language.Get("strVIDEO")}-{playlist.NumberOfVideos}";
CoverUrl = playlist.CoverUrl;
- ReleaseDate = $"Description {playlist.Description}";
+ ReleaseDate = $"{Language.Get("strDescription")} {playlist.Description}";
for (int i = 0; i < playlist.Tracks.Count; i++)
{
@@ -408,9 +420,9 @@ public Detail(Artist artist)
{
Data = artist;
Title = artist.Name;
- Intro = $"by {artist.Name} Albums-{artist.Albums.Count}";
+ Intro = $"by {artist.Name} {Language.Get("strALBUM")}-{artist.Albums.Count}";
CoverUrl = artist.CoverUrl;
- ReleaseDate = $"Artist types: {string.Join(" / ", artist.ArtistTypes)}";
+ ReleaseDate = $"{Language.Get("strArtistType")}: {string.Join(" / ", artist.ArtistTypes)}";
for (int i = 0; i < artist.Albums.Count; i++)
{
diff --git a/TIDALDL-UI-PRO/Pages/SettingsView.xaml b/TIDALDL-UI-PRO/Pages/SettingsView.xaml
index 65f0987..3098c0c 100644
--- a/TIDALDL-UI-PRO/Pages/SettingsView.xaml
+++ b/TIDALDL-UI-PRO/Pages/SettingsView.xaml
@@ -20,13 +20,13 @@
-
+
-
-
-
+
+
+
@@ -56,6 +56,7 @@
+
@@ -64,53 +65,55 @@
-
+
-
-
+
+
-
-
+
+
-
+
-
+
-
+
-
+
-
-
+
+
-
-
+
+
-
+
-
-
+
+
-
+
-
+
-
+
+
-
-
+
+
+
diff --git a/TIDALDL-UI-PRO/Pages/SettingsViewModel.cs b/TIDALDL-UI-PRO/Pages/SettingsViewModel.cs
index 7f05c9a..5554c3b 100644
--- a/TIDALDL-UI-PRO/Pages/SettingsViewModel.cs
+++ b/TIDALDL-UI-PRO/Pages/SettingsViewModel.cs
@@ -22,6 +22,8 @@ public class SettingsViewModel : ModelBase
public List ComboxAddYear { get; set; } = AIGS.Common.Convert.ConverEnumToList();
public List ComboxTheme { get; set; } = AIGS.Common.Convert.ConverEnumToList();
+ public List ComboxLanguage { get; set; } = AIGS.Common.Convert.ConverEnumToList();
+
public void Load()
{
@@ -45,9 +47,9 @@ public async void Confim()
{
(string msg, LoginKey key) = await Client.Login(AccessToken);
if (msg.IsNotBlank() || key == null)
- Growl.Warning("Accesstoken is not valid! " + msg, Global.TOKEN_MAIN);
+ Growl.Warning(Language.Get("strmsgAccessTokenIsNotValid") + msg, Global.TOKEN_MAIN);
else if(key.UserID != Global.CommonKey.UserID)
- Growl.Warning("User mismatch! Please use your own accesstoken.", Global.TOKEN_MAIN);
+ Growl.Warning(Language.Get("strmsgUserMismatch"), Global.TOKEN_MAIN);
else
{
UserSettings user = UserSettings.Read();
@@ -70,7 +72,7 @@ public async void Confim()
Global.Settings.Save();
Load();
- Growl.Success("Refresh settings success!", Global.TOKEN_MAIN);
+ Growl.Success(Language.Get("strmsgRefreshSettingsSuccess"), Global.TOKEN_MAIN);
}
public void Logout()
@@ -88,7 +90,7 @@ public void GetAccessToken()
return;
}
- Growl.Success("Get accesstoken success!", Global.TOKEN_MAIN);
+ Growl.Success(Language.Get("strmsgGetAccessTokenSuccess"), Global.TOKEN_MAIN);
AccessToken = key.AccessToken;
}
}
diff --git a/TIDALDL-UI-PRO/Pages/TaskViewModel.cs b/TIDALDL-UI-PRO/Pages/TaskViewModel.cs
index 5b3063f..811f216 100644
--- a/TIDALDL-UI-PRO/Pages/TaskViewModel.cs
+++ b/TIDALDL-UI-PRO/Pages/TaskViewModel.cs
@@ -168,7 +168,7 @@ public void Delete()
//if (MessageBox.Show("Remove task?", "Info", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.No)
// return;
- Dialog.Show(new MessageView(MessageBoxImage.Information, "Remove task?", true, (x) =>
+ Dialog.Show(new MessageView(MessageBoxImage.Information, Language.Get("strmsgRemoveTask"), true, (x) =>
{
foreach (var item in Items)
{
@@ -216,7 +216,7 @@ public void OpenFolder()
}
catch
{
- Growl.Error("Open folder failed!" + path, Global.TOKEN_MAIN);
+ Growl.Error(Language.Get("strmsgOpenFolderFailed") + path, Global.TOKEN_MAIN);
}
}
#endregion
diff --git a/TIDALDL-UI-PRO/Properties/AssemblyInfo.cs b/TIDALDL-UI-PRO/Properties/AssemblyInfo.cs
index ac6934b..de65bc6 100644
--- a/TIDALDL-UI-PRO/Properties/AssemblyInfo.cs
+++ b/TIDALDL-UI-PRO/Properties/AssemblyInfo.cs
@@ -12,7 +12,7 @@
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Yaronzz")]
[assembly: AssemblyProduct("TIDALDL-UI")]
-[assembly: AssemblyCopyright("Copyright © Yaronzz 2020")]
+[assembly: AssemblyCopyright("Copyright © Yaronzz 2021")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
@@ -51,5 +51,5 @@
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
//通过使用 "*",如下所示:
// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.2.1.2")]
-[assembly: AssemblyFileVersion("1.2.1.2")]
+[assembly: AssemblyVersion("1.2.1.3")]
+[assembly: AssemblyFileVersion("1.2.1.3")]
diff --git a/TIDALDL-UI-PRO/Properties/Lang/StringResource.Chinese.xaml b/TIDALDL-UI-PRO/Properties/Lang/StringResource.Chinese.xaml
new file mode 100644
index 0000000..b9d8dda
--- /dev/null
+++ b/TIDALDL-UI-PRO/Properties/Lang/StringResource.Chinese.xaml
@@ -0,0 +1,100 @@
+
+
+ 确定
+ 取消
+ 退出
+ 登录
+ 保存
+ 反馈
+ 群组
+ 捐赠
+ 微信
+ 支付宝
+ 更新
+ 尝试获取
+
+
+ 歌单
+ 曲目数
+ 版本
+ 最新版本
+ 设置
+ 用户名
+ 密码
+ 服务器
+ 等待
+ 成功
+ 更新
+ 错误
+ 上传列表
+ 任务列表
+ 下载
+ 完成
+ 错误
+ 登录
+ 代理
+ 发布日期
+ 描述
+ 歌手类型
+
+
+ 请先搜索!
+获取新版本链接中...
+ 创建更新目录失败!
+ 开始更新...
+ 下载完成,开始更新...
+
+ 获取device code失败!
+ 用户名或密码错误!
+ 登录失败!
+ 搜索串不能为空!
+ 搜索失败!
+ 请先选择一项!
+ 没有下载项!
+ 获取歌曲专辑信息失败!
+ 获取歌手专辑信息失败!
+ 移除任务?
+ 打开目录失败!
+ 获取accesstoken成功!
+ 更新配置成功!
+ Accesstoken无效!
+ 用户不匹配! 请使用你自己的用户accesstoken.
+
+
+ 标题
+ 歌手
+ 专辑
+ 歌曲
+ 视频
+ 歌单
+ 名称
+ 人气
+ 时长
+ 类型
+ 日期
+ 时间
+
+
+ 保存路径:
+ 线程数:
+ 搜索的数量:
+ 专辑目录保存格式:
+ 歌曲文件保存格式:
+ 视频文件保存格式:
+ 选项:
+ 最大长度:
+ 歌曲:
+ 主题:
+ 语言:
+
+ 限制区间 1~3
+ 限制区间 10~50
+ 搜索歌手专辑时包括其单曲/EP
+ 保存封面
+ 文件名最大长度限制 50~100
+ 专辑目录名最大限制 50~100
+ mp4自动转m4a
+ 跳过已经下载的文件
+
\ No newline at end of file
diff --git a/TIDALDL-UI-PRO/Properties/Lang/StringResource.Russian.xaml b/TIDALDL-UI-PRO/Properties/Lang/StringResource.Russian.xaml
new file mode 100644
index 0000000..94c1d89
--- /dev/null
+++ b/TIDALDL-UI-PRO/Properties/Lang/StringResource.Russian.xaml
@@ -0,0 +1,100 @@
+
+
+ OK
+ Отмена
+ Выйти
+ Войти
+ Сохранить
+ Фидбэк
+ Телеграм
+ Донат
+ Wechat
+ Alipay
+ Обновить
+ Попробовать снова
+
+
+ Плейлист
+ Номер трека
+ ВЕРСИЯ
+ ПОСЛЕДНЯЯ ВЕРСИЯ
+ НАСТРОЙКИ
+ Логин
+ Пароль
+ Хост
+ ПОДОЖДИТЕ
+ ВЫПОЛНЕНО
+ ОБНОВИТЬ
+ ОШИБКА
+ ЗАГРУЗИТЬ ЛИСТ
+ СПИСОК ЗАДАНИЙ
+ Скачать
+ Готово
+ Ошибка
+ ЛОГИН
+ ПРОКСИ
+ Дата выхода
+ Описание
+ Артист
+
+
+ Сначала выполните поиск!
+ Загрузите новую версию здесь...
+ Не удалось создать папку для обновления!
+ Началось обновление...
+ Загружено, началось обновление...
+
+ Ошибка получения кода девайса!
+ Логин или пароль не верный!
+ Ошибка входа!
+ Строка поиска пуста!
+ Ошибка поиска!
+ Пожалуйста, выберите что-нибудь!
+ Ничего не скачано!
+ Ошибка получения инвормации треков в альбоме!
+ Ошибка получения информации альбома артиста!
+ Удалить задачу?
+ Ошибка открытия папки!
+ Токен получен!
+ Обновление настроек завершено!
+ Токен не действительный!
+ Несоответсвующий пользователь! Пожалуйста, введите свой токен.
+
+
+ НАЗВАНИЕ
+ АРТИСТА
+ АЛЬБОМ
+ ТРЕК
+ ВИДЕО
+ ПЛЕЙЛИСТ
+ ИМЯ
+ ПОПУЛЯРНОСТЬ
+ ДЛИТЕЛЬНОСТЬ
+ ТИП
+ ДАТА
+ ВРЕМЯЫ
+
+
+ Папка загрузки:
+ Номер:
+ Количество запросов:
+ Формат названия папки альбома:
+ Формат названия трека:
+ Формат названия видео:
+ Выберите:
+ Макс. длинна:
+ Трек:
+ Тема:
+ Язык:
+
+ лимит 1~3
+ лимит 10~50
+ Поиск артиста включая синглы/EP
+ Скачивать обложку
+ Лимит названия файла 50~100
+ Лимит названия папки альбома 50~100
+ Конвертировать mp4 в m4a
+ Пропуск существующего файла при загрузке
+
\ No newline at end of file
diff --git a/TIDALDL-UI-PRO/Properties/Lang/StringResource.Turkish.xaml b/TIDALDL-UI-PRO/Properties/Lang/StringResource.Turkish.xaml
new file mode 100644
index 0000000..a81c06a
--- /dev/null
+++ b/TIDALDL-UI-PRO/Properties/Lang/StringResource.Turkish.xaml
@@ -0,0 +1,100 @@
+
+
+ Tamam
+ İptal
+ Çıkış
+ Giriş
+ Kaydet
+ Geri Bildirim
+ Grup
+ Bağış
+ Wechat
+ Alipay
+ Güncelleme
+ Deneyin, Alın
+
+
+ Oynatma Listesi
+ Parça Numarası
+ VERSİYON
+ SON-VERSİYON
+ AYARLAR
+ Kullanıcı Adı
+ Şifre
+ Host
+ BEKLE
+ BAŞARILI
+ GÜNCELLEME
+ HATA
+ LİSTEYİ YÜKLE
+ GÖREV LİSTESİ
+ İndir
+ Tamamlandı
+ Hata
+ GİRİŞ
+ PROXY
+ Yayın tarihi
+ Açıklama
+ Sanatçı türleri
+
+
+ Lütfen önce arayın!
+ Yeni sürüm dosya url'sini al...
+ Güncelleme klasörü oluşturma hatası!
+ Güncellemeyi başlat...
+ İndirme tamamlandı, güncellemeyi başlat...
+
+ Cihaz kodunu alınamadı!
+ Kullanıcı adı veya şifre hatalı!
+ Giriş hatası!
+ Arama dizesi boş!
+ Arama hatası!
+ Lütfen bir öğe seçin!
+ İndirilecek bir şey yok!
+ Parçanın albüm bilgilerini alınamadı!
+ Sanatçının albüm bilgilerini alınamadı!
+ Görevi kaldır?
+ Klasör açılamadı!
+ Erişim belirtecini alın!
+ Ayarları yenileme başarılı!
+ Erişim belirteci geçerli değil!
+ Kullanıcı uyuşmazlığı! Lütfen kendi erişim kodunuzu kullanın.
+
+
+ BAŞLIK
+ SANATÇILAR
+ ALBÜM
+ PARÇA
+ VİDEO
+ OYNATMA LİSTESİ
+ İSİM
+ POPÜLERLİK
+ SÜRE
+ TÜR
+ TARİH
+ ZAMAN
+
+
+ Yol:
+ Konu Numarası:
+ Arama Numarası:
+ Albüm Klasörü Formatı:
+ Parça Dosya Formatı:
+ Video Dosya Formatı:
+ Seç:
+ Maksimum Uzunluk:
+ Parça:
+ Tema:
+ Dil:
+
+ limit 1~3
+ limit 10~5
+ Sanatçı albümünü single/ep içerisinde ara
+ Kapağı indir
+ Dosya adı uzunluk sınırı 50 ~ 100
+ Albüm klasörü adı uzunluk sınırı 50 ~ 100
+ Mp4'ü m4a'ya dönüştür
+ İndirirken var olan dosyayı atla
+
\ No newline at end of file
diff --git a/TIDALDL-UI-PRO/Properties/Lang/StringResource.xaml b/TIDALDL-UI-PRO/Properties/Lang/StringResource.xaml
index 0b8bd60..5ed4724 100644
--- a/TIDALDL-UI-PRO/Properties/Lang/StringResource.xaml
+++ b/TIDALDL-UI-PRO/Properties/Lang/StringResource.xaml
@@ -1,33 +1,21 @@
-
OK
Cancel
- Delete
- Refresh
Logout
Login
- ToLocal
- Upload
- Import
Save
- About
- Settings
Feedback
Group
Donation
Wechat
Alipay
- QQ Music
- Cloud Music
- Spotify
- Tidal
Update
+ Try Get
- Platform
Playlist
TrackNum
VERSION
@@ -35,61 +23,78 @@
SETTINGS
Username
Password
-
+ Host
WAIT
SUCCESS
UPDATE
ERROR
UPLOAD LIST
+ TASK LIST
+ Download
+ Complete
+ Error
+ LOGIN
+ PROXY
+ Release date
+ Description
+ Artist types
- Wait!
- Success!
- Cancel!
- Exist!
- Can't find!
- Add to playlist failed!
- Get user playlists failed!
- Creat playlist failed!
-
- No platforms!
- Save success!
- Save failed!
- Logout?
- Read playlists failed!
- Refresh playlists success!
- Refresh playlists failed!
- Delete track failed!
- Delete playlist failed!
- Delete all playlists?
- Delete this playlist?
- Please select a platform to upload.
- Please select tracks!
- To local success! Updata {0} tracks.
- "{0}" to local success! Updata {1} tracks.
- Username or password is error!
- Login failed!
+ Please search first!
+ Get new version file-url...
+ Creat update folder falied!
+ Start update...
+ Download complete, start update...
- Enter playlist url.
- Please enter the playlist link!
- Please login by {0} first!
- Url is wrong!
- Get playlist failed!
+ Get device code failed!
+ Username or password is err!
+ Login Err!
+ Search string is empty!
+ Search Err!
+ Please select one item!
+ Nothing to downlond!
+ Get track's album information failed!
+ Get artist's album information failed!
+ Remove task?
+ Open folder failed!
+ Get accesstoken success!
+ Refresh settings success!
+ Accesstoken is not valid!
+ User mismatch! Please use your own accesstoken.
-
+
TITLE
ARTISTS
ALBUM
+ TRACK
+ VIDEO
+ PLAYLIST
+ NAME
+ POPULARITY
DURATION
- ACT
+ TYPE
+ DATE
+ TIME
- Theme
- Language
- Search | Match
- Compare album title
- Compare track-live
- Cache path
- Platform enable
+ Path:
+ ThreadNum:
+ SearchNum:
+ AlbumFolderFormat:
+ TrackFileFormat:
+ VideoFileFormat:
+ Choose:
+ MaxLength:
+ Track:
+ Theme:
+ Language:
+ limit 1~3
+ limit 10~5
+ Search artist-album include single/ep
+ Download cover
+ file name length limit 50~100
+ album folder name length limit 50~100
+ Convert mp4 to m4a
+ Skipping exist file when downloading
\ No newline at end of file
diff --git a/TIDALDL-UI-PRO/Properties/Lang/StringResource.zh-CN.xaml b/TIDALDL-UI-PRO/Properties/Lang/StringResource.zh-CN.xaml
deleted file mode 100644
index 61e2167..0000000
--- a/TIDALDL-UI-PRO/Properties/Lang/StringResource.zh-CN.xaml
+++ /dev/null
@@ -1,91 +0,0 @@
-
-
-
- 确定
- 取消
- 删除
- 刷新
- 退出"
- 登录
- 到本地
- 上传
- 导入到
- 保存
- 关于
- 设置
- 反馈
- 群组
- 捐赠
- 微信
- 支付宝
- QQ音乐
- 网易云
- Spotify
- Tidal
-
-
- 平台
- 歌单
- 曲目数
- 版本
- 设置
- 用户名
- 密码
-
- 等待
- 成功
- 新增
- 错误
- 上传列表
-
-
- 等待!
- 成功!
- 取消!
- 已存在!
- 找不到!
- 添加到歌单失败!
- 获取用户歌单失败!
- 新建歌单失败!
- 没有平台!
- 保存成功!
- 保存失败!
- 退出登录?
- 读取本地歌单失败!
- 刷新歌单成功!
- 刷新歌单失败!
- 删除歌曲失败!
- 删除歌单失败!
- 删除全部歌单?
- 删除歌单?
- 请选择一个平台上传。
- 请选择歌曲!
- 歌单至本地成功! 更新了 {0} 首歌.
- "{0}" 至本地成功! 更新了 {1} 首歌.
- 用户名或密码错误!
- 登录失败!
-
- 请输入歌单链接.
- 请输入歌单链接!
- 请先通过 {0} 登录!
- 链接无效!
- 获取歌单失败!
-
-
- 标题
- 歌手
- 专辑
- 时长
- 操作
-
-
- 主题
- 语言
- 搜索 | 匹配
- 歌曲专辑名称需要一致
- 歌曲标题Live标志需要一致
- 缓存保存地址
- 启用的平台
-
\ No newline at end of file
diff --git a/TIDALDL-UI-PRO/TIDALDL-UI.csproj b/TIDALDL-UI-PRO/TIDALDL-UI.csproj
index 3b09807..685dc82 100644
--- a/TIDALDL-UI-PRO/TIDALDL-UI.csproj
+++ b/TIDALDL-UI-PRO/TIDALDL-UI.csproj
@@ -246,11 +246,19 @@
MSBuild:Compile
Designer
+
+ MSBuild:Compile
+ Designer
+
+
+ MSBuild:Compile
+ Designer
+
MSBuild:Compile
Designer
-
+
MSBuild:Compile
Designer
diff --git a/TIDALDL-UI-PRO/UPDATE_LOG.md b/TIDALDL-UI-PRO/UPDATE_LOG.md
index c958bd2..fc46013 100644
--- a/TIDALDL-UI-PRO/UPDATE_LOG.md
+++ b/TIDALDL-UI-PRO/UPDATE_LOG.md
@@ -1,7 +1,10 @@
-- [ ] Auto update
-- [ ] Multi-language
-
+#### v1.2.1.3
+- [x] Multi-language
+- [x] Show DOLBY_ATMOS flag [A]
+- [x] Search: turn page
+#### v1.2.1.2
+- [x] Auto update
- [x] Fix: download playlist
- [X] About-Page: show update-button when a new version released