diff --git a/FoxTube/Assets/Data/Patchnotes.xml b/FoxTube/Assets/Data/Patchnotes.xml
index 6d33fcb..89f0965 100644
--- a/FoxTube/Assets/Data/Patchnotes.xml
+++ b/FoxTube/Assets/Data/Patchnotes.xml
@@ -16,6 +16,8 @@
- Added "Share" button to video cards
- Added "Delete video from playlist" button to video cards on playlist page\
- Improved channel cover quality
+- If available, shows localized titles and descriptions (based on "Search relevance language" parameter set in settings)
+- Updated russian localization
### Что нового:
- Оптимизация приложения
@@ -31,6 +33,8 @@
- Добавлена кнопка "Поделиться" к видео карточкам
- Добавлена кнопка "Удалить видео из плейлиста" к видео карточкам на страницах плейлистов
- Улучшено качество обложки канала
+- Показывает локализированные заголовки и описания если доступны (основан на параметре "Предпочитаемый язык поиска" установленного в настройках)
+- Обновлена русская локализация
diff --git a/FoxTube/Classes/SecretsVault.cs b/FoxTube/Classes/SecretsVault.cs
index affa15c..d92c748 100644
--- a/FoxTube/Classes/SecretsVault.cs
+++ b/FoxTube/Classes/SecretsVault.cs
@@ -42,9 +42,9 @@ namespace FoxTube
};
public static YouTubeService Service => IsAuthorized ? new YouTubeService(Initializer) : NoAuthService;
public static HttpClient HttpClient { get; } = new HttpClient();
- private static bool TestAds => true; //Change this bool
+ private static bool TestAds => false; //Change this bool
public static string AppId => TestAds ? "d25517cb-12d4-4699-8bdc-52040c712cab" : "9ncqqxjtdlfh";
- public static string AdUnitId => TestAds ? "test" : "1100037769";
+ public static string AdUnitId => TestAds ? "test" : "1100044398";
public static bool AdsDisabled { get; private set; } = true;
//User info
diff --git a/FoxTube/Controls/Adverts/CardAdvert.xaml b/FoxTube/Controls/Adverts/CardAdvert.xaml
index 9711087..c947886 100644
--- a/FoxTube/Controls/Adverts/CardAdvert.xaml
+++ b/FoxTube/Controls/Adverts/CardAdvert.xaml
@@ -9,6 +9,7 @@
VerticalAlignment="Top"
d:DesignHeight="290"
d:DesignWidth="384"
+ Visibility="Collapsed"
Opacity="0"
Name="card">
diff --git a/FoxTube/Controls/Adverts/CardAdvert.xaml.cs b/FoxTube/Controls/Adverts/CardAdvert.xaml.cs
index c39c37a..3fe093c 100644
--- a/FoxTube/Controls/Adverts/CardAdvert.xaml.cs
+++ b/FoxTube/Controls/Adverts/CardAdvert.xaml.cs
@@ -25,7 +25,7 @@ namespace FoxTube.Controls.Adverts
private void Methods_VideoPageSizeChanged(object sender = null, params object[] args)
{
- Visibility = (bool)args[0] ? Visibility.Collapsed : Visibility.Visible;
+ Visibility = !(bool)args[0] && advert != null ? Visibility.Visible : Visibility.Collapsed;
}
private void ErrorOccurred(object sender, NativeAdErrorEventArgs e)
@@ -42,6 +42,7 @@ namespace FoxTube.Controls.Adverts
public void Initialize()
{
+ Visibility = Visibility.Visible;
title.Text = advert.Title;
image.Source = new BitmapImage(advert.MainImages.First().Url.ToUri());
diff --git a/FoxTube/Controls/Player/VideoPlayer.xaml.cs b/FoxTube/Controls/Player/VideoPlayer.xaml.cs
index 032dde6..21f4739 100644
--- a/FoxTube/Controls/Player/VideoPlayer.xaml.cs
+++ b/FoxTube/Controls/Player/VideoPlayer.xaml.cs
@@ -44,7 +44,7 @@ namespace FoxTube
avatar = channelAvatar;
videoSource.PosterSource = new BitmapImage((meta.Snippet.Thumbnails.Maxres ?? meta.Snippet.Thumbnails.Medium).Url.ToUri());
- Controls.SetMeta(meta.Snippet.Title, meta.Snippet.ChannelTitle);
+ Controls.SetMeta(meta.Snippet.Localized.Title, meta.Snippet.ChannelTitle);
if (item.Snippet.LiveBroadcastContent == "none")
{
diff --git a/FoxTube/Controls/PlaylistCard.xaml.cs b/FoxTube/Controls/PlaylistCard.xaml.cs
index 867d365..5c802b2 100644
--- a/FoxTube/Controls/PlaylistCard.xaml.cs
+++ b/FoxTube/Controls/PlaylistCard.xaml.cs
@@ -34,9 +34,10 @@ namespace FoxTube.Controls
playlistId = id;
PlaylistsResource.ListRequest request = SecretsVault.Service.Playlists.List("snippet,contentDetails");
request.Id = playlistId;
+ request.Hl = SettingsStorage.RelevanceLanguage;
item = (await request.ExecuteAsync()).Items[0];
- title.Text = item.Snippet.Title;
+ title.Text = item.Snippet.Localized.Title;
channelName.Text = item.Snippet.ChannelTitle;
counter.Text = item.ContentDetails.ItemCount.ToString();
date.Text = Methods.GetAgo(item.Snippet.PublishedAt.Value);
diff --git a/FoxTube/Controls/VideoCard.xaml b/FoxTube/Controls/VideoCard.xaml
index 626fc25..1794833 100644
--- a/FoxTube/Controls/VideoCard.xaml
+++ b/FoxTube/Controls/VideoCard.xaml
@@ -83,13 +83,13 @@
-
-
-
-
+
+
+
+
-
+
diff --git a/FoxTube/Controls/VideoCard.xaml.cs b/FoxTube/Controls/VideoCard.xaml.cs
index 99ba584..41b23c8 100644
--- a/FoxTube/Controls/VideoCard.xaml.cs
+++ b/FoxTube/Controls/VideoCard.xaml.cs
@@ -53,9 +53,10 @@ namespace FoxTube.Controls
VideosResource.ListRequest request = SecretsVault.Service.Videos.List("snippet,contentDetails,statistics,liveStreamingDetails");
request.Id = id;
+ request.Hl = SettingsStorage.RelevanceLanguage;
item = (await request.ExecuteAsync()).Items[0];
- title.Text = item.Snippet.Title;
+ title.Text = item.Snippet.Localized.Title;
channelName.Text = item.Snippet.ChannelTitle;
if (item.Snippet.Title == "Deleted video")
@@ -123,7 +124,6 @@ namespace FoxTube.Controls
{
try
{
- // TODO: Localize context menu
MediaStreamInfoSet infoSet = await new YoutubeClient().GetVideoMediaStreamInfosAsync(videoId);
foreach (MuxedStreamInfo i in infoSet.Muxed)
{
@@ -276,31 +276,30 @@ namespace FoxTube.Controls
private async void NewPlaylist_Click(object sender, RoutedEventArgs e)
{
- // TODO: Localize strings
StackPanel stack = new StackPanel();
stack.Children.Add(new TextBox
{
- PlaceholderText = "Enter playlist name"
+ PlaceholderText = resources.GetString("/VideoPage/newPlaylistName/PlaceholderText")
});
ComboBox comboBox = new ComboBox
{
- Header = "Availablity",
+ Header = resources.GetString("/VideoPage/privacy/Header"),
SelectedIndex = 0,
HorizontalAlignment = HorizontalAlignment.Stretch
};
- comboBox.Items.Add(new ComboBoxItem { Content = "Public" });
- comboBox.Items.Add(new ComboBoxItem { Content = "Private" });
- comboBox.Items.Add(new ComboBoxItem { Content = "Direct link" });
+ comboBox.Items.Add(new ComboBoxItem { Content = resources.GetString("/VideoPage/public/Content") });
+ comboBox.Items.Add(new ComboBoxItem { Content = resources.GetString("/VideoPage/private/Content") });
+ comboBox.Items.Add(new ComboBoxItem { Content = resources.GetString("/VideoPage/direct/Content") });
stack.Children.Add(comboBox);
ContentDialog playlistDialog = new ContentDialog
{
- PrimaryButtonText = "Create and add",
- CloseButtonText = "Cancel",
+ PrimaryButtonText = resources.GetString("/VideoPage/dialog/PrimaryButtonText"),
+ CloseButtonText = resources.GetString("/VideoPage/dialog/CloseButtonText"),
DefaultButton = ContentDialogButton.Primary,
- Title = "New playlist",
+ Title = resources.GetString("/VideoPage/dialog/Title"),
Content = stack
};
playlistDialog.PrimaryButtonClick += PlaylistDialog_PrimaryButtonClick;
@@ -450,18 +449,18 @@ namespace FoxTube.Controls
private async void Delete_Click(object sender, RoutedEventArgs e)
{
- PlaylistItemsResource.ListRequest request = SecretsVault.Service.PlaylistItems.List("snippet");
- request.PlaylistId = playlistId;
- request.VideoId = item.Id;
- PlaylistItemListResponse response = await request.ExecuteAsync();
-
- PlaylistItem playlistItem = response.Items.Find(i => i.Snippet.PlaylistId == playlistId);
-
- await SecretsVault.Service.PlaylistItems.Delete(playlistItem.Id).ExecuteAsync();
-
- (Methods.MainPage.PageContent as PlaylistPage).DeleteItem(this);
try
{
+ PlaylistItemsResource.ListRequest request = SecretsVault.Service.PlaylistItems.List("snippet");
+ request.PlaylistId = playlistId;
+ request.VideoId = item.Id;
+ PlaylistItemListResponse response = await request.ExecuteAsync();
+
+ PlaylistItem playlistItem = response.Items.Find(i => i.Snippet.PlaylistId == playlistId);
+
+ await SecretsVault.Service.PlaylistItems.Delete(playlistItem.Id).ExecuteAsync();
+
+ (Methods.MainPage.PageContent as PlaylistPage).DeleteItem(this);
}
catch
{
diff --git a/FoxTube/Pages/MainPage.xaml b/FoxTube/Pages/MainPage.xaml
index 64aad07..c01bd43 100644
--- a/FoxTube/Pages/MainPage.xaml
+++ b/FoxTube/Pages/MainPage.xaml
@@ -38,7 +38,7 @@
-
+
diff --git a/FoxTube/Pages/MainPage.xaml.cs b/FoxTube/Pages/MainPage.xaml.cs
index f00d180..14ede21 100644
--- a/FoxTube/Pages/MainPage.xaml.cs
+++ b/FoxTube/Pages/MainPage.xaml.cs
@@ -47,10 +47,10 @@ namespace FoxTube
removeAds.Visibility = (e[0] as bool?).Value ? Visibility.Collapsed : Visibility.Visible;
if (!(bool)e[0])
return;
- //TODO: Localize strings
- MessageDialog dialog = new MessageDialog("Thanks for purchasing full version of the app (^∇^) In order to complete changes we need to reopen it. But you can do it later");
- dialog.Commands.Add(new UICommand("Close the app", (command) => Methods.CloseApp()));
- dialog.Commands.Add(new UICommand("Later"));
+
+ MessageDialog dialog = new MessageDialog(resources.GetString("/Main/purchaseSuccess"));
+ dialog.Commands.Add(new UICommand(resources.GetString("/Main/close"), (command) => Methods.CloseApp()));
+ dialog.Commands.Add(new UICommand(resources.GetString("/Main/delay")));
dialog.CancelCommandIndex = 1;
dialog.DefaultCommandIndex = 0;
await dialog.ShowAsync();
@@ -83,22 +83,21 @@ namespace FoxTube
async void PromptFeedback()
{
- //TODO: Localize strings
if (SettingsStorage.Uptime.TotalHours >= 12 && SettingsStorage.PromptFeedback)
{
- MessageDialog dialog = new MessageDialog("Have some thoughts to share about the app or any suggestions? Leave feedback!");
- dialog.Commands.Add(new UICommand("Don't ask me anymore", (command) => SettingsStorage.PromptFeedback = false));
- dialog.Commands.Add(new UICommand("Maybe later"));
- dialog.Commands.Add(new UICommand("Sure!", async (command) =>
+ MessageDialog dialog = new MessageDialog(resources.GetString("/Main/feedbackMessage"));
+ dialog.Commands.Add(new UICommand(resources.GetString("/Main/dontAsk"), (command) => SettingsStorage.PromptFeedback = false));
+ dialog.Commands.Add(new UICommand(resources.GetString("/Main/promptLater")));
+ dialog.Commands.Add(new UICommand(resources.GetString("/Main/sure"), async (command) =>
{
SettingsStorage.PromptFeedback = false;
if (StoreServicesFeedbackLauncher.IsSupported())
await StoreServicesFeedbackLauncher.GetDefault().LaunchAsync();
else
{
- MessageDialog message = new MessageDialog("Oops. Seems like you don't have a Feedback Hub app. But you can stil send your feedback to michael.xfox@outlook.com");
- message.Commands.Add(new UICommand("Send an E-mail", async (c) => await Launcher.LaunchUriAsync("mailto:michael.xfox@outlook.com".ToUri())));
- message.Commands.Add(new UICommand("Nevermind. Get me back"));
+ MessageDialog message = new MessageDialog(resources.GetString("/Main/feedbackFail"));
+ message.Commands.Add(new UICommand(resources.GetString("/Main/sendEmail"), async (c) => await Launcher.LaunchUriAsync("mailto:michael.xfox@outlook.com".ToUri())));
+ message.Commands.Add(new UICommand(resources.GetString("/Main/goBack")));
message.CancelCommandIndex = 1;
message.DefaultCommandIndex = 0;
await message.ShowAsync();
@@ -111,10 +110,10 @@ namespace FoxTube
if (SettingsStorage.Uptime.TotalHours >= 24 && SettingsStorage.PromptReview)
{
- MessageDialog dialog = new MessageDialog("Like our app? Review it on Microsoft Store!");
- dialog.Commands.Add(new UICommand("Don't ask me anymore", (command) => SettingsStorage.PromptReview = false));
- dialog.Commands.Add(new UICommand("Maybe later"));
- dialog.Commands.Add(new UICommand("Sure!", async (command) =>
+ MessageDialog dialog = new MessageDialog(resources.GetString("/Main/rate"));
+ dialog.Commands.Add(new UICommand(resources.GetString("/Main/dontAsk"), (command) => SettingsStorage.PromptReview = false));
+ dialog.Commands.Add(new UICommand(resources.GetString("/Main/promptLater")));
+ dialog.Commands.Add(new UICommand(resources.GetString("/Main/sure"), async (command) =>
{
SettingsStorage.PromptReview = false;
await Launcher.LaunchUriAsync("ms-windows-store://review/?ProductId=9NCQQXJTDLFH".ToUri());
diff --git a/FoxTube/Pages/PlaylistPage.xaml.cs b/FoxTube/Pages/PlaylistPage.xaml.cs
index 8e154b2..2e8e04d 100644
--- a/FoxTube/Pages/PlaylistPage.xaml.cs
+++ b/FoxTube/Pages/PlaylistPage.xaml.cs
@@ -54,12 +54,13 @@ namespace FoxTube.Pages
PlaylistsResource.ListRequest infoRequest = SecretsVault.Service.Playlists.List("snippet,contentDetails");
infoRequest.Id = id;
+ infoRequest.Hl = SettingsStorage.RelevanceLanguage;
item = (await infoRequest.ExecuteAsync()).Items[0];
- title.Text = item.Snippet.Title;
+ title.Text = item.Snippet.Localized.Title;
info.Text = $"{item.ContentDetails.ItemCount} {ResourceLoader.GetForCurrentView("Playlist").GetString("/Playlist/videos")}";
- description.Text = item.Snippet.Description;
+ description.Text = item.Snippet.Localized.Description;
channelName.Text = item.Snippet.ChannelTitle;
diff --git a/FoxTube/Pages/SettingsPages/General.xaml b/FoxTube/Pages/SettingsPages/General.xaml
index 0b44e9d..1bd03f3 100644
--- a/FoxTube/Pages/SettingsPages/General.xaml
+++ b/FoxTube/Pages/SettingsPages/General.xaml
@@ -18,7 +18,7 @@
-
+
diff --git a/FoxTube/Pages/VideoPage.xaml b/FoxTube/Pages/VideoPage.xaml
index 4fd9279..ed989d0 100644
--- a/FoxTube/Pages/VideoPage.xaml
+++ b/FoxTube/Pages/VideoPage.xaml
@@ -112,8 +112,8 @@
-
-
+
+
@@ -163,13 +163,13 @@
-
+
-
-
-
-
-
+
+
+
+
+
diff --git a/FoxTube/Pages/VideoPage.xaml.cs b/FoxTube/Pages/VideoPage.xaml.cs
index 0645b1f..0bbcdef 100644
--- a/FoxTube/Pages/VideoPage.xaml.cs
+++ b/FoxTube/Pages/VideoPage.xaml.cs
@@ -113,6 +113,7 @@ namespace FoxTube.Pages
VideosResource.ListRequest request = SecretsVault.Service.Videos.List("snippet,statistics,status,contentDetails,liveStreamingDetails");
request.Id = ids[0];
+ request.Hl = SettingsStorage.RelevanceLanguage;
item = (await request.ExecuteAsync()).Items[0];
if (item.Snippet.LiveBroadcastContent == "none")
@@ -183,6 +184,7 @@ namespace FoxTube.Pages
//Retrieving data
PlaylistsResource.ListRequest playlistRequest = SecretsVault.Service.Playlists.List("snippet,contentDetails");
playlistRequest.Id = id;
+ playlistRequest.Hl = SettingsStorage.RelevanceLanguage;
Playlist playlistItem = (await playlistRequest.ExecuteAsync()).Items[0];
PlaylistItemsResource.ListRequest listRequest = SecretsVault.Service.PlaylistItems.List("snippet");
@@ -206,7 +208,7 @@ namespace FoxTube.Pages
items[k].Number = k + 1;
//Setting data
- playlistName.Text = playlistItem.Snippet.Title;
+ playlistName.Text = playlistItem.Snippet.Localized.Title;
playlistChannel.Text = playlistItem.Snippet.ChannelTitle;
playlistCounter.Text = $"{items.IndexOf(selection) + 1}/{playlistItem.ContentDetails.ItemCount}";
@@ -226,9 +228,9 @@ namespace FoxTube.Pages
async void LoadInfo()
{
//Setting meta
- title.Text = item.Snippet.Title;
+ title.Text = item.Snippet.Localized.Title;
date.Text = $"{resources.GetString("/VideoPage/publishedAt")}: {item.Snippet.PublishedAt} ({Methods.GetAgo(item.Snippet.PublishedAt.Value)})";
- Methods.FormatText(ref description, item.Snippet.Description);
+ Methods.FormatText(ref description, item.Snippet.Localized.Description);
//Setting channel button
ChannelsResource.ListRequest channelRequest = SecretsVault.Service.Channels.List("snippet, statistics");
@@ -652,7 +654,6 @@ namespace FoxTube.Pages
private async void NewPlaylist_Click(object sender, RoutedEventArgs e)
{
- //TODO: Localize strings
await playlistDialog.ShowAsync();
}
diff --git a/FoxTube/Strings/en-US/Cards.resw b/FoxTube/Strings/en-US/Cards.resw
index ab86fa0..c435418 100644
--- a/FoxTube/Strings/en-US/Cards.resw
+++ b/FoxTube/Strings/en-US/Cards.resw
@@ -186,4 +186,13 @@
Watched
+
+ Add to
+
+
+ Delete from playlist
+
+
+ Downloads
+
\ No newline at end of file
diff --git a/FoxTube/Strings/en-US/General.resw b/FoxTube/Strings/en-US/General.resw
index a60bc4f..e5d2758 100644
--- a/FoxTube/Strings/en-US/General.resw
+++ b/FoxTube/Strings/en-US/General.resw
@@ -184,7 +184,7 @@
Remember my choice
- Reopen the app to apply changes
+ Reopen the app to apply changes (otherwise some elements may not be displayed correctly)
Russian (Russian Federation)
@@ -204,4 +204,7 @@
Recieve messages from developers
+
+ Search relevance language
+
\ No newline at end of file
diff --git a/FoxTube/Strings/en-US/Main.resw b/FoxTube/Strings/en-US/Main.resw
index c0e8941..61f9bae 100644
--- a/FoxTube/Strings/en-US/Main.resw
+++ b/FoxTube/Strings/en-US/Main.resw
@@ -126,18 +126,36 @@
Channel
+
+ Close the app
+
We were unabled to retrieve your account information due to weak internet connection or Google servers' problems. PLease, try again later
Failed to connect
+
+ Later
+
+
+ Don't ask me anymore
+
Downloads
Give a feedback
+
+ Oops. Seems like you don't have a Feedback Hub app. But you can stil send your feedback to michael.xfox@outlook.com
+
+
+ Have some thoughts to share about the app or any suggestions? Leave feedback!
+
+
+ Nevermind. Get me back
+
History
@@ -168,12 +186,24 @@
Playlist
+
+ Maybe later
+
+
+ Thanks for purchasing full version of the app (^∇^) In order to complete changes we need to reopen it. But you can do it later (some elements may be broken)
+
Quit
+
+ Like our app? Review it on Microsoft Store!
+
Search
+
+ Send an E-mail
+
Settings
@@ -192,6 +222,9 @@
Subscriptions
+
+ Sure!
+
Try again
diff --git a/FoxTube/Strings/en-US/VideoPage.resw b/FoxTube/Strings/en-US/VideoPage.resw
index fc4cf51..bc61c46 100644
--- a/FoxTube/Strings/en-US/VideoPage.resw
+++ b/FoxTube/Strings/en-US/VideoPage.resw
@@ -264,4 +264,34 @@
Published at
+
+ Cancel
+
+
+ Create and add
+
+
+ New playlist
+
+
+ Direct link
+
+
+ New playlist
+
+
+ Enter playlist name
+
+
+ Availability
+
+
+ Private
+
+
+ Public
+
+
+ Watch later
+
\ No newline at end of file
diff --git a/FoxTube/Strings/ru-RU/Cards.resw b/FoxTube/Strings/ru-RU/Cards.resw
index 4f0137a..2e61389 100644
--- a/FoxTube/Strings/ru-RU/Cards.resw
+++ b/FoxTube/Strings/ru-RU/Cards.resw
@@ -186,4 +186,13 @@
Просмотрено
+
+ Добавить в
+
+
+ Удалить из плейлиста
+
+
+ Загрузки
+
\ No newline at end of file
diff --git a/FoxTube/Strings/ru-RU/General.resw b/FoxTube/Strings/ru-RU/General.resw
index fcac5fb..667f827 100644
--- a/FoxTube/Strings/ru-RU/General.resw
+++ b/FoxTube/Strings/ru-RU/General.resw
@@ -184,7 +184,7 @@
Запомнить мой выбор
- Перезапустите приложение, чтобы применить настройки
+ Перезапустите приложение, чтобы применить настройки (в противном случае некоторые элементы могут неправильно отображаться)
Русский (Российская Федерация)
@@ -204,4 +204,7 @@
Получать уведомления от разработчиков
+
+ Предпочитаемый язык поиска
+
\ No newline at end of file
diff --git a/FoxTube/Strings/ru-RU/Main.resw b/FoxTube/Strings/ru-RU/Main.resw
index 340c01e..56a9cd4 100644
--- a/FoxTube/Strings/ru-RU/Main.resw
+++ b/FoxTube/Strings/ru-RU/Main.resw
@@ -126,18 +126,36 @@
Канал
+
+ Закрыть приложение
+
Нам не удалось подключиться к серверу из-за плохого соединения или проблем на стороне YouTube. Пожалуйста, попробуйте позже
Не удалось подключиться
+
+ Позже
+
+
+ Больше не спрашивайте меня
+
Загрузки
Оставить отзыв
+
+ Ой. Похоже, у вас нет приложения "Центр отзывов". Но вы все еще можете отправить свой отзыв по почте
+
+
+ Есть мысли или идеи по поводу нашего приложения? Оставьте отзыв!
+
+
+ Не важно. Я передумал
+
История
@@ -168,12 +186,24 @@
Плейлист
+
+ Может, позже
+
+
+ Спасибо за покупку полной версии приложения (^∇^) Для завершения настройки нам необходимо перезапустить приложение. Но вы можете сделать это позже (некоторые элементы могут неправильно отображаться)
+
Выйти
+
+ Нравится наше приложение? Напишите отзыв в магазине Майкрософт!
+
Поиск
+
+ Отправить письмо
+
Настройки
@@ -192,6 +222,9 @@
Подписки
+
+ Конечно!
+
Попробовать снова
diff --git a/FoxTube/Strings/ru-RU/VideoPage.resw b/FoxTube/Strings/ru-RU/VideoPage.resw
index 228d6e3..856b119 100644
--- a/FoxTube/Strings/ru-RU/VideoPage.resw
+++ b/FoxTube/Strings/ru-RU/VideoPage.resw
@@ -264,4 +264,34 @@
Опубликовано
+
+ Отмена
+
+
+ Создать и добавить
+
+
+ Новый плейлист
+
+
+ Прямая ссылка
+
+
+ Новый плейлист
+
+
+ Введите название плейлиста
+
+
+ Доступность
+
+
+ Закрытый
+
+
+ Публичный
+
+
+ Посмотреть позже
+
\ No newline at end of file