Compare commits

...

9 Commits

Author SHA1 Message Date
David Nguyen 7bccd279a1
Merge 49ea1263e1 into 94e57208d3 2024-04-22 13:39:03 +02:00
Jaex 94e57208d3 Use googleapis.com/auth/drive.file scope 2024-04-22 09:00:17 +03:00
Jaex 019c9a7dae Code refactoring 2024-04-20 09:16:12 +03:00
David Nguyen 49ea1263e1
Merge branch 'ShareX:develop' into develop 2024-02-15 12:54:28 +07:00
David Nguyen d017019663
Merge branch 'ShareX:develop' into develop 2024-01-23 13:54:53 +07:00
David Nguyen aaf595e139
Merge branch 'ShareX:develop' into develop 2024-01-16 10:02:40 +07:00
David Nguyen f58255d606
Merge branch 'ShareX:develop' into develop 2024-01-11 08:52:06 +07:00
David Nguyen 54aea6b6be Add Vietnamese translations for various UI elements 2023-12-25 11:45:06 +07:00
David Nguyen 644601380c
Update the contributor information 2023-12-25 11:11:49 +07:00
29 changed files with 375 additions and 85 deletions

View File

@ -260,24 +260,24 @@ namespace ShareX.HelpersLib
return null; return null;
} }
private static Bitmap ApplyCutOutEffect(Bitmap bmp, AnchorStyles effectEdge, CutOutEffectType effectType, int effectSize, Color cutOutBackgroundColor) private static Bitmap ApplyCutOutEffect(Bitmap bmp, AnchorStyles effectEdge, CutOutEffectType effectType, int effectSize, Color backgroundColor)
{ {
switch (effectType) switch (effectType)
{ {
case CutOutEffectType.None: case CutOutEffectType.None:
return bmp; return bmp;
case CutOutEffectType.ZigZag: case CutOutEffectType.ZigZag:
return TornEdges(bmp, effectSize, effectSize, effectEdge, false, false, cutOutBackgroundColor); return TornEdges(bmp, effectSize, effectSize, effectEdge, false, false, backgroundColor);
case CutOutEffectType.TornEdge: case CutOutEffectType.TornEdge:
return TornEdges(bmp, effectSize, effectSize * 2, effectEdge, false, true, cutOutBackgroundColor); return TornEdges(bmp, effectSize, effectSize * 2, effectEdge, false, true, backgroundColor);
case CutOutEffectType.Wave: case CutOutEffectType.Wave:
return WavyEdges(bmp, effectSize, effectSize * 5, effectEdge, cutOutBackgroundColor); return WavyEdges(bmp, effectSize, effectSize * 5, effectEdge, backgroundColor);
} }
throw new NotImplementedException(); throw new NotImplementedException();
} }
public static Bitmap CutOutBitmapMiddle(Bitmap bmp, Orientation orientation, int start, int size, CutOutEffectType effectType, int effectSize, Color cutOutBackgroundColor) public static Bitmap CutOutBitmapMiddle(Bitmap bmp, Orientation orientation, int start, int size, CutOutEffectType effectType, int effectSize, Color backgroundColor)
{ {
if (bmp != null && size > 0) if (bmp != null && size > 0)
{ {
@ -290,7 +290,7 @@ namespace ShareX.HelpersLib
: new Rectangle(0, 0, bmp.Width, Math.Min(start, bmp.Height)); : new Rectangle(0, 0, bmp.Width, Math.Min(start, bmp.Height));
firstPart = CropBitmap(bmp, r); firstPart = CropBitmap(bmp, r);
AnchorStyles effectEdge = orientation == Orientation.Horizontal ? AnchorStyles.Right : AnchorStyles.Bottom; AnchorStyles effectEdge = orientation == Orientation.Horizontal ? AnchorStyles.Right : AnchorStyles.Bottom;
firstPart = ApplyCutOutEffect(firstPart, effectEdge, effectType, effectSize, cutOutBackgroundColor); firstPart = ApplyCutOutEffect(firstPart, effectEdge, effectType, effectSize, backgroundColor);
} }
int cutDimension = orientation == Orientation.Horizontal ? bmp.Width : bmp.Height; int cutDimension = orientation == Orientation.Horizontal ? bmp.Width : bmp.Height;
@ -302,7 +302,7 @@ namespace ShareX.HelpersLib
: new Rectangle(0, end, bmp.Width, bmp.Height - end); : new Rectangle(0, end, bmp.Width, bmp.Height - end);
secondPart = CropBitmap(bmp, r); secondPart = CropBitmap(bmp, r);
AnchorStyles effectEdge = orientation == Orientation.Horizontal ? AnchorStyles.Left : AnchorStyles.Top; AnchorStyles effectEdge = orientation == Orientation.Horizontal ? AnchorStyles.Left : AnchorStyles.Top;
secondPart = ApplyCutOutEffect(secondPart, effectEdge, effectType, effectSize, cutOutBackgroundColor); secondPart = ApplyCutOutEffect(secondPart, effectEdge, effectType, effectSize, backgroundColor);
} }
if (firstPart != null && secondPart != null) if (firstPart != null && secondPart != null)
@ -1844,7 +1844,12 @@ namespace ShareX.HelpersLib
} }
} }
public static Bitmap WavyEdges(Bitmap bmp, int waveDepth, int waveRange, AnchorStyles sides, Color cutOutBackgroundColor) public static Bitmap WavyEdges(Bitmap bmp, int waveDepth, int waveRange, AnchorStyles sides)
{
return WavyEdges(bmp, waveDepth, waveRange, sides, Color.Transparent);
}
public static Bitmap WavyEdges(Bitmap bmp, int waveDepth, int waveRange, AnchorStyles sides, Color backgroundColor)
{ {
if (waveDepth < 1 || waveRange < 1 || sides == AnchorStyles.None) if (waveDepth < 1 || waveRange < 1 || sides == AnchorStyles.None)
{ {
@ -1928,22 +1933,31 @@ namespace ShareX.HelpersLib
} }
Bitmap bmpResult = bmp.CreateEmptyBitmap(); Bitmap bmpResult = bmp.CreateEmptyBitmap();
using (bmp) using (bmp)
using (Graphics g = Graphics.FromImage(bmpResult)) using (Graphics g = Graphics.FromImage(bmpResult))
using (TextureBrush brush = new TextureBrush(bmp)) using (TextureBrush brush = new TextureBrush(bmp))
{ {
if (backgroundColor.A > 0)
{
g.Clear(backgroundColor);
}
g.SetHighQuality(); g.SetHighQuality();
g.PixelOffsetMode = PixelOffsetMode.Half; g.PixelOffsetMode = PixelOffsetMode.Half;
if (cutOutBackgroundColor.A > 0)
{
g.Clear(cutOutBackgroundColor);
}
g.FillPolygon(brush, points.ToArray()); g.FillPolygon(brush, points.ToArray());
} }
return bmpResult; return bmpResult;
} }
public static Bitmap TornEdges(Bitmap bmp, int tornDepth, int tornRange, AnchorStyles sides, bool curvedEdges, bool random, Color cutOutBackgroundColor) public static Bitmap TornEdges(Bitmap bmp, int tornDepth, int tornRange, AnchorStyles sides, bool curvedEdges, bool random)
{
return TornEdges(bmp, tornDepth, tornRange, sides, curvedEdges, random, Color.Transparent);
}
public static Bitmap TornEdges(Bitmap bmp, int tornDepth, int tornRange, AnchorStyles sides, bool curvedEdges, bool random, Color backgroundColor)
{ {
if (tornDepth < 1 || tornRange < 1 || sides == AnchorStyles.None) if (tornDepth < 1 || tornRange < 1 || sides == AnchorStyles.None)
{ {
@ -2030,12 +2044,13 @@ namespace ShareX.HelpersLib
using (Graphics g = Graphics.FromImage(bmpResult)) using (Graphics g = Graphics.FromImage(bmpResult))
using (TextureBrush brush = new TextureBrush(bmp)) using (TextureBrush brush = new TextureBrush(bmp))
{ {
if (backgroundColor.A > 0)
{
g.Clear(backgroundColor);
}
g.SetHighQuality(); g.SetHighQuality();
g.PixelOffsetMode = PixelOffsetMode.Half; g.PixelOffsetMode = PixelOffsetMode.Half;
if (cutOutBackgroundColor.A > 0)
{
g.Clear(cutOutBackgroundColor);
}
Point[] fillPoints = points.Distinct().ToArray(); Point[] fillPoints = points.Distinct().ToArray();

View File

@ -1234,4 +1234,13 @@ Bạn có muốn tải về không?</value>
<data name="HotkeyType_OCR" xml:space="preserve"> <data name="HotkeyType_OCR" xml:space="preserve">
<value>OCR</value> <value>OCR</value>
</data> </data>
<data name="HotkeyType_ImageBeautifier" xml:space="preserve">
<value>Làm đẹp hình ảnh</value>
</data>
<data name="AfterCaptureTasks_BeautifyImage" xml:space="preserve">
<value>Làm đẹp hình ảnh</value>
</data>
<data name="Check" xml:space="preserve">
<value>Kiểm tra</value>
</data>
</root> </root>

View File

@ -237,4 +237,7 @@
<data name="Total" xml:space="preserve"> <data name="Total" xml:space="preserve">
<value>Tổng</value> <value>Tổng</value>
</data> </data>
<data name="PinToScreen" xml:space="preserve">
<value>Ghim vào màn hình</value>
</data>
</root> </root>

View File

@ -26,7 +26,6 @@
using ShareX.HelpersLib; using ShareX.HelpersLib;
using System.ComponentModel; using System.ComponentModel;
using System.Drawing; using System.Drawing;
using System.Drawing.Design;
using System.Windows.Forms; using System.Windows.Forms;
namespace ShareX.ImageEffectsLib namespace ShareX.ImageEffectsLib
@ -46,9 +45,6 @@ namespace ShareX.ImageEffectsLib
[DefaultValue(true)] [DefaultValue(true)]
public bool CurvedEdges { get; set; } public bool CurvedEdges { get; set; }
[DefaultValue(typeof(Color), "Transparent"), Editor(typeof(MyColorEditor), typeof(UITypeEditor)), TypeConverter(typeof(MyColorConverter))]
public Color CutOutBackgroundColor { get; set; }
public TornEdge() public TornEdge()
{ {
this.ApplyDefaultPropertyValues(); this.ApplyDefaultPropertyValues();
@ -56,7 +52,7 @@ namespace ShareX.ImageEffectsLib
public override Bitmap Apply(Bitmap bmp) public override Bitmap Apply(Bitmap bmp)
{ {
return ImageHelpers.TornEdges(bmp, Depth, Range, Sides, CurvedEdges, true, CutOutBackgroundColor); return ImageHelpers.TornEdges(bmp, Depth, Range, Sides, CurvedEdges, true);
} }
protected override string GetSummary() protected override string GetSummary()

View File

@ -26,7 +26,6 @@
using ShareX.HelpersLib; using ShareX.HelpersLib;
using System.ComponentModel; using System.ComponentModel;
using System.Drawing; using System.Drawing;
using System.Drawing.Design;
using System.Windows.Forms; using System.Windows.Forms;
namespace ShareX.ImageEffectsLib namespace ShareX.ImageEffectsLib
@ -48,12 +47,9 @@ namespace ShareX.ImageEffectsLib
this.ApplyDefaultPropertyValues(); this.ApplyDefaultPropertyValues();
} }
[DefaultValue(typeof(Color), "Transparent"), Editor(typeof(MyColorEditor), typeof(UITypeEditor)), TypeConverter(typeof(MyColorConverter))]
public Color CutOutBackgroundColor { get; set; }
public override Bitmap Apply(Bitmap bmp) public override Bitmap Apply(Bitmap bmp)
{ {
return ImageHelpers.WavyEdges(bmp, Depth, Range, Sides, CutOutBackgroundColor); return ImageHelpers.WavyEdges(bmp, Depth, Range, Sides);
} }
protected override string GetSummary() protected override string GetSummary()

View File

@ -144,4 +144,28 @@
<data name="lblVideoQuality.Text" xml:space="preserve"> <data name="lblVideoQuality.Text" xml:space="preserve">
<value>Chất lượng video:</value> <value>Chất lượng video:</value>
</data> </data>
<data name="btnInputFilePathBrowse.Text" xml:space="preserve">
<value>...</value>
</data>
<data name="btnOutputFolderBrowse.Text" xml:space="preserve">
<value>...</value>
</data>
<data name="lblVideoEncoder.Text" xml:space="preserve">
<value>Bộ mã hóa video:</value>
</data>
<data name="lblVideoQualityValue.Text" xml:space="preserve">
<value>0</value>
</data>
<data name="lblVideoQualityHigher.Text" xml:space="preserve">
<value>xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -&gt; 99</value>
</data>
<data name="lblVideoQualityLower.Text" xml:space="preserve">
<value>99 &lt;- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</value>
</data>
<data name="lblVideoQualityBitrateHint.Text" xml:space="preserve">
<value>kbit/giây</value>
</data>
<data name="cbVideoQualityUseBitrate.Text" xml:space="preserve">
<value>Sử dụng tốc độ bit</value>
</data>
</root> </root>

View File

@ -156,4 +156,10 @@
<data name="StopEncoding" xml:space="preserve"> <data name="StopEncoding" xml:space="preserve">
<value>Dừng mã hóa</value> <value>Dừng mã hóa</value>
</data> </data>
<data name="WouldYouLikeToResetOptions" xml:space="preserve">
<value>Bạn có muốn đặt lại các tùy chọn không?</value>
</data>
<data name="Confirmation" xml:space="preserve">
<value>Xác nhận</value>
</data>
</root> </root>

View File

@ -132,4 +132,7 @@
<data name="btnOpenImageFile.Text" xml:space="preserve"> <data name="btnOpenImageFile.Text" xml:space="preserve">
<value>Mở tệp ảnh...</value> <value>Mở tệp ảnh...</value>
</data> </data>
<data name="btnLoadImageFromURL.Text" xml:space="preserve">
<value>Tải hình ảnh từ URL</value>
</data>
</root> </root>

View File

@ -301,4 +301,43 @@ Nếu không bộ thiết lập không thể theo kịp đoạn ghi hình và t
<data name="lblx264BitrateK.Text" xml:space="preserve"> <data name="lblx264BitrateK.Text" xml:space="preserve">
<value>kbit/giây</value> <value>kbit/giây</value>
</data> </data>
<data name="lblVideoEncoder.Text" xml:space="preserve">
<value>Bộ mã hóa video:</value>
</data>
<data name="lblAudioEncoder.Text" xml:space="preserve">
<value>Bộ mã hóa âm thanh:</value>
</data>
<data name="lblAACBitrateK.Text" xml:space="preserve">
<value>kbit/giây</value>
</data>
<data name="lblAACBitrate.Text" xml:space="preserve">
<value>Bitrate:</value>
</data>
<data name="lblOpusBitrateK.Text" xml:space="preserve">
<value>kbit/giây</value>
</data>
<data name="lblOpusBitrate.Text" xml:space="preserve">
<value>Bitrate:</value>
</data>
<data name="tpOpus.Text" xml:space="preserve">
<value>tác phẩm</value>
</data>
<data name="lblNVENCTune.Text" xml:space="preserve">
<value>Điều chỉnh:</value>
</data>
<data name="tpAMF.Text" xml:space="preserve">
<value>AMF</value>
</data>
<data name="lblAMFBitrateK.Text" xml:space="preserve">
<value>kbit/giây</value>
</data>
<data name="lblAMFBitrate.Text" xml:space="preserve">
<value>Bitrate:</value>
</data>
<data name="tpQSV.Text" xml:space="preserve">
<value>Đồng bộ hóa nhanh</value>
</data>
<data name="btnResetOptions.Text" xml:space="preserve">
<value>Đặt lại tùy chọn...</value>
</data>
</root> </root>

View File

@ -141,4 +141,7 @@
<data name="lblTimer.Text" xml:space="preserve"> <data name="lblTimer.Text" xml:space="preserve">
<value>00:00:00</value> <value>00:00:00</value>
</data> </data>
<data name="tsmiPause.Text" xml:space="preserve">
<value>Dừng</value>
</data>
</root> </root>

View File

@ -324,7 +324,7 @@ namespace ShareX.ScreenCaptureLib.Properties {
} }
/// <summary> /// <summary>
/// Looks up a localized string similar to Cut out background color. /// Looks up a localized string similar to Cut out background color....
/// </summary> /// </summary>
internal static string CutOutBackgroundColor { internal static string CutOutBackgroundColor {
get { get {

View File

@ -831,6 +831,6 @@ Would you like to save the changes before closing the image editor?</value>
<value>..\Resources\control-record-green.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> <value>..\Resources\control-record-green.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data> </data>
<data name="CutOutBackgroundColor" xml:space="preserve"> <data name="CutOutBackgroundColor" xml:space="preserve">
<value>Cut out background color</value> <value>Cut out background color...</value>
</data> </data>
</root> </root>

View File

@ -483,4 +483,13 @@
<data name="ShapeManager_CreateToolbar_ZoomToFitOnOpen" xml:space="preserve"> <data name="ShapeManager_CreateToolbar_ZoomToFitOnOpen" xml:space="preserve">
<value>Thu phóng để vừa mở</value> <value>Thu phóng để vừa mở</value>
</data> </data>
<data name="WouldYouLikeToResetOptions" xml:space="preserve">
<value>Bạn có muốn đặt lại các tùy chọn không?</value>
</data>
<data name="Confirmation" xml:space="preserve">
<value>Xác nhận</value>
</data>
<data name="ImageURL" xml:space="preserve">
<value>URL hình ảnh</value>
</data>
</root> </root>

View File

@ -89,7 +89,7 @@ namespace ShareX.UploadersLib.FileUploaders
{ {
OAuth2 = new GoogleOAuth2(oauth, this) OAuth2 = new GoogleOAuth2(oauth, this)
{ {
Scope = "https://www.googleapis.com/auth/drive https://www.googleapis.com/auth/userinfo.profile" Scope = "https://www.googleapis.com/auth/drive.file https://www.googleapis.com/auth/userinfo.profile"
}; };
} }

View File

@ -126,4 +126,7 @@
<data name="btnOK.Text" xml:space="preserve"> <data name="btnOK.Text" xml:space="preserve">
<value>Tweet</value> <value>Tweet</value>
</data> </data>
<data name="lblTweetLength.Text" xml:space="preserve">
<value>140</value>
</data>
</root> </root>

View File

@ -197,6 +197,7 @@ namespace ShareX.UploadersLib
this.cbOneDriveUseDirectLink = new System.Windows.Forms.CheckBox(); this.cbOneDriveUseDirectLink = new System.Windows.Forms.CheckBox();
this.oAuth2OneDrive = new ShareX.UploadersLib.OAuthControl(); this.oAuth2OneDrive = new ShareX.UploadersLib.OAuthControl();
this.tpGoogleDrive = new System.Windows.Forms.TabPage(); this.tpGoogleDrive = new System.Windows.Forms.TabPage();
this.btnGoogleDriveFolderIDHelp = new System.Windows.Forms.Button();
this.oauth2GoogleDrive = new ShareX.UploadersLib.OAuthLoopbackControl(); this.oauth2GoogleDrive = new ShareX.UploadersLib.OAuthLoopbackControl();
this.cbGoogleDriveSharedDrive = new System.Windows.Forms.ComboBox(); this.cbGoogleDriveSharedDrive = new System.Windows.Forms.ComboBox();
this.cbGoogleDriveDirectLink = new System.Windows.Forms.CheckBox(); this.cbGoogleDriveDirectLink = new System.Windows.Forms.CheckBox();
@ -1756,6 +1757,7 @@ namespace ShareX.UploadersLib
// tpGoogleDrive // tpGoogleDrive
// //
this.tpGoogleDrive.BackColor = System.Drawing.SystemColors.Window; this.tpGoogleDrive.BackColor = System.Drawing.SystemColors.Window;
this.tpGoogleDrive.Controls.Add(this.btnGoogleDriveFolderIDHelp);
this.tpGoogleDrive.Controls.Add(this.oauth2GoogleDrive); this.tpGoogleDrive.Controls.Add(this.oauth2GoogleDrive);
this.tpGoogleDrive.Controls.Add(this.cbGoogleDriveSharedDrive); this.tpGoogleDrive.Controls.Add(this.cbGoogleDriveSharedDrive);
this.tpGoogleDrive.Controls.Add(this.cbGoogleDriveDirectLink); this.tpGoogleDrive.Controls.Add(this.cbGoogleDriveDirectLink);
@ -1768,6 +1770,13 @@ namespace ShareX.UploadersLib
resources.ApplyResources(this.tpGoogleDrive, "tpGoogleDrive"); resources.ApplyResources(this.tpGoogleDrive, "tpGoogleDrive");
this.tpGoogleDrive.Name = "tpGoogleDrive"; this.tpGoogleDrive.Name = "tpGoogleDrive";
// //
// btnGoogleDriveFolderIDHelp
//
resources.ApplyResources(this.btnGoogleDriveFolderIDHelp, "btnGoogleDriveFolderIDHelp");
this.btnGoogleDriveFolderIDHelp.Name = "btnGoogleDriveFolderIDHelp";
this.btnGoogleDriveFolderIDHelp.UseVisualStyleBackColor = true;
this.btnGoogleDriveFolderIDHelp.Click += new System.EventHandler(this.btnGoogleDriveFolderIDHelp_Click);
//
// oauth2GoogleDrive // oauth2GoogleDrive
// //
resources.ApplyResources(this.oauth2GoogleDrive, "oauth2GoogleDrive"); resources.ApplyResources(this.oauth2GoogleDrive, "oauth2GoogleDrive");
@ -5495,5 +5504,6 @@ namespace ShareX.UploadersLib
private OAuthLoopbackControl oauth2GoogleCloudStorage; private OAuthLoopbackControl oauth2GoogleCloudStorage;
private System.Windows.Forms.TextBox txtAzureStorageCacheControl; private System.Windows.Forms.TextBox txtAzureStorageCacheControl;
private System.Windows.Forms.Label lblAzureStorageCacheControl; private System.Windows.Forms.Label lblAzureStorageCacheControl;
private System.Windows.Forms.Button btnGoogleDriveFolderIDHelp;
} }
} }

View File

@ -385,22 +385,25 @@ namespace ShareX.UploadersLib
#region Google Drive #region Google Drive
oauth2GoogleDrive.UpdateStatus(Config.GoogleDriveOAuth2Info, Config.GoogleDriveUserInfo); oauth2GoogleDrive.UpdateStatus(Config.GoogleDriveOAuth2Info, Config.GoogleDriveUserInfo);
btnGoogleDriveRefreshFolders.Enabled = oauth2GoogleDrive.Connected; //btnGoogleDriveRefreshFolders.Enabled = oauth2GoogleDrive.Connected;
cbGoogleDriveIsPublic.Checked = Config.GoogleDriveIsPublic; cbGoogleDriveIsPublic.Checked = Config.GoogleDriveIsPublic;
cbGoogleDriveDirectLink.Checked = Config.GoogleDriveDirectLink; cbGoogleDriveDirectLink.Checked = Config.GoogleDriveDirectLink;
/*
cbGoogleDriveSharedDrive.Items.Clear(); cbGoogleDriveSharedDrive.Items.Clear();
cbGoogleDriveSharedDrive.Items.Add(GoogleDrive.MyDrive); cbGoogleDriveSharedDrive.Items.Add(GoogleDrive.MyDrive);
if (Config.GoogleDriveSelectedDrive?.id != GoogleDrive.MyDrive.id) if (Config.GoogleDriveSelectedDrive?.id != GoogleDrive.MyDrive.id)
{ {
cbGoogleDriveSharedDrive.Items.Add(Config.GoogleDriveSelectedDrive); cbGoogleDriveSharedDrive.Items.Add(Config.GoogleDriveSelectedDrive);
} }
*/
cbGoogleDriveUseFolder.Checked = Config.GoogleDriveUseFolder; cbGoogleDriveUseFolder.Checked = Config.GoogleDriveUseFolder;
txtGoogleDriveFolderID.Enabled = Config.GoogleDriveUseFolder; txtGoogleDriveFolderID.Enabled = Config.GoogleDriveUseFolder;
btnGoogleDriveFolderIDHelp.Enabled = Config.GoogleDriveUseFolder;
txtGoogleDriveFolderID.Text = Config.GoogleDriveFolderID; txtGoogleDriveFolderID.Text = Config.GoogleDriveFolderID;
GoogleDriveSelectConfigDrive(); //GoogleDriveSelectConfigDrive();
#endregion Google Drive #endregion Google Drive
@ -1679,7 +1682,7 @@ namespace ShareX.UploadersLib
} }
oauth2GoogleDrive.UpdateStatus(Config.GoogleDriveOAuth2Info, Config.GoogleDriveUserInfo); oauth2GoogleDrive.UpdateStatus(Config.GoogleDriveOAuth2Info, Config.GoogleDriveUserInfo);
btnGoogleDriveRefreshFolders.Enabled = oauth2GoogleDrive.Connected; //btnGoogleDriveRefreshFolders.Enabled = oauth2GoogleDrive.Connected;
this.ForceActivate(); this.ForceActivate();
} }
@ -1704,6 +1707,7 @@ namespace ShareX.UploadersLib
{ {
Config.GoogleDriveUseFolder = cbGoogleDriveUseFolder.Checked; Config.GoogleDriveUseFolder = cbGoogleDriveUseFolder.Checked;
txtGoogleDriveFolderID.Enabled = Config.GoogleDriveUseFolder; txtGoogleDriveFolderID.Enabled = Config.GoogleDriveUseFolder;
btnGoogleDriveFolderIDHelp.Enabled = Config.GoogleDriveUseFolder;
} }
private void txtGoogleDriveFolderID_TextChanged(object sender, EventArgs e) private void txtGoogleDriveFolderID_TextChanged(object sender, EventArgs e)
@ -1711,6 +1715,14 @@ namespace ShareX.UploadersLib
Config.GoogleDriveFolderID = txtGoogleDriveFolderID.Text; Config.GoogleDriveFolderID = txtGoogleDriveFolderID.Text;
} }
private void btnGoogleDriveFolderIDHelp_Click(object sender, EventArgs e)
{
MessageBox.Show(@"Unfortunately, Google has forced us to use a more restrictive API scope, which does not allow us to see files or folders anymore. Because of this, we cannot provide folder listing and selection anymore.
However, there is a workaround. You can navigate to the Google Drive website in your browser, open the folder you want to upload to, and then copy the folder ID from the browser's address bar to here.",
"ShareX - Google Drive", MessageBoxButtons.OK, MessageBoxIcon.Question);
}
private void btnGoogleDriveRefreshFolders_Click(object sender, EventArgs e) private void btnGoogleDriveRefreshFolders_Click(object sender, EventArgs e)
{ {
GoogleDriveRefreshFolders(); GoogleDriveRefreshFolders();

View File

@ -459,7 +459,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
<value>oauthTwitter</value> <value>oauthTwitter</value>
</data> </data>
<data name="&gt;&gt;oauthTwitter.Type" xml:space="preserve"> <data name="&gt;&gt;oauthTwitter.Type" xml:space="preserve">
<value>ShareX.UploadersLib.OAuthControl, ShareX.UploadersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value> <value>ShareX.UploadersLib.OAuthControl, ShareX.UploadersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
</data> </data>
<data name="&gt;&gt;oauthTwitter.Parent" xml:space="preserve"> <data name="&gt;&gt;oauthTwitter.Parent" xml:space="preserve">
<value>tpTwitter</value> <value>tpTwitter</value>
@ -714,7 +714,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
<value>oauth2Bitly</value> <value>oauth2Bitly</value>
</data> </data>
<data name="&gt;&gt;oauth2Bitly.Type" xml:space="preserve"> <data name="&gt;&gt;oauth2Bitly.Type" xml:space="preserve">
<value>ShareX.UploadersLib.OAuthControl, ShareX.UploadersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value> <value>ShareX.UploadersLib.OAuthControl, ShareX.UploadersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
</data> </data>
<data name="&gt;&gt;oauth2Bitly.Parent" xml:space="preserve"> <data name="&gt;&gt;oauth2Bitly.Parent" xml:space="preserve">
<value>tpBitly</value> <value>tpBitly</value>
@ -2349,7 +2349,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
<value>eiFTP</value> <value>eiFTP</value>
</data> </data>
<data name="&gt;&gt;eiFTP.Type" xml:space="preserve"> <data name="&gt;&gt;eiFTP.Type" xml:space="preserve">
<value>ShareX.HelpersLib.ExportImportControl, ShareX.HelpersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value> <value>ShareX.HelpersLib.ExportImportControl, ShareX.HelpersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
</data> </data>
<data name="&gt;&gt;eiFTP.Parent" xml:space="preserve"> <data name="&gt;&gt;eiFTP.Parent" xml:space="preserve">
<value>gbFTPAccount</value> <value>gbFTPAccount</value>
@ -3555,7 +3555,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
<value>oauth2Dropbox</value> <value>oauth2Dropbox</value>
</data> </data>
<data name="&gt;&gt;oauth2Dropbox.Type" xml:space="preserve"> <data name="&gt;&gt;oauth2Dropbox.Type" xml:space="preserve">
<value>ShareX.UploadersLib.OAuthControl, ShareX.UploadersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value> <value>ShareX.UploadersLib.OAuthControl, ShareX.UploadersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
</data> </data>
<data name="&gt;&gt;oauth2Dropbox.Parent" xml:space="preserve"> <data name="&gt;&gt;oauth2Dropbox.Parent" xml:space="preserve">
<value>tpDropbox</value> <value>tpDropbox</value>
@ -3714,7 +3714,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
<value>oAuth2OneDrive</value> <value>oAuth2OneDrive</value>
</data> </data>
<data name="&gt;&gt;oAuth2OneDrive.Type" xml:space="preserve"> <data name="&gt;&gt;oAuth2OneDrive.Type" xml:space="preserve">
<value>ShareX.UploadersLib.OAuthControl, ShareX.UploadersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value> <value>ShareX.UploadersLib.OAuthControl, ShareX.UploadersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
</data> </data>
<data name="&gt;&gt;oAuth2OneDrive.Parent" xml:space="preserve"> <data name="&gt;&gt;oAuth2OneDrive.Parent" xml:space="preserve">
<value>tpOneDrive</value> <value>tpOneDrive</value>
@ -3723,13 +3723,13 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
<value>4</value> <value>4</value>
</data> </data>
<data name="tpOneDrive.Location" type="System.Drawing.Point, System.Drawing"> <data name="tpOneDrive.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 58</value> <value>4, 220</value>
</data> </data>
<data name="tpOneDrive.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms"> <data name="tpOneDrive.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 3</value> <value>3, 3, 3, 3</value>
</data> </data>
<data name="tpOneDrive.Size" type="System.Drawing.Size, System.Drawing"> <data name="tpOneDrive.Size" type="System.Drawing.Size, System.Drawing">
<value>803, 507</value> <value>178, 0</value>
</data> </data>
<data name="tpOneDrive.TabIndex" type="System.Int32, mscorlib"> <data name="tpOneDrive.TabIndex" type="System.Int32, mscorlib">
<value>17</value> <value>17</value>
@ -3749,6 +3749,30 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
<data name="&gt;&gt;tpOneDrive.ZOrder" xml:space="preserve"> <data name="&gt;&gt;tpOneDrive.ZOrder" xml:space="preserve">
<value>2</value> <value>2</value>
</data> </data>
<data name="btnGoogleDriveFolderIDHelp.Location" type="System.Drawing.Point, System.Drawing">
<value>424, 174</value>
</data>
<data name="btnGoogleDriveFolderIDHelp.Size" type="System.Drawing.Size, System.Drawing">
<value>24, 24</value>
</data>
<data name="btnGoogleDriveFolderIDHelp.TabIndex" type="System.Int32, mscorlib">
<value>6</value>
</data>
<data name="btnGoogleDriveFolderIDHelp.Text" xml:space="preserve">
<value>?</value>
</data>
<data name="&gt;&gt;btnGoogleDriveFolderIDHelp.Name" xml:space="preserve">
<value>btnGoogleDriveFolderIDHelp</value>
</data>
<data name="&gt;&gt;btnGoogleDriveFolderIDHelp.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;btnGoogleDriveFolderIDHelp.Parent" xml:space="preserve">
<value>tpGoogleDrive</value>
</data>
<data name="&gt;&gt;btnGoogleDriveFolderIDHelp.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="oauth2GoogleDrive.Location" type="System.Drawing.Point, System.Drawing"> <data name="oauth2GoogleDrive.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 8</value> <value>8, 8</value>
</data> </data>
@ -3762,22 +3786,25 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
<value>oauth2GoogleDrive</value> <value>oauth2GoogleDrive</value>
</data> </data>
<data name="&gt;&gt;oauth2GoogleDrive.Type" xml:space="preserve"> <data name="&gt;&gt;oauth2GoogleDrive.Type" xml:space="preserve">
<value>ShareX.UploadersLib.OAuthLoopbackControl, ShareX.UploadersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value> <value>ShareX.UploadersLib.OAuthLoopbackControl, ShareX.UploadersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
</data> </data>
<data name="&gt;&gt;oauth2GoogleDrive.Parent" xml:space="preserve"> <data name="&gt;&gt;oauth2GoogleDrive.Parent" xml:space="preserve">
<value>tpGoogleDrive</value> <value>tpGoogleDrive</value>
</data> </data>
<data name="&gt;&gt;oauth2GoogleDrive.ZOrder" xml:space="preserve"> <data name="&gt;&gt;oauth2GoogleDrive.ZOrder" xml:space="preserve">
<value>0</value> <value>1</value>
</data> </data>
<data name="cbGoogleDriveSharedDrive.Location" type="System.Drawing.Point, System.Drawing"> <data name="cbGoogleDriveSharedDrive.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 136</value> <value>16, 208</value>
</data> </data>
<data name="cbGoogleDriveSharedDrive.Size" type="System.Drawing.Size, System.Drawing"> <data name="cbGoogleDriveSharedDrive.Size" type="System.Drawing.Size, System.Drawing">
<value>256, 21</value> <value>256, 21</value>
</data> </data>
<data name="cbGoogleDriveSharedDrive.TabIndex" type="System.Int32, mscorlib"> <data name="cbGoogleDriveSharedDrive.TabIndex" type="System.Int32, mscorlib">
<value>3</value> <value>7</value>
</data>
<data name="cbGoogleDriveSharedDrive.Visible" type="System.Boolean, mscorlib">
<value>False</value>
</data> </data>
<data name="&gt;&gt;cbGoogleDriveSharedDrive.Name" xml:space="preserve"> <data name="&gt;&gt;cbGoogleDriveSharedDrive.Name" xml:space="preserve">
<value>cbGoogleDriveSharedDrive</value> <value>cbGoogleDriveSharedDrive</value>
@ -3789,7 +3816,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
<value>tpGoogleDrive</value> <value>tpGoogleDrive</value>
</data> </data>
<data name="&gt;&gt;cbGoogleDriveSharedDrive.ZOrder" xml:space="preserve"> <data name="&gt;&gt;cbGoogleDriveSharedDrive.ZOrder" xml:space="preserve">
<value>1</value> <value>2</value>
</data> </data>
<data name="cbGoogleDriveDirectLink.AutoSize" type="System.Boolean, mscorlib"> <data name="cbGoogleDriveDirectLink.AutoSize" type="System.Boolean, mscorlib">
<value>True</value> <value>True</value>
@ -3798,7 +3825,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
<value>NoControl</value> <value>NoControl</value>
</data> </data>
<data name="cbGoogleDriveDirectLink.Location" type="System.Drawing.Point, System.Drawing"> <data name="cbGoogleDriveDirectLink.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 111</value> <value>16, 112</value>
</data> </data>
<data name="cbGoogleDriveDirectLink.Size" type="System.Drawing.Size, System.Drawing"> <data name="cbGoogleDriveDirectLink.Size" type="System.Drawing.Size, System.Drawing">
<value>93, 17</value> <value>93, 17</value>
@ -3819,7 +3846,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
<value>tpGoogleDrive</value> <value>tpGoogleDrive</value>
</data> </data>
<data name="&gt;&gt;cbGoogleDriveDirectLink.ZOrder" xml:space="preserve"> <data name="&gt;&gt;cbGoogleDriveDirectLink.ZOrder" xml:space="preserve">
<value>2</value> <value>3</value>
</data> </data>
<data name="cbGoogleDriveUseFolder.AutoSize" type="System.Boolean, mscorlib"> <data name="cbGoogleDriveUseFolder.AutoSize" type="System.Boolean, mscorlib">
<value>True</value> <value>True</value>
@ -3828,13 +3855,13 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
<value>NoControl</value> <value>NoControl</value>
</data> </data>
<data name="cbGoogleDriveUseFolder.Location" type="System.Drawing.Point, System.Drawing"> <data name="cbGoogleDriveUseFolder.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 167</value> <value>16, 136</value>
</data> </data>
<data name="cbGoogleDriveUseFolder.Size" type="System.Drawing.Size, System.Drawing"> <data name="cbGoogleDriveUseFolder.Size" type="System.Drawing.Size, System.Drawing">
<value>165, 17</value> <value>165, 17</value>
</data> </data>
<data name="cbGoogleDriveUseFolder.TabIndex" type="System.Int32, mscorlib"> <data name="cbGoogleDriveUseFolder.TabIndex" type="System.Int32, mscorlib">
<value>5</value> <value>3</value>
</data> </data>
<data name="cbGoogleDriveUseFolder.Text" xml:space="preserve"> <data name="cbGoogleDriveUseFolder.Text" xml:space="preserve">
<value>Upload files to selected folder</value> <value>Upload files to selected folder</value>
@ -3849,16 +3876,16 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
<value>tpGoogleDrive</value> <value>tpGoogleDrive</value>
</data> </data>
<data name="&gt;&gt;cbGoogleDriveUseFolder.ZOrder" xml:space="preserve"> <data name="&gt;&gt;cbGoogleDriveUseFolder.ZOrder" xml:space="preserve">
<value>3</value> <value>4</value>
</data> </data>
<data name="txtGoogleDriveFolderID.Location" type="System.Drawing.Point, System.Drawing"> <data name="txtGoogleDriveFolderID.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 208</value> <value>16, 176</value>
</data> </data>
<data name="txtGoogleDriveFolderID.Size" type="System.Drawing.Size, System.Drawing"> <data name="txtGoogleDriveFolderID.Size" type="System.Drawing.Size, System.Drawing">
<value>432, 20</value> <value>400, 20</value>
</data> </data>
<data name="txtGoogleDriveFolderID.TabIndex" type="System.Int32, mscorlib"> <data name="txtGoogleDriveFolderID.TabIndex" type="System.Int32, mscorlib">
<value>7</value> <value>5</value>
</data> </data>
<data name="&gt;&gt;txtGoogleDriveFolderID.Name" xml:space="preserve"> <data name="&gt;&gt;txtGoogleDriveFolderID.Name" xml:space="preserve">
<value>txtGoogleDriveFolderID</value> <value>txtGoogleDriveFolderID</value>
@ -3870,7 +3897,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
<value>tpGoogleDrive</value> <value>tpGoogleDrive</value>
</data> </data>
<data name="&gt;&gt;txtGoogleDriveFolderID.ZOrder" xml:space="preserve"> <data name="&gt;&gt;txtGoogleDriveFolderID.ZOrder" xml:space="preserve">
<value>4</value> <value>5</value>
</data> </data>
<data name="lblGoogleDriveFolderID.AutoSize" type="System.Boolean, mscorlib"> <data name="lblGoogleDriveFolderID.AutoSize" type="System.Boolean, mscorlib">
<value>True</value> <value>True</value>
@ -3879,13 +3906,13 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
<value>NoControl</value> <value>NoControl</value>
</data> </data>
<data name="lblGoogleDriveFolderID.Location" type="System.Drawing.Point, System.Drawing"> <data name="lblGoogleDriveFolderID.Location" type="System.Drawing.Point, System.Drawing">
<value>13, 191</value> <value>13, 160</value>
</data> </data>
<data name="lblGoogleDriveFolderID.Size" type="System.Drawing.Size, System.Drawing"> <data name="lblGoogleDriveFolderID.Size" type="System.Drawing.Size, System.Drawing">
<value>53, 13</value> <value>53, 13</value>
</data> </data>
<data name="lblGoogleDriveFolderID.TabIndex" type="System.Int32, mscorlib"> <data name="lblGoogleDriveFolderID.TabIndex" type="System.Int32, mscorlib">
<value>6</value> <value>4</value>
</data> </data>
<data name="lblGoogleDriveFolderID.Text" xml:space="preserve"> <data name="lblGoogleDriveFolderID.Text" xml:space="preserve">
<value>Folder ID:</value> <value>Folder ID:</value>
@ -3900,7 +3927,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
<value>tpGoogleDrive</value> <value>tpGoogleDrive</value>
</data> </data>
<data name="&gt;&gt;lblGoogleDriveFolderID.ZOrder" xml:space="preserve"> <data name="&gt;&gt;lblGoogleDriveFolderID.ZOrder" xml:space="preserve">
<value>5</value> <value>6</value>
</data> </data>
<data name="chGoogleDriveTitle.Text" xml:space="preserve"> <data name="chGoogleDriveTitle.Text" xml:space="preserve">
<value>Title</value> <value>Title</value>
@ -3915,25 +3942,28 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
<value>228</value> <value>228</value>
</data> </data>
<data name="lvGoogleDriveFoldersList.Location" type="System.Drawing.Point, System.Drawing"> <data name="lvGoogleDriveFoldersList.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 232</value> <value>16, 240</value>
</data> </data>
<data name="lvGoogleDriveFoldersList.Size" type="System.Drawing.Size, System.Drawing"> <data name="lvGoogleDriveFoldersList.Size" type="System.Drawing.Size, System.Drawing">
<value>432, 296</value> <value>432, 296</value>
</data> </data>
<data name="lvGoogleDriveFoldersList.TabIndex" type="System.Int32, mscorlib"> <data name="lvGoogleDriveFoldersList.TabIndex" type="System.Int32, mscorlib">
<value>8</value> <value>9</value>
</data>
<data name="lvGoogleDriveFoldersList.Visible" type="System.Boolean, mscorlib">
<value>False</value>
</data> </data>
<data name="&gt;&gt;lvGoogleDriveFoldersList.Name" xml:space="preserve"> <data name="&gt;&gt;lvGoogleDriveFoldersList.Name" xml:space="preserve">
<value>lvGoogleDriveFoldersList</value> <value>lvGoogleDriveFoldersList</value>
</data> </data>
<data name="&gt;&gt;lvGoogleDriveFoldersList.Type" xml:space="preserve"> <data name="&gt;&gt;lvGoogleDriveFoldersList.Type" xml:space="preserve">
<value>ShareX.HelpersLib.MyListView, ShareX.HelpersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value> <value>ShareX.HelpersLib.MyListView, ShareX.HelpersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
</data> </data>
<data name="&gt;&gt;lvGoogleDriveFoldersList.Parent" xml:space="preserve"> <data name="&gt;&gt;lvGoogleDriveFoldersList.Parent" xml:space="preserve">
<value>tpGoogleDrive</value> <value>tpGoogleDrive</value>
</data> </data>
<data name="&gt;&gt;lvGoogleDriveFoldersList.ZOrder" xml:space="preserve"> <data name="&gt;&gt;lvGoogleDriveFoldersList.ZOrder" xml:space="preserve">
<value>6</value> <value>7</value>
</data> </data>
<data name="btnGoogleDriveRefreshFolders.Enabled" type="System.Boolean, mscorlib"> <data name="btnGoogleDriveRefreshFolders.Enabled" type="System.Boolean, mscorlib">
<value>False</value> <value>False</value>
@ -3942,17 +3972,20 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
<value>NoControl</value> <value>NoControl</value>
</data> </data>
<data name="btnGoogleDriveRefreshFolders.Location" type="System.Drawing.Point, System.Drawing"> <data name="btnGoogleDriveRefreshFolders.Location" type="System.Drawing.Point, System.Drawing">
<value>280, 135</value> <value>280, 208</value>
</data> </data>
<data name="btnGoogleDriveRefreshFolders.Size" type="System.Drawing.Size, System.Drawing"> <data name="btnGoogleDriveRefreshFolders.Size" type="System.Drawing.Size, System.Drawing">
<value>168, 23</value> <value>168, 23</value>
</data> </data>
<data name="btnGoogleDriveRefreshFolders.TabIndex" type="System.Int32, mscorlib"> <data name="btnGoogleDriveRefreshFolders.TabIndex" type="System.Int32, mscorlib">
<value>4</value> <value>8</value>
</data> </data>
<data name="btnGoogleDriveRefreshFolders.Text" xml:space="preserve"> <data name="btnGoogleDriveRefreshFolders.Text" xml:space="preserve">
<value>Refresh folders list</value> <value>Refresh folders list</value>
</data> </data>
<data name="btnGoogleDriveRefreshFolders.Visible" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="&gt;&gt;btnGoogleDriveRefreshFolders.Name" xml:space="preserve"> <data name="&gt;&gt;btnGoogleDriveRefreshFolders.Name" xml:space="preserve">
<value>btnGoogleDriveRefreshFolders</value> <value>btnGoogleDriveRefreshFolders</value>
</data> </data>
@ -3963,7 +3996,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
<value>tpGoogleDrive</value> <value>tpGoogleDrive</value>
</data> </data>
<data name="&gt;&gt;btnGoogleDriveRefreshFolders.ZOrder" xml:space="preserve"> <data name="&gt;&gt;btnGoogleDriveRefreshFolders.ZOrder" xml:space="preserve">
<value>7</value> <value>8</value>
</data> </data>
<data name="cbGoogleDriveIsPublic.AutoSize" type="System.Boolean, mscorlib"> <data name="cbGoogleDriveIsPublic.AutoSize" type="System.Boolean, mscorlib">
<value>True</value> <value>True</value>
@ -3975,13 +4008,13 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
<value>16, 88</value> <value>16, 88</value>
</data> </data>
<data name="cbGoogleDriveIsPublic.Size" type="System.Drawing.Size, System.Drawing"> <data name="cbGoogleDriveIsPublic.Size" type="System.Drawing.Size, System.Drawing">
<value>106, 17</value> <value>90, 17</value>
</data> </data>
<data name="cbGoogleDriveIsPublic.TabIndex" type="System.Int32, mscorlib"> <data name="cbGoogleDriveIsPublic.TabIndex" type="System.Int32, mscorlib">
<value>1</value> <value>1</value>
</data> </data>
<data name="cbGoogleDriveIsPublic.Text" xml:space="preserve"> <data name="cbGoogleDriveIsPublic.Text" xml:space="preserve">
<value>Is public upload?</value> <value>Public upload</value>
</data> </data>
<data name="&gt;&gt;cbGoogleDriveIsPublic.Name" xml:space="preserve"> <data name="&gt;&gt;cbGoogleDriveIsPublic.Name" xml:space="preserve">
<value>cbGoogleDriveIsPublic</value> <value>cbGoogleDriveIsPublic</value>
@ -3993,16 +4026,16 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
<value>tpGoogleDrive</value> <value>tpGoogleDrive</value>
</data> </data>
<data name="&gt;&gt;cbGoogleDriveIsPublic.ZOrder" xml:space="preserve"> <data name="&gt;&gt;cbGoogleDriveIsPublic.ZOrder" xml:space="preserve">
<value>8</value> <value>9</value>
</data> </data>
<data name="tpGoogleDrive.Location" type="System.Drawing.Point, System.Drawing"> <data name="tpGoogleDrive.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 220</value> <value>4, 58</value>
</data> </data>
<data name="tpGoogleDrive.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms"> <data name="tpGoogleDrive.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 3</value> <value>3, 3, 3, 3</value>
</data> </data>
<data name="tpGoogleDrive.Size" type="System.Drawing.Size, System.Drawing"> <data name="tpGoogleDrive.Size" type="System.Drawing.Size, System.Drawing">
<value>178, 0</value> <value>803, 507</value>
</data> </data>
<data name="tpGoogleDrive.TabIndex" type="System.Int32, mscorlib"> <data name="tpGoogleDrive.TabIndex" type="System.Int32, mscorlib">
<value>1</value> <value>1</value>
@ -4392,7 +4425,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
<value>lvBoxFolders</value> <value>lvBoxFolders</value>
</data> </data>
<data name="&gt;&gt;lvBoxFolders.Type" xml:space="preserve"> <data name="&gt;&gt;lvBoxFolders.Type" xml:space="preserve">
<value>ShareX.HelpersLib.MyListView, ShareX.HelpersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value> <value>ShareX.HelpersLib.MyListView, ShareX.HelpersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
</data> </data>
<data name="&gt;&gt;lvBoxFolders.Parent" xml:space="preserve"> <data name="&gt;&gt;lvBoxFolders.Parent" xml:space="preserve">
<value>tpBox</value> <value>tpBox</value>
@ -4473,7 +4506,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
<value>oauth2Box</value> <value>oauth2Box</value>
</data> </data>
<data name="&gt;&gt;oauth2Box.Type" xml:space="preserve"> <data name="&gt;&gt;oauth2Box.Type" xml:space="preserve">
<value>ShareX.UploadersLib.OAuthControl, ShareX.UploadersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value> <value>ShareX.UploadersLib.OAuthControl, ShareX.UploadersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
</data> </data>
<data name="&gt;&gt;oauth2Box.Parent" xml:space="preserve"> <data name="&gt;&gt;oauth2Box.Parent" xml:space="preserve">
<value>tpBox</value> <value>tpBox</value>
@ -5352,7 +5385,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
<value>oauth2GoogleCloudStorage</value> <value>oauth2GoogleCloudStorage</value>
</data> </data>
<data name="&gt;&gt;oauth2GoogleCloudStorage.Type" xml:space="preserve"> <data name="&gt;&gt;oauth2GoogleCloudStorage.Type" xml:space="preserve">
<value>ShareX.UploadersLib.OAuthLoopbackControl, ShareX.UploadersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value> <value>ShareX.UploadersLib.OAuthLoopbackControl, ShareX.UploadersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
</data> </data>
<data name="&gt;&gt;oauth2GoogleCloudStorage.Parent" xml:space="preserve"> <data name="&gt;&gt;oauth2GoogleCloudStorage.Parent" xml:space="preserve">
<value>tpGoogleCloudStorage</value> <value>tpGoogleCloudStorage</value>
@ -7824,7 +7857,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
<value>atcSendSpaceAccountType</value> <value>atcSendSpaceAccountType</value>
</data> </data>
<data name="&gt;&gt;atcSendSpaceAccountType.Type" xml:space="preserve"> <data name="&gt;&gt;atcSendSpaceAccountType.Type" xml:space="preserve">
<value>ShareX.UploadersLib.AccountTypeControl, ShareX.UploadersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value> <value>ShareX.UploadersLib.AccountTypeControl, ShareX.UploadersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
</data> </data>
<data name="&gt;&gt;atcSendSpaceAccountType.Parent" xml:space="preserve"> <data name="&gt;&gt;atcSendSpaceAccountType.Parent" xml:space="preserve">
<value>tpSendSpace</value> <value>tpSendSpace</value>
@ -8193,7 +8226,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
<value>oAuthJira</value> <value>oAuthJira</value>
</data> </data>
<data name="&gt;&gt;oAuthJira.Type" xml:space="preserve"> <data name="&gt;&gt;oAuthJira.Type" xml:space="preserve">
<value>ShareX.UploadersLib.OAuthControl, ShareX.UploadersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value> <value>ShareX.UploadersLib.OAuthControl, ShareX.UploadersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
</data> </data>
<data name="&gt;&gt;oAuthJira.Parent" xml:space="preserve"> <data name="&gt;&gt;oAuthJira.Parent" xml:space="preserve">
<value>tpJira</value> <value>tpJira</value>
@ -8772,7 +8805,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt
<value>lvSeafileLibraries</value> <value>lvSeafileLibraries</value>
</data> </data>
<data name="&gt;&gt;lvSeafileLibraries.Type" xml:space="preserve"> <data name="&gt;&gt;lvSeafileLibraries.Type" xml:space="preserve">
<value>ShareX.HelpersLib.MyListView, ShareX.HelpersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value> <value>ShareX.HelpersLib.MyListView, ShareX.HelpersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
</data> </data>
<data name="&gt;&gt;lvSeafileLibraries.Parent" xml:space="preserve"> <data name="&gt;&gt;lvSeafileLibraries.Parent" xml:space="preserve">
<value>tpSeafile</value> <value>tpSeafile</value>
@ -10531,7 +10564,7 @@ Using an encrypted library disables sharing.</value>
<value>oauth2YouTube</value> <value>oauth2YouTube</value>
</data> </data>
<data name="&gt;&gt;oauth2YouTube.Type" xml:space="preserve"> <data name="&gt;&gt;oauth2YouTube.Type" xml:space="preserve">
<value>ShareX.UploadersLib.OAuthLoopbackControl, ShareX.UploadersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value> <value>ShareX.UploadersLib.OAuthLoopbackControl, ShareX.UploadersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
</data> </data>
<data name="&gt;&gt;oauth2YouTube.Parent" xml:space="preserve"> <data name="&gt;&gt;oauth2YouTube.Parent" xml:space="preserve">
<value>tpYouTube</value> <value>tpYouTube</value>
@ -12265,7 +12298,7 @@ Using an encrypted library disables sharing.</value>
<value>oAuth2Gist</value> <value>oAuth2Gist</value>
</data> </data>
<data name="&gt;&gt;oAuth2Gist.Type" xml:space="preserve"> <data name="&gt;&gt;oAuth2Gist.Type" xml:space="preserve">
<value>ShareX.UploadersLib.OAuthControl, ShareX.UploadersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value> <value>ShareX.UploadersLib.OAuthControl, ShareX.UploadersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
</data> </data>
<data name="&gt;&gt;oAuth2Gist.Parent" xml:space="preserve"> <data name="&gt;&gt;oAuth2Gist.Parent" xml:space="preserve">
<value>tpGist</value> <value>tpGist</value>
@ -12904,7 +12937,7 @@ Using an encrypted library disables sharing.</value>
<value>atcImgurAccountType</value> <value>atcImgurAccountType</value>
</data> </data>
<data name="&gt;&gt;atcImgurAccountType.Type" xml:space="preserve"> <data name="&gt;&gt;atcImgurAccountType.Type" xml:space="preserve">
<value>ShareX.UploadersLib.AccountTypeControl, ShareX.UploadersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value> <value>ShareX.UploadersLib.AccountTypeControl, ShareX.UploadersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
</data> </data>
<data name="&gt;&gt;atcImgurAccountType.Parent" xml:space="preserve"> <data name="&gt;&gt;atcImgurAccountType.Parent" xml:space="preserve">
<value>tpImgur</value> <value>tpImgur</value>
@ -12925,7 +12958,7 @@ Using an encrypted library disables sharing.</value>
<value>oauth2Imgur</value> <value>oauth2Imgur</value>
</data> </data>
<data name="&gt;&gt;oauth2Imgur.Type" xml:space="preserve"> <data name="&gt;&gt;oauth2Imgur.Type" xml:space="preserve">
<value>ShareX.UploadersLib.OAuthControl, ShareX.UploadersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value> <value>ShareX.UploadersLib.OAuthControl, ShareX.UploadersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
</data> </data>
<data name="&gt;&gt;oauth2Imgur.Parent" xml:space="preserve"> <data name="&gt;&gt;oauth2Imgur.Parent" xml:space="preserve">
<value>tpImgur</value> <value>tpImgur</value>
@ -12961,7 +12994,7 @@ Using an encrypted library disables sharing.</value>
<value>lvImgurAlbumList</value> <value>lvImgurAlbumList</value>
</data> </data>
<data name="&gt;&gt;lvImgurAlbumList.Type" xml:space="preserve"> <data name="&gt;&gt;lvImgurAlbumList.Type" xml:space="preserve">
<value>ShareX.HelpersLib.MyListView, ShareX.HelpersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value> <value>ShareX.HelpersLib.MyListView, ShareX.HelpersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
</data> </data>
<data name="&gt;&gt;lvImgurAlbumList.Parent" xml:space="preserve"> <data name="&gt;&gt;lvImgurAlbumList.Parent" xml:space="preserve">
<value>tpImgur</value> <value>tpImgur</value>
@ -13360,7 +13393,7 @@ Using an encrypted library disables sharing.</value>
<value>oauthFlickr</value> <value>oauthFlickr</value>
</data> </data>
<data name="&gt;&gt;oauthFlickr.Type" xml:space="preserve"> <data name="&gt;&gt;oauthFlickr.Type" xml:space="preserve">
<value>ShareX.UploadersLib.OAuthControl, ShareX.UploadersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value> <value>ShareX.UploadersLib.OAuthControl, ShareX.UploadersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
</data> </data>
<data name="&gt;&gt;oauthFlickr.Parent" xml:space="preserve"> <data name="&gt;&gt;oauthFlickr.Parent" xml:space="preserve">
<value>tpFlickr</value> <value>tpFlickr</value>
@ -13897,7 +13930,7 @@ Using an encrypted library disables sharing.</value>
<value>oauth2GooglePhotos</value> <value>oauth2GooglePhotos</value>
</data> </data>
<data name="&gt;&gt;oauth2GooglePhotos.Type" xml:space="preserve"> <data name="&gt;&gt;oauth2GooglePhotos.Type" xml:space="preserve">
<value>ShareX.UploadersLib.OAuthLoopbackControl, ShareX.UploadersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value> <value>ShareX.UploadersLib.OAuthLoopbackControl, ShareX.UploadersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
</data> </data>
<data name="&gt;&gt;oauth2GooglePhotos.Parent" xml:space="preserve"> <data name="&gt;&gt;oauth2GooglePhotos.Parent" xml:space="preserve">
<value>tpGooglePhotos</value> <value>tpGooglePhotos</value>
@ -14557,7 +14590,7 @@ Using an encrypted library disables sharing.</value>
<value>tttvMain</value> <value>tttvMain</value>
</data> </data>
<data name="&gt;&gt;tttvMain.Type" xml:space="preserve"> <data name="&gt;&gt;tttvMain.Type" xml:space="preserve">
<value>ShareX.HelpersLib.TabToTreeView, ShareX.HelpersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value> <value>ShareX.HelpersLib.TabToTreeView, ShareX.HelpersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
</data> </data>
<data name="&gt;&gt;tttvMain.Parent" xml:space="preserve"> <data name="&gt;&gt;tttvMain.Parent" xml:space="preserve">
<value>$this</value> <value>$this</value>
@ -14578,7 +14611,7 @@ Using an encrypted library disables sharing.</value>
<value>actRapidShareAccountType</value> <value>actRapidShareAccountType</value>
</data> </data>
<data name="&gt;&gt;actRapidShareAccountType.Type" xml:space="preserve"> <data name="&gt;&gt;actRapidShareAccountType.Type" xml:space="preserve">
<value>ShareX.UploadersLib.AccountTypeControl, ShareX.UploadersLib, Version=15.0.1.0, Culture=neutral, PublicKeyToken=null</value> <value>ShareX.UploadersLib.AccountTypeControl, ShareX.UploadersLib, Version=16.0.3.0, Culture=neutral, PublicKeyToken=null</value>
</data> </data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value> <value>True</value>

View File

@ -1287,4 +1287,13 @@ Sử dụng thư viện được mã hóa sẽ vô hiệu hóa chia sẻ.</value
<data name="cbOneDriveUseDirectLink.Text" xml:space="preserve"> <data name="cbOneDriveUseDirectLink.Text" xml:space="preserve">
<value>Dùng liên kết trực tiếp</value> <value>Dùng liên kết trực tiếp</value>
</data> </data>
<data name="tpZeroWidthShortener.Text" xml:space="preserve">
<value>Bộ rút ngắn chiều rộng bằng không</value>
</data>
<data name="lblAzureStorageCacheControl.Text" xml:space="preserve">
<value>Tiêu đề kiểm soát bộ đệm:</value>
</data>
<data name="llYouTubePermissionsLink.Text" xml:space="preserve">
<value>https://myaccount.google.com/permissions</value>
</data>
</root> </root>

View File

@ -280,4 +280,10 @@ Các thư mục đã tạo:</value>
<data name="URL" xml:space="preserve"> <data name="URL" xml:space="preserve">
<value>URL</value> <value>URL</value>
</data> </data>
<data name="Disconnect" xml:space="preserve">
<value>Xóa ủy quyền</value>
</data>
<data name="Connect" xml:space="preserve">
<value>Bước 1: Mở trang ủy quyền...</value>
</data>
</root> </root>

View File

@ -85,7 +85,7 @@ McoreD: {Links.McoreD}
{Resources.AboutForm_AboutForm_Language_es}: https://github.com/ovnisoftware {Resources.AboutForm_AboutForm_Language_es}: https://github.com/ovnisoftware
{Resources.AboutForm_AboutForm_Language_nl_NL}: https://github.com/canihavesomecoffee {Resources.AboutForm_AboutForm_Language_nl_NL}: https://github.com/canihavesomecoffee
{Resources.AboutForm_AboutForm_Language_pt_BR}: https://github.com/RockyTV & https://github.com/athosbr99 {Resources.AboutForm_AboutForm_Language_pt_BR}: https://github.com/RockyTV & https://github.com/athosbr99
{Resources.AboutForm_AboutForm_Language_vi_VN}: https://github.com/thanhpd {Resources.AboutForm_AboutForm_Language_vi_VN}: https://github.com/hoangsvit & https://github.com/thanhpd
{Resources.AboutForm_AboutForm_Language_ru}: https://github.com/L1Q {Resources.AboutForm_AboutForm_Language_ru}: https://github.com/L1Q
{Resources.AboutForm_AboutForm_Language_zh_TW}: https://github.com/alantsai {Resources.AboutForm_AboutForm_Language_zh_TW}: https://github.com/alantsai
{Resources.AboutForm_AboutForm_Language_it_IT}: https://github.com/pjammo {Resources.AboutForm_AboutForm_Language_it_IT}: https://github.com/pjammo

View File

@ -132,4 +132,7 @@
<data name="lblBuild.Text" xml:space="preserve"> <data name="lblBuild.Text" xml:space="preserve">
<value>Phiên bản</value> <value>Phiên bản</value>
</data> </data>
<data name="lblProductName.Text" xml:space="preserve">
<value>ShareX</value>
</data>
</root> </root>

View File

@ -438,4 +438,10 @@
<data name="tpSettings.Text" xml:space="preserve"> <data name="tpSettings.Text" xml:space="preserve">
<value>Cài đặt</value> <value>Cài đặt</value>
</data> </data>
<data name="cbAutoCheckUpdate.Text" xml:space="preserve">
<value>Tự động kiểm tra cập nhật</value>
</data>
<data name="lblThumbnailViewThumbnailSizeX.Text" xml:space="preserve">
<value>x</value>
</data>
</root> </root>

View File

@ -132,4 +132,16 @@
<data name="btnRefresh.Text" xml:space="preserve"> <data name="btnRefresh.Text" xml:space="preserve">
<value>Làm mới</value> <value>Làm mới</value>
</data> </data>
<data name="cbTopMost.Text" xml:space="preserve">
<value>Top nhất</value>
</data>
<data name="lblOpacity.Text" xml:space="preserve">
<value>Độ mờ:</value>
</data>
<data name="lblOpacityTip.Text" xml:space="preserve">
<value>%</value>
</data>
<data name="mbWindowList.Text" xml:space="preserve">
<value>Danh sách cửa sổ</value>
</data>
</root> </root>

View File

@ -789,4 +789,37 @@
<data name="tsmiTrayOCR.Text" xml:space="preserve"> <data name="tsmiTrayOCR.Text" xml:space="preserve">
<value>OCR...</value> <value>OCR...</value>
</data> </data>
<data name="tsmiImageBeautifier.Text" xml:space="preserve">
<value>Làm đẹp hình ảnh...</value>
</data>
<data name="tsmiHashChecker.Text" xml:space="preserve">
<value>Trình kiểm tra hàm băm...</value>
</data>
<data name="tsbTwitter.Text" xml:space="preserve">
<value>Twitter...</value>
</data>
<data name="tsbDiscord.Text" xml:space="preserve">
<value>Bất hòa...</value>
</data>
<data name="tsmiBeautifyImage.Text" xml:space="preserve">
<value>Làm đẹp hình ảnh...</value>
</data>
<data name="tsmiPinSelectedFile.ShortcutKeyDisplayString" xml:space="preserve">
<value>Ctrl+P</value>
</data>
<data name="niTray.Text" xml:space="preserve">
<value>ShareX</value>
</data>
<data name="tsmiTrayImageBeautifier.Text" xml:space="preserve">
<value>Làm đẹp hình ảnh...</value>
</data>
<data name="tsmiTrayHashChecker.Text" xml:space="preserve">
<value>Trình kiểm tra hàm băm...</value>
</data>
<data name="cHotkey.HeaderText" xml:space="preserve">
<value>Phím tắt</value>
</data>
<data name="cDescription.HeaderText" xml:space="preserve">
<value>Mô tả</value>
</data>
</root> </root>

View File

@ -147,4 +147,31 @@
<data name="lblDecodeResult.Text" xml:space="preserve"> <data name="lblDecodeResult.Text" xml:space="preserve">
<value>Kết quả:</value> <value>Kết quả:</value>
</data> </data>
<data name="lblQRCodeSizeHint.Text" xml:space="preserve">
<value>px</value>
</data>
<data name="lblQRCodeSize.Text" xml:space="preserve">
<value>Kích thước mã QR:</value>
</data>
<data name="lblQRCode.Text" xml:space="preserve">
<value>Mã QR:</value>
</data>
<data name="lblText.Text" xml:space="preserve">
<value>Văn bản:</value>
</data>
<data name="btnCopyImage.Text" xml:space="preserve">
<value>Sao chép ảnh</value>
</data>
<data name="btnSaveImage.Text" xml:space="preserve">
<value>Lưu ảnh...</value>
</data>
<data name="btnUploadImage.Text" xml:space="preserve">
<value>Tải lên ảnh</value>
</data>
<data name="btnScanQRCodeFromScreen.Text" xml:space="preserve">
<value>Quét mã QR từ màn hình...</value>
</data>
<data name="btnScanQRCodeFromImageFile.Text" xml:space="preserve">
<value>Quét mã QR từ file hình ảnh...</value>
</data>
</root> </root>

View File

@ -660,4 +660,19 @@
<data name="tpNotifications.Text" xml:space="preserve"> <data name="tpNotifications.Text" xml:space="preserve">
<value>Thông báo</value> <value>Thông báo</value>
</data> </data>
<data name="btnCustomErrorSoundPath.Text" xml:space="preserve">
<value>...</value>
</data>
<data name="btnCustomTaskCompletedSoundPath.Text" xml:space="preserve">
<value>...</value>
</data>
<data name="btnCustomCaptureSoundPath.Text" xml:space="preserve">
<value>...</value>
</data>
<data name="lblToastWindowSizeX.Text" xml:space="preserve">
<value>x</value>
</data>
<data name="cbUseRandomImageEffect.Text" xml:space="preserve">
<value>Sử dụng hiệu ứng hình ảnh ngẫu nhiên</value>
</data>
</root> </root>

View File

@ -141,4 +141,7 @@
<data name="cbMoveToScreenshotsFolder.Text" xml:space="preserve"> <data name="cbMoveToScreenshotsFolder.Text" xml:space="preserve">
<value>Di chuyển tệp vào thư mục ảnh chụp màn hình</value> <value>Di chuyển tệp vào thư mục ảnh chụp màn hình</value>
</data> </data>
<data name="btnPathBrowse.Text" xml:space="preserve">
<value>...</value>
</data>
</root> </root>

View File

@ -637,4 +637,19 @@ Sau đó, bạn có thể tắt nó từ menu "Sau khi chụp tác vụ".</value
<data name="YourSystemAdminDisabledTheUploadFeature" xml:space="preserve"> <data name="YourSystemAdminDisabledTheUploadFeature" xml:space="preserve">
<value>Quản trị viên hệ thống của bạn đã tắt tính năng tải lên.</value> <value>Quản trị viên hệ thống của bạn đã tắt tính năng tải lên.</value>
</data> </data>
<data name="AboutForm_AboutForm_Language_he-IL" xml:space="preserve">
<value>tiếng Do Thái</value>
</data>
<data name="ShareXCannotBeClosedWhileScreenRecordingIsActive" xml:space="preserve">
<value>Không thể đóng ShareX khi tính năng ghi màn hình đang hoạt động.</value>
</data>
<data name="ShareXIsUpToDate" xml:space="preserve">
<value>ShareX đã được cập nhật!</value>
</data>
<data name="ClipboardUpload" xml:space="preserve">
<value>Tải lên từ vùng nhớ tạm</value>
</data>
<data name="WouldYouLikeToRetryClipboardUpload" xml:space="preserve">
<value>Bạn có muốn thử tải lên bảng nhớ tạm lần nữa không?</value>
</data>
</root> </root>