mirror of
https://github.com/JustArchiNET/ArchiSteamFarm.git
synced 2025-12-16 14:30:31 +00:00
Compare commits
14 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2347925b1c | ||
|
|
c400f05ed6 | ||
|
|
32648ac010 | ||
|
|
a7424702c9 | ||
|
|
8b4cee21fd | ||
|
|
4deaf0a17a | ||
|
|
205f995667 | ||
|
|
cb6f7d5b2e | ||
|
|
b1b0677ed7 | ||
|
|
002b8a05e8 | ||
|
|
76cf9ccb08 | ||
|
|
737a58f9ca | ||
|
|
9ab6c48659 | ||
|
|
acb9e00274 |
4
.gitmodules
vendored
4
.gitmodules
vendored
@@ -1,9 +1,9 @@
|
||||
[submodule "ASF-WebConfigGenerator"]
|
||||
path = ASF-WebConfigGenerator
|
||||
url = https://github.com/JustArchiNET/ASF-WebConfigGenerator
|
||||
url = https://github.com/JustArchiNET/ASF-WebConfigGenerator.git
|
||||
[submodule "ASF-ui"]
|
||||
path = ASF-ui
|
||||
url = https://github.com/JustArchiNET/ASF-ui
|
||||
url = https://github.com/JustArchiNET/ASF-ui.git
|
||||
[submodule "tools/ArchiCrowdin"]
|
||||
path = tools/ArchiCrowdin
|
||||
url = https://github.com/JustArchiNET/ArchiCrowdin.git
|
||||
|
||||
Submodule ASF-WebConfigGenerator updated: 249bf61ca7...29cbb1923d
2
ASF-ui
2
ASF-ui
Submodule ASF-ui updated: ced8221b21...dc5df326aa
@@ -35,8 +35,7 @@
|
||||
<ItemGroup>
|
||||
<PackageReference Include="ConfigureAwaitChecker.Analyzer" Version="3.0.0" />
|
||||
<PackageReference Include="JetBrains.Annotations" Version="2018.3.0" />
|
||||
<PackageReference Include="SteamKit2" Version="2.1.0" />
|
||||
<PackageReference Include="System.Composition.AttributedModel" Version="1.3.0-preview.18571.3" />
|
||||
<PackageReference Include="System.Composition.AttributedModel" Version="1.3.0-preview.19073.11" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
<PropertyGroup>
|
||||
<ApplicationIcon>ASF.ico</ApplicationIcon>
|
||||
<AssemblyVersion>4.0.0.4</AssemblyVersion>
|
||||
<AssemblyVersion>4.0.0.7</AssemblyVersion>
|
||||
<Authors>JustArchi</Authors>
|
||||
<Company>JustArchi</Company>
|
||||
<ConcurrentGarbageCollection>true</ConcurrentGarbageCollection>
|
||||
@@ -11,7 +11,7 @@
|
||||
<DefaultItemExcludes>$(DefaultItemExcludes);config/**;debug/**;out/**;overlay/**</DefaultItemExcludes>
|
||||
<Description>ASF is an application that allows you to farm steam cards using multiple steam accounts simultaneously.</Description>
|
||||
<ErrorReport>none</ErrorReport>
|
||||
<FileVersion>4.0.0.4</FileVersion>
|
||||
<FileVersion>4.0.0.7</FileVersion>
|
||||
<GenerateDocumentationFile>true</GenerateDocumentationFile>
|
||||
<LangVersion>latest</LangVersion>
|
||||
<NoWarn>1591</NoWarn>
|
||||
@@ -68,25 +68,24 @@
|
||||
<PackageReference Include="Microsoft.AspNetCore.Server.Kestrel" Version="2.2.0" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="2.2.0" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.WebSockets" Version="2.2.1" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="3.0.0-preview.18572.1" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Configuration" Version="3.0.0-preview.18572.1" />
|
||||
<PackageReference Include="Microsoft.Win32.Registry" Version="4.6.0-preview.18571.3" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="3.0.0-preview.19074.2" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Configuration" Version="3.0.0-preview.19074.2" />
|
||||
<PackageReference Include="Newtonsoft.Json" Version="12.0.1" />
|
||||
<PackageReference Include="NLog" Version="4.5.11" />
|
||||
<PackageReference Include="NLog.Web.AspNetCore" Version="4.8.0" />
|
||||
<PackageReference Include="protobuf-net" Version="3.0.0-alpha.3" />
|
||||
<PackageReference Include="SteamKit2" Version="2.2.0-Beta.1" />
|
||||
<PackageReference Include="Swashbuckle.AspNetCore" Version="5.0.0-beta" />
|
||||
<PackageReference Include="Swashbuckle.AspNetCore.Annotations" Version="5.0.0-beta" />
|
||||
<PackageReference Include="System.Composition" Version="1.3.0-preview.18571.3" />
|
||||
<PackageReference Include="System.Composition" Version="1.3.0-preview.19073.11" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Condition="'$(TargetFramework)' == 'netcoreapp2.2'">
|
||||
<PackageReference Include="ILLink.Tasks" Version="0.1.5-preview-1841731" />
|
||||
<PackageReference Include="System.Security.Cryptography.ProtectedData" Version="4.6.0-preview.18571.3" />
|
||||
<PackageReference Include="System.Security.Cryptography.ProtectedData" Version="4.6.0-preview.19073.11" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Condition="'$(TargetFramework)' == 'net472'">
|
||||
<PackageReference Include="System.Collections.Immutable" Version="1.6.0-preview.18571.3" />
|
||||
<PackageReference Include="System.Collections.Immutable" Version="1.6.0-preview.19073.11" />
|
||||
<Reference Include="System.Net.Http">
|
||||
<HintPath>C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.Net.Http.dll</HintPath>
|
||||
</Reference>
|
||||
@@ -133,10 +132,4 @@
|
||||
</Content>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Reference Include="SteamKit2">
|
||||
<HintPath>lib\SteamKit2.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -187,9 +187,7 @@ namespace ArchiSteamFarm {
|
||||
continue;
|
||||
}
|
||||
|
||||
uint realAppID = description.RealAppID > 0 ? description.RealAppID : description.AppID;
|
||||
|
||||
descriptions[description.ClassID] = (description.Marketable, description.Tradable, realAppID, description.Type, description.Rarity);
|
||||
descriptions[description.ClassID] = (description.Marketable, description.Tradable, description.RealAppID, description.Type, description.Rarity);
|
||||
}
|
||||
|
||||
foreach (Steam.Asset asset in response.Assets.Where(asset => asset != null)) {
|
||||
@@ -1211,21 +1209,9 @@ namespace ArchiSteamFarm {
|
||||
|
||||
bool marketable = description["marketable"].AsBoolean();
|
||||
|
||||
uint realAppID = appID;
|
||||
KeyValue marketFeeApp = description["market_fee_app"];
|
||||
|
||||
if (marketFeeApp != KeyValue.Invalid) {
|
||||
realAppID = description["market_fee_app"].AsUnsignedInteger();
|
||||
|
||||
if (realAppID == 0) {
|
||||
Bot.ArchiLogger.LogNullError(nameof(realAppID));
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
Steam.Asset.EType type = Steam.Asset.EType.Unknown;
|
||||
Steam.Asset.ERarity rarity = Steam.Asset.ERarity.Unknown;
|
||||
uint realAppID = 0;
|
||||
|
||||
List<KeyValue> tags = description["tags"].Children;
|
||||
|
||||
@@ -1252,7 +1238,7 @@ namespace ArchiSteamFarm {
|
||||
parsedTags.Add(new Steam.InventoryResponse.Description.Tag(identifier, value));
|
||||
}
|
||||
|
||||
(type, rarity) = Steam.InventoryResponse.Description.InterpretTags(parsedTags);
|
||||
(type, rarity, realAppID) = Steam.InventoryResponse.Description.InterpretTags(parsedTags);
|
||||
}
|
||||
|
||||
descriptions[(appID, classID)] = (marketable, realAppID, type, rarity);
|
||||
|
||||
@@ -1411,14 +1411,7 @@ namespace ArchiSteamFarm {
|
||||
return;
|
||||
}
|
||||
|
||||
string response = await Commands.Response(steamID, message).ConfigureAwait(false);
|
||||
|
||||
// We respond with null when user is not authorized (and similar)
|
||||
if (string.IsNullOrEmpty(response)) {
|
||||
return;
|
||||
}
|
||||
|
||||
await SendMessage(chatGroupID, chatID, response).ConfigureAwait(false);
|
||||
await Commands.HandleMessage(chatGroupID, chatID, steamID, message).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
private async Task HandleMessage(ulong steamID, string message) {
|
||||
@@ -1428,14 +1421,7 @@ namespace ArchiSteamFarm {
|
||||
return;
|
||||
}
|
||||
|
||||
string response = await Commands.Response(steamID, message).ConfigureAwait(false);
|
||||
|
||||
// We respond with null when user is not authorized (and similar)
|
||||
if (string.IsNullOrEmpty(response)) {
|
||||
return;
|
||||
}
|
||||
|
||||
await SendMessage(steamID, response).ConfigureAwait(false);
|
||||
await Commands.HandleMessage(steamID, message).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
private async Task HeartBeat() {
|
||||
|
||||
@@ -71,8 +71,13 @@ namespace ArchiSteamFarm {
|
||||
return "<" + SharedInfo.ASF + "> " + response;
|
||||
}
|
||||
|
||||
[Obsolete("Use Response(steamID, message) instead, useCommandPrefix is obsolete and no longer used (same as false), this method will be removed in the next ASF version.", true)]
|
||||
[PublicAPI]
|
||||
[SuppressMessage("ReSharper", "MethodOverloadWithOptionalParameter")]
|
||||
public async Task<string> Response(ulong steamID, string message, bool useCommandPrefix = true) {
|
||||
// TODO: Delete the method entirely in the next ASF version
|
||||
ASF.ArchiLogger.LogGenericError(string.Format(Strings.WarningDeprecated, "[API] Response(steamID, message, useCommandPrefix)", "[API] Response(steamID, message)"));
|
||||
|
||||
if ((steamID == 0) || string.IsNullOrEmpty(message)) {
|
||||
Bot.ArchiLogger.LogNullError(nameof(steamID) + " || " + nameof(message));
|
||||
|
||||
@@ -89,6 +94,17 @@ namespace ArchiSteamFarm {
|
||||
message = message.Substring(ASF.GlobalConfig.CommandPrefix.Length);
|
||||
}
|
||||
|
||||
return await Response(steamID, message).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
[PublicAPI]
|
||||
public async Task<string> Response(ulong steamID, string message) {
|
||||
if ((steamID == 0) || string.IsNullOrEmpty(message)) {
|
||||
Bot.ArchiLogger.LogNullError(nameof(steamID) + " || " + nameof(message));
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
string[] args = message.Split((char[]) null, StringSplitOptions.RemoveEmptyEntries);
|
||||
|
||||
switch (args.Length) {
|
||||
@@ -371,6 +387,88 @@ namespace ArchiSteamFarm {
|
||||
}
|
||||
}
|
||||
|
||||
internal async Task HandleMessage(ulong steamID, string message) {
|
||||
if ((steamID == 0) || string.IsNullOrEmpty(message)) {
|
||||
Bot.ArchiLogger.LogNullError(nameof(steamID) + " || " + nameof(message));
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(ASF.GlobalConfig.CommandPrefix)) {
|
||||
if (!message.StartsWith(ASF.GlobalConfig.CommandPrefix, StringComparison.OrdinalIgnoreCase)) {
|
||||
string pluginsResponse = await Core.OnBotMessage(Bot, steamID, message).ConfigureAwait(false);
|
||||
|
||||
if (!string.IsNullOrEmpty(pluginsResponse)) {
|
||||
await Bot.SendMessage(steamID, pluginsResponse).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
message = message.Substring(ASF.GlobalConfig.CommandPrefix.Length);
|
||||
}
|
||||
|
||||
bool feedback = Bot.HasPermission(steamID, BotConfig.EPermission.FamilySharing);
|
||||
|
||||
if (feedback) {
|
||||
await Bot.SendMessage(steamID, FormatBotResponse(Strings.PleaseWait)).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
string response = await Response(steamID, message).ConfigureAwait(false);
|
||||
|
||||
if (string.IsNullOrEmpty(response)) {
|
||||
if (!feedback) {
|
||||
return;
|
||||
}
|
||||
|
||||
Bot.ArchiLogger.LogNullError(nameof(response));
|
||||
response = FormatBotResponse(Strings.UnknownCommand);
|
||||
}
|
||||
|
||||
await Bot.SendMessage(steamID, response).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
internal async Task HandleMessage(ulong chatGroupID, ulong chatID, ulong steamID, string message) {
|
||||
if ((chatGroupID == 0) || (chatID == 0) || (steamID == 0) || string.IsNullOrEmpty(message)) {
|
||||
Bot.ArchiLogger.LogNullError(nameof(chatGroupID) + " || " + nameof(chatID) + " || " + nameof(steamID) + " || " + nameof(message));
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(ASF.GlobalConfig.CommandPrefix)) {
|
||||
if (!message.StartsWith(ASF.GlobalConfig.CommandPrefix, StringComparison.OrdinalIgnoreCase)) {
|
||||
string pluginsResponse = await Core.OnBotMessage(Bot, steamID, message).ConfigureAwait(false);
|
||||
|
||||
if (!string.IsNullOrEmpty(pluginsResponse)) {
|
||||
await Bot.SendMessage(chatGroupID, chatID, pluginsResponse).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
message = message.Substring(ASF.GlobalConfig.CommandPrefix.Length);
|
||||
}
|
||||
|
||||
bool feedback = Bot.HasPermission(steamID, BotConfig.EPermission.FamilySharing);
|
||||
|
||||
if (feedback) {
|
||||
await Bot.SendMessage(chatGroupID, chatID, FormatBotResponse(Strings.PleaseWait)).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
string response = await Response(steamID, message).ConfigureAwait(false);
|
||||
|
||||
if (string.IsNullOrEmpty(response)) {
|
||||
if (!feedback) {
|
||||
return;
|
||||
}
|
||||
|
||||
Bot.ArchiLogger.LogNullError(nameof(response));
|
||||
response = FormatBotResponse(Strings.UnknownCommand);
|
||||
}
|
||||
|
||||
await Bot.SendMessage(chatGroupID, chatID, response).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
internal void OnNewLicenseList() {
|
||||
lock (CachedGamesOwned) {
|
||||
CachedGamesOwned.Clear();
|
||||
|
||||
@@ -59,7 +59,7 @@ namespace ArchiSteamFarm.IPC.Controllers.Api {
|
||||
command = command.Substring(ASF.GlobalConfig.CommandPrefix.Length);
|
||||
}
|
||||
|
||||
string response = await targetBot.Commands.Response(ASF.GlobalConfig.SteamOwnerID, command, false).ConfigureAwait(false);
|
||||
string response = await targetBot.Commands.Response(ASF.GlobalConfig.SteamOwnerID, command).ConfigureAwait(false);
|
||||
|
||||
return Ok(new GenericResponse<string>(response));
|
||||
}
|
||||
|
||||
@@ -449,12 +449,10 @@ namespace ArchiSteamFarm.Json {
|
||||
[JsonProperty(PropertyName = "appid", Required = Required.Always)]
|
||||
internal readonly uint AppID;
|
||||
|
||||
[JsonProperty(PropertyName = "market_fee_app", Required = Required.DisallowNull)]
|
||||
internal readonly uint RealAppID;
|
||||
|
||||
internal ulong ClassID { get; private set; }
|
||||
internal bool Marketable { get; private set; }
|
||||
internal Asset.ERarity Rarity { get; private set; }
|
||||
internal uint RealAppID { get; private set; }
|
||||
internal bool Tradable { get; private set; }
|
||||
internal Asset.EType Type { get; private set; }
|
||||
|
||||
@@ -491,7 +489,7 @@ namespace ArchiSteamFarm.Json {
|
||||
return;
|
||||
}
|
||||
|
||||
(Type, Rarity) = InterpretTags(value);
|
||||
(Type, Rarity, RealAppID) = InterpretTags(value);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -503,15 +501,16 @@ namespace ArchiSteamFarm.Json {
|
||||
[JsonConstructor]
|
||||
private Description() { }
|
||||
|
||||
internal static (Asset.EType Type, Asset.ERarity Rarity) InterpretTags(IReadOnlyCollection<Tag> tags) {
|
||||
internal static (Asset.EType Type, Asset.ERarity Rarity, uint RealAppID) InterpretTags(IReadOnlyCollection<Tag> tags) {
|
||||
if ((tags == null) || (tags.Count == 0)) {
|
||||
ASF.ArchiLogger.LogNullError(nameof(tags));
|
||||
|
||||
return (Asset.EType.Unknown, Asset.ERarity.Unknown);
|
||||
return (Asset.EType.Unknown, Asset.ERarity.Unknown, 0);
|
||||
}
|
||||
|
||||
Asset.EType type = Asset.EType.Unknown;
|
||||
Asset.ERarity rarity = Asset.ERarity.Unknown;
|
||||
uint realAppID = 0;
|
||||
|
||||
foreach (Tag tag in tags) {
|
||||
switch (tag.Identifier) {
|
||||
@@ -554,6 +553,25 @@ namespace ArchiSteamFarm.Json {
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
case "Game":
|
||||
|
||||
if ((tag.Value.Length <= 4) || !tag.Value.StartsWith("app_", StringComparison.Ordinal)) {
|
||||
ASF.ArchiLogger.LogGenericError(string.Format(Strings.WarningUnknownValuePleaseReport, nameof(tag.Value), tag.Value));
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
string appIDText = tag.Value.Substring(4);
|
||||
|
||||
if (!uint.TryParse(appIDText, out uint appID) || (appID == 0)) {
|
||||
ASF.ArchiLogger.LogNullError(nameof(appID));
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
realAppID = appID;
|
||||
|
||||
break;
|
||||
case "item_class":
|
||||
|
||||
@@ -604,7 +622,7 @@ namespace ArchiSteamFarm.Json {
|
||||
}
|
||||
}
|
||||
|
||||
return (type, rarity);
|
||||
return (type, rarity, realAppID);
|
||||
}
|
||||
|
||||
internal sealed class Tag {
|
||||
|
||||
9
ArchiSteamFarm/Localization/Strings.Designer.cs
generated
9
ArchiSteamFarm/Localization/Strings.Designer.cs
generated
@@ -1170,6 +1170,15 @@ namespace ArchiSteamFarm.Localization {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Wyszukuje zlokalizowany ciąg podobny do ciągu Please wait....
|
||||
/// </summary>
|
||||
public static string PleaseWait {
|
||||
get {
|
||||
return ResourceManager.GetString("PleaseWait", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Wyszukuje zlokalizowany ciąg podobny do ciągu {0} has been loaded successfully!.
|
||||
/// </summary>
|
||||
|
||||
@@ -646,7 +646,9 @@ StackTrace:
|
||||
<value>Řešení pro chybu {0} bylo spuštěno.</value>
|
||||
<comment>{0} will be replaced by the bug's name provided by ASF</comment>
|
||||
</data>
|
||||
|
||||
<data name="TargetBotNotConnected" xml:space="preserve">
|
||||
<value>Tato instance bota není připojena!</value>
|
||||
</data>
|
||||
<data name="BotWalletBalance" xml:space="preserve">
|
||||
<value>Zůstatek v peněžence: {0} {1}</value>
|
||||
<comment>{0} will be replaced by wallet balance value, {1} will be replaced by currency name</comment>
|
||||
@@ -658,14 +660,29 @@ StackTrace:
|
||||
<value>Bot má level {0}.</value>
|
||||
<comment>{0} will be replaced by bot's level</comment>
|
||||
</data>
|
||||
|
||||
|
||||
<data name="ActivelyMatchingItems" xml:space="preserve">
|
||||
<value>Srovnávám položky ze Steamu, kolo #{0}...</value>
|
||||
<comment>{0} will be replaced by round number</comment>
|
||||
</data>
|
||||
<data name="DoneActivelyMatchingItems" xml:space="preserve">
|
||||
<value>Položky ze Steamu porovnány, kolo #{0}.</value>
|
||||
<comment>{0} will be replaced by round number</comment>
|
||||
</data>
|
||||
<data name="ErrorAborted" xml:space="preserve">
|
||||
<value>Přerušeno!</value>
|
||||
</data>
|
||||
|
||||
|
||||
|
||||
<data name="ActivelyMatchingItemsRound" xml:space="preserve">
|
||||
<value>Celkem porovnáno {0} sad karet.</value>
|
||||
<comment>{0} will be replaced by number of sets traded</comment>
|
||||
</data>
|
||||
<data name="WarningExcessiveBotsCount" xml:space="preserve">
|
||||
<value>Používáte více osobních účtů pro boty, než je náš doporučený limit ({0}). Upozorňujeme, že takové nastavení není podporováno a může způsobovat různé problémy se službou Steam, včetně pozastavení nebo blokací účtů. Pro další informace se podívejte na FAQ.</value>
|
||||
<comment>{0} will be replaced by our maximum recommended bots count (number)</comment>
|
||||
</data>
|
||||
<data name="PluginLoaded" xml:space="preserve">
|
||||
<value>Plugin {0} byl úspěšně načten!</value>
|
||||
<comment>{0} will be replaced by the name of the custom ASF plugin</comment>
|
||||
</data>
|
||||
<data name="PluginLoading" xml:space="preserve">
|
||||
<value>Načítám {0} V{1}...</value>
|
||||
<comment>{0} will be replaced by the name of the custom ASF plugin, {1} will be replaced by its version</comment>
|
||||
@@ -673,5 +690,7 @@ StackTrace:
|
||||
<data name="NothingFound" xml:space="preserve">
|
||||
<value>Nic nenalezeno!</value>
|
||||
</data>
|
||||
|
||||
<data name="PluginsWarning" xml:space="preserve">
|
||||
<value>Jeden nebo více vlastních pluginů bylo načteno do ASF. Jelikož nejsme schopni poskytnout podporu pro modifikované nastavení, prosím, v případě problémů kontaktujte příslušné vývojáře daných pluginů.</value>
|
||||
</data>
|
||||
</root>
|
||||
|
||||
@@ -693,4 +693,7 @@ StackTrace:
|
||||
<data name="PluginsWarning" xml:space="preserve">
|
||||
<value>You've loaded one or more of custom plugins into the ASF. Since we're unable to offer a support for modded setups, please reach the appropriate developers of the plugins that you decided to use in case of any issues.</value>
|
||||
</data>
|
||||
<data name="PleaseWait" xml:space="preserve">
|
||||
<value>Please wait...</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -613,7 +613,7 @@
|
||||
<value>Доступ заборонено!</value>
|
||||
</data>
|
||||
<data name="WarningPreReleaseVersion" xml:space="preserve">
|
||||
<value>Ви користуєтеся версією, яка новіша за останню версію у цьому каналі оновлення. Будь ласка, зверніть увагу, що пре-релізні версіі призначені для користувачів які вміють доповідати про помилки, вирішувати питання та надавати зворотній зв'язок - технічна підтримка не надається.</value>
|
||||
<value>Ви користуєтеся версією, яка новіша за останню версію у цьому каналі оновлення. Будь ласка, зверніть увагу, що підготовчі версії призначені для користувачів які вміють доповідати про помилки, вирішувати питання та надавати зворотній зв'язок - технічна підтримка не надається.</value>
|
||||
</data>
|
||||
<data name="BotStats" xml:space="preserve">
|
||||
<value>Поточне використання пам'яті: {0} МБ.</value>
|
||||
|
||||
696
ArchiSteamFarm/Localization/Strings.zh-HK.resx
Normal file
696
ArchiSteamFarm/Localization/Strings.zh-HK.resx
Normal file
@@ -0,0 +1,696 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string"/>
|
||||
<xsd:attribute name="type" type="xsd:string"/>
|
||||
<xsd:attribute name="mimetype" type="xsd:string"/>
|
||||
<xsd:attribute ref="xml:space"/>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string"/>
|
||||
<xsd:attribute name="name" type="xsd:string"/>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
|
||||
<xsd:attribute ref="xml:space"/>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required"/>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="AcceptingTrade" xml:space="preserve">
|
||||
<value>接受交易︰{0}</value>
|
||||
<comment>{0} will be replaced by trade number</comment>
|
||||
</data>
|
||||
<data name="AutoUpdateCheckInfo" xml:space="preserve">
|
||||
<value>ASF 將每 {0} 自動檢查新版本。</value>
|
||||
<comment>{0} will be replaced by translated TimeSpan string (such as "24 hours")</comment>
|
||||
</data>
|
||||
<data name="Content" xml:space="preserve">
|
||||
<value>內容:
|
||||
{0}</value>
|
||||
<comment>{0} will be replaced by content string. Please note that this string should include newline for formatting.</comment>
|
||||
</data>
|
||||
<data name="ErrorConfigPropertyInvalid" xml:space="preserve">
|
||||
<value>配置 {0} 屬性無效: {1}</value>
|
||||
<comment>{0} will be replaced by name of the configuration property, {1} will be replaced by invalid value</comment>
|
||||
</data>
|
||||
<data name="ErrorEarlyFatalExceptionInfo" xml:space="preserve">
|
||||
<value>ASF v{0} 在能初始化核心日誌記錄模組之前就遇到了嚴重異常!</value>
|
||||
<comment>{0} will be replaced by version number</comment>
|
||||
</data>
|
||||
<data name="ErrorEarlyFatalExceptionPrint" xml:space="preserve">
|
||||
<value>例外錯誤:{0}() {1}
|
||||
堆疊追蹤:
|
||||
{2}</value>
|
||||
<comment>{0} will be replaced by function name, {1} will be replaced by exception message, {2} will be replaced by entire stack trace. Please note that this string should include newlines for formatting.</comment>
|
||||
</data>
|
||||
<data name="ErrorExitingWithNonZeroErrorCode" xml:space="preserve">
|
||||
<value>使用非零錯誤代碼退出!</value>
|
||||
</data>
|
||||
<data name="ErrorFailingRequest" xml:space="preserve">
|
||||
<value>請求失敗: {0}</value>
|
||||
<comment>{0} will be replaced by URL of the request</comment>
|
||||
</data>
|
||||
<data name="ErrorGlobalConfigNotLoaded" xml:space="preserve">
|
||||
<value>無法載入全域配置。請確保 {0} 存在且有效! 如果仍有疑惑, 請參閱wiki上的 "使用者入門" 指南。</value>
|
||||
<comment>{0} will be replaced by file's path</comment>
|
||||
</data>
|
||||
<data name="ErrorIsInvalid" xml:space="preserve">
|
||||
<value>{0} 無效!</value>
|
||||
<comment>{0} will be replaced by object's name</comment>
|
||||
</data>
|
||||
<data name="ErrorMobileAuthenticatorInvalidDeviceID" xml:space="preserve">
|
||||
<value>ASF 雙重認證中設定的 DeviceID 無效,該功能無法執行!</value>
|
||||
</data>
|
||||
<data name="ErrorNoBotsDefined" xml:space="preserve">
|
||||
<value>沒有設定任何機器人。您是否忘記配置 ASF ?</value>
|
||||
</data>
|
||||
<data name="ErrorObjectIsNull" xml:space="preserve">
|
||||
<value>{0} 為空!</value>
|
||||
<comment>{0} will be replaced by object's name</comment>
|
||||
</data>
|
||||
<data name="ErrorParsingObject" xml:space="preserve">
|
||||
<value>解析 {0} 失敗!</value>
|
||||
<comment>{0} will be replaced by object's name</comment>
|
||||
</data>
|
||||
<data name="ErrorRequestFailedTooManyTimes" xml:space="preserve">
|
||||
<value>嘗試請求 {0} 次後失敗!</value>
|
||||
<comment>{0} will be replaced by maximum number of tries</comment>
|
||||
</data>
|
||||
<data name="ErrorUpdateCheckFailed" xml:space="preserve">
|
||||
<value>無法檢查最新版本!</value>
|
||||
</data>
|
||||
<data name="ErrorUpdateNoAssetForThisVersion" xml:space="preserve">
|
||||
<value>無法繼續更新, 因為沒有與當前正在運行的版本相關的資產! 無法自動更新該版本。</value>
|
||||
</data>
|
||||
<data name="ErrorUpdateNoAssets" xml:space="preserve">
|
||||
<value>無法繼續進行更新, 因為該版本未提供任何資產!</value>
|
||||
</data>
|
||||
<data name="ErrorUserInputRunningInHeadlessMode" xml:space="preserve">
|
||||
<value>收到一個使用者輸入請求, 但進程當前正在無頭模式下運行!</value>
|
||||
</data>
|
||||
<data name="Exiting" xml:space="preserve">
|
||||
<value>正在退出...</value>
|
||||
</data>
|
||||
<data name="WarningFailed" xml:space="preserve">
|
||||
<value>失敗!</value>
|
||||
</data>
|
||||
<data name="GlobalConfigChanged" xml:space="preserve">
|
||||
<value>全域設定檔已更改!</value>
|
||||
</data>
|
||||
<data name="ErrorGlobalConfigRemoved" xml:space="preserve">
|
||||
<value>全域設定檔已被刪除!</value>
|
||||
</data>
|
||||
<data name="IgnoringTrade" xml:space="preserve">
|
||||
<value>忽略交易: {0}</value>
|
||||
<comment>{0} will be replaced by trade number</comment>
|
||||
</data>
|
||||
<data name="LoggingIn" xml:space="preserve">
|
||||
<value>正在登錄到 {0}...</value>
|
||||
<comment>{0} will be replaced by service's name</comment>
|
||||
</data>
|
||||
<data name="NoBotsAreRunning" xml:space="preserve">
|
||||
<value>沒有運行中的機器人,正在退出...</value>
|
||||
</data>
|
||||
<data name="RefreshingOurSession" xml:space="preserve">
|
||||
<value>刷新工作階段 !</value>
|
||||
</data>
|
||||
<data name="RejectingTrade" xml:space="preserve">
|
||||
<value>拒絕交易︰ {0}</value>
|
||||
<comment>{0} will be replaced by trade number</comment>
|
||||
</data>
|
||||
<data name="Restarting" xml:space="preserve">
|
||||
<value>重新啟動中...</value>
|
||||
</data>
|
||||
<data name="Starting" xml:space="preserve">
|
||||
<value>正在啟動...</value>
|
||||
</data>
|
||||
<data name="Success" xml:space="preserve">
|
||||
<value>成功!</value>
|
||||
</data>
|
||||
<data name="UnlockingParentalAccount" xml:space="preserve">
|
||||
<value>正在解鎖家庭監護帳戶...</value>
|
||||
</data>
|
||||
<data name="UpdateCheckingNewVersion" xml:space="preserve">
|
||||
<value>正在檢查新版本...</value>
|
||||
</data>
|
||||
<data name="UpdateDownloadingNewVersion" xml:space="preserve">
|
||||
<value>正在下載新版本:{0} ({1} MB)... 等待期間,如果喜歡這個軟體,請考慮捐助 ASF! :)</value>
|
||||
<comment>{0} will be replaced by version string, {1} will be replaced by update size (in megabytes)</comment>
|
||||
</data>
|
||||
<data name="UpdateFinished" xml:space="preserve">
|
||||
<value>更新完成 !</value>
|
||||
</data>
|
||||
<data name="UpdateNewVersionAvailable" xml:space="preserve">
|
||||
<value>ASF 有新版本可用!請考慮手動更新!</value>
|
||||
</data>
|
||||
<data name="UpdateVersionInfo" xml:space="preserve">
|
||||
<value>本地版本: {0} | 遠端版本: {1}</value>
|
||||
<comment>{0} will be replaced by current version, {1} will be replaced by remote version</comment>
|
||||
</data>
|
||||
<data name="UserInputDeviceID" xml:space="preserve">
|
||||
<value>請輸入您的移動身份驗證器設備 ID (包括 "android:") </value>
|
||||
<comment>Please note that this translation should end with space</comment>
|
||||
</data>
|
||||
<data name="UserInputSteam2FA" xml:space="preserve">
|
||||
<value>請輸入您的 Steam 身份驗證器應用程式上的兩步驟驗證代碼: </value>
|
||||
<comment>Please note that this translation should end with space</comment>
|
||||
</data>
|
||||
<data name="UserInputSteamGuard" xml:space="preserve">
|
||||
<value>請輸入寄送至您的電子信箱的 Steam Guard 驗證代碼: </value>
|
||||
<comment>Please note that this translation should end with space</comment>
|
||||
</data>
|
||||
<data name="UserInputSteamLogin" xml:space="preserve">
|
||||
<value>請輸入您的 Steam 帳號: </value>
|
||||
<comment>Please note that this translation should end with space</comment>
|
||||
</data>
|
||||
<data name="UserInputSteamParentalCode" xml:space="preserve">
|
||||
<value>請輸入 Steam 家庭監護 PIN 碼: </value>
|
||||
<comment>Please note that this translation should end with space</comment>
|
||||
</data>
|
||||
<data name="UserInputSteamPassword" xml:space="preserve">
|
||||
<value>請輸入您的 Steam 密碼: </value>
|
||||
<comment>Please note that this translation should end with space</comment>
|
||||
</data>
|
||||
<data name="UserInputUnknown" xml:space="preserve">
|
||||
<value>請輸入未記錄的值 {0}: </value>
|
||||
<comment>{0} will be replaced by property name. Please note that this translation should end with space</comment>
|
||||
</data>
|
||||
<data name="WarningUnknownValuePleaseReport" xml:space="preserve">
|
||||
<value>收到 {0} 的未知值,請回報這個問題:{1}</value>
|
||||
<comment>{0} will be replaced by object's name, {1} will be replaced by value for that object</comment>
|
||||
</data>
|
||||
<data name="IPCReady" xml:space="preserve">
|
||||
<value>IPC 伺服器準備就緒!</value>
|
||||
</data>
|
||||
<data name="IPCStarting" xml:space="preserve">
|
||||
<value>IPC 伺服器啟動中...</value>
|
||||
</data>
|
||||
<data name="BotAlreadyStopped" xml:space="preserve">
|
||||
<value>這個機器人已經停止了!</value>
|
||||
</data>
|
||||
<data name="BotNotFound" xml:space="preserve">
|
||||
<value>找不到任何名為 {0} 的機器人!</value>
|
||||
<comment>{0} will be replaced by bot's name query (string)</comment>
|
||||
</data>
|
||||
<data name="BotStatusOverview" xml:space="preserve">
|
||||
<value>{0}/{1} 個機器人正在運行,總共 {2} 個遊戲 ({3} 張卡片) 等待掛卡。</value>
|
||||
<comment>{0} will be replaced by number of active bots, {1} will be replaced by total number of bots, {2} will be replaced by total number of games left to idle, {3} will be replaced by total number of cards left to idle</comment>
|
||||
</data>
|
||||
<data name="BotStatusIdling" xml:space="preserve">
|
||||
<value>機器人正在掛卡的遊戲:{0} ({1},剩餘 {2} 張卡片可以掉落),總共剩餘 {3} 個遊戲 ( {4} 張卡片) 等待掛卡 (~需時約 {5})。</value>
|
||||
<comment>{0} will be replaced by game's ID (number), {1} will be replaced by game's name, {2} will be replaced by number of cards left to idle, {3} will be replaced by total number of games to idle, {4} will be replaced by total number of cards to idle, {5} will be replaced by translated TimeSpan string (such as "1 day, 5 hours and 30 minutes")</comment>
|
||||
</data>
|
||||
<data name="BotStatusIdlingList" xml:space="preserve">
|
||||
<value>機器人正在掛卡的遊戲:{0},總共剩餘 {1} 個遊戲 ({2} 張卡片) 等待掛卡 (~需時約 {3})。</value>
|
||||
<comment>{0} will be replaced by list of the games (IDs, numbers), {1} will be replaced by total number of games to idle, {2} will be replaced by total number of cards to idle, {3} will be replaced by translated TimeSpan string (such as "1 day, 5 hours and 30 minutes")</comment>
|
||||
</data>
|
||||
<data name="CheckingFirstBadgePage" xml:space="preserve">
|
||||
<value>正在檢查徽章頁首頁...</value>
|
||||
</data>
|
||||
<data name="CheckingOtherBadgePages" xml:space="preserve">
|
||||
<value>正在檢查其他徽章頁...</value>
|
||||
</data>
|
||||
<data name="ChosenFarmingAlgorithm" xml:space="preserve">
|
||||
<value>選擇的掛卡演算法為:{0}</value>
|
||||
<comment>{0} will be replaced by the name of chosen idling algorithm</comment>
|
||||
</data>
|
||||
<data name="Done" xml:space="preserve">
|
||||
<value>完成 !</value>
|
||||
</data>
|
||||
<data name="GamesToIdle" xml:space="preserve">
|
||||
<value>總共有 {0} 個遊戲 ({1} 張卡片) 等待掛卡 (~需時約 {2})...</value>
|
||||
<comment>{0} will be replaced by number of games, {1} will be replaced by number of cards, {2} will be replaced by translated TimeSpan string (such as "1 day, 5 hours and 30 minutes")</comment>
|
||||
</data>
|
||||
<data name="IdlingFinished" xml:space="preserve">
|
||||
<value>掛卡完成!</value>
|
||||
</data>
|
||||
<data name="IdlingFinishedForGame" xml:space="preserve">
|
||||
<value>完成掛卡:{0} ({1}),耗時 {2}!</value>
|
||||
<comment>{0} will be replaced by game's ID (number), {1} will be replaced by game's name, {2} will be replaced by translated TimeSpan string (such as "1 day, 5 hours and 30 minutes")</comment>
|
||||
</data>
|
||||
<data name="IdlingFinishedForGames" xml:space="preserve">
|
||||
<value>已完成掛卡的遊戲:{0}</value>
|
||||
<comment>{0} will be replaced by list of the games (IDs, numbers), separated by a comma</comment>
|
||||
</data>
|
||||
<data name="IdlingStatusForGame" xml:space="preserve">
|
||||
<value>{0} ({1}) 的掛卡狀態:剩餘 {2} 張卡片</value>
|
||||
<comment>{0} will be replaced by game's ID (number), {1} will be replaced by game's name, {2} will be replaced by number of cards left to idle</comment>
|
||||
</data>
|
||||
<data name="IdlingStopped" xml:space="preserve">
|
||||
<value>掛卡停止!</value>
|
||||
</data>
|
||||
<data name="IgnoredPermanentPauseEnabled" xml:space="preserve">
|
||||
<value>忽略此請求,因為強制暫停已啟用!</value>
|
||||
</data>
|
||||
<data name="NothingToIdle" xml:space="preserve">
|
||||
<value>這個帳戶目前沒有需要掛卡的遊戲!</value>
|
||||
</data>
|
||||
<data name="NowIdling" xml:space="preserve">
|
||||
<value>正在掛卡:{0} ({1})</value>
|
||||
<comment>{0} will be replaced by game's ID (number), {1} will be replaced by game's name</comment>
|
||||
</data>
|
||||
<data name="NowIdlingList" xml:space="preserve">
|
||||
<value>正在掛卡︰ {0}</value>
|
||||
<comment>{0} will be replaced by list of the games (IDs, numbers), separated by a comma</comment>
|
||||
</data>
|
||||
<data name="PlayingNotAvailable" xml:space="preserve">
|
||||
<value>當前無法執行,我們將稍後再試!</value>
|
||||
</data>
|
||||
<data name="StillIdling" xml:space="preserve">
|
||||
<value>仍在掛卡:{0} ({1})</value>
|
||||
<comment>{0} will be replaced by game's ID (number), {1} will be replaced by game's name</comment>
|
||||
</data>
|
||||
<data name="StillIdlingList" xml:space="preserve">
|
||||
<value>仍在掛卡:{0}</value>
|
||||
<comment>{0} will be replaced by list of the games (IDs, numbers), separated by a comma</comment>
|
||||
</data>
|
||||
<data name="StoppedIdling" xml:space="preserve">
|
||||
<value>停止掛卡:{0} ({1})</value>
|
||||
<comment>{0} will be replaced by game's ID (number), {1} will be replaced by game's name</comment>
|
||||
</data>
|
||||
<data name="StoppedIdlingList" xml:space="preserve">
|
||||
<value>停止掛卡:{0}</value>
|
||||
<comment>{0} will be replaced by list of the games (IDs, numbers), separated by a comma</comment>
|
||||
</data>
|
||||
<data name="UnknownCommand" xml:space="preserve">
|
||||
<value>未知指令!</value>
|
||||
</data>
|
||||
<data name="WarningCouldNotCheckBadges" xml:space="preserve">
|
||||
<value>無法取得徽章頁資訊,我們將稍後再試!</value>
|
||||
</data>
|
||||
<data name="WarningCouldNotCheckCardsStatus" xml:space="preserve">
|
||||
<value>無法檢查卡片狀態:{0} ({1}),我們將稍後再試!</value>
|
||||
<comment>{0} will be replaced by game's ID (number), {1} will be replaced by game's name</comment>
|
||||
</data>
|
||||
<data name="BotAcceptingGift" xml:space="preserve">
|
||||
<value>接受禮物:{0}...</value>
|
||||
<comment>{0} will be replaced by giftID (number)</comment>
|
||||
</data>
|
||||
<data name="BotAccountLimited" xml:space="preserve">
|
||||
<value>這個帳戶是受限制的帳戶,在限制解除前將無法掛卡!</value>
|
||||
</data>
|
||||
<data name="BotAddLicense" xml:space="preserve">
|
||||
<value>ID:{0} | 狀態:{1}</value>
|
||||
<comment>{0} will be replaced by game's ID (number), {1} will be replaced by status string</comment>
|
||||
</data>
|
||||
<data name="BotAddLicenseWithItems" xml:space="preserve">
|
||||
<value>ID:{0} | 狀態:{1} | 物品:{2}</value>
|
||||
<comment>{0} will be replaced by game's ID (number), {1} will be replaced by status string, {2} will be replaced by list of granted IDs (numbers), separated by a comma</comment>
|
||||
</data>
|
||||
<data name="BotAlreadyRunning" xml:space="preserve">
|
||||
<value>該機器人已在運行了!</value>
|
||||
</data>
|
||||
<data name="BotAuthenticatorConverting" xml:space="preserve">
|
||||
<value>正在將. maFile 轉換為 ASF 格式..</value>
|
||||
</data>
|
||||
<data name="BotAuthenticatorImportFinished" xml:space="preserve">
|
||||
<value>已成功匯入行動驗證器 !</value>
|
||||
</data>
|
||||
<data name="BotAuthenticatorInvalidDeviceID" xml:space="preserve">
|
||||
<value>您的 DeviceID 不正確或不存在!</value>
|
||||
</data>
|
||||
<data name="BotAuthenticatorToken" xml:space="preserve">
|
||||
<value>兩步驟驗證代碼:{0}</value>
|
||||
<comment>{0} will be replaced by generated 2FA token (string)</comment>
|
||||
</data>
|
||||
<data name="BotAutomaticIdlingNowPaused" xml:space="preserve">
|
||||
<value>自動掛卡已暫停!</value>
|
||||
</data>
|
||||
<data name="BotAutomaticIdlingNowResumed" xml:space="preserve">
|
||||
<value>自動掛卡已恢復!</value>
|
||||
</data>
|
||||
<data name="BotAutomaticIdlingPausedAlready" xml:space="preserve">
|
||||
<value>自動掛卡已暫停!</value>
|
||||
</data>
|
||||
<data name="BotAutomaticIdlingResumedAlready" xml:space="preserve">
|
||||
<value>自動掛卡已恢復!</value>
|
||||
</data>
|
||||
<data name="BotConnected" xml:space="preserve">
|
||||
<value>已連線到 Steam!</value>
|
||||
</data>
|
||||
<data name="BotDisconnected" xml:space="preserve">
|
||||
<value>已與 Steam 中斷連線!</value>
|
||||
</data>
|
||||
<data name="BotDisconnecting" xml:space="preserve">
|
||||
<value>正在中斷連線...</value>
|
||||
</data>
|
||||
<data name="BotEncryptedPassword" xml:space="preserve">
|
||||
<value>[{0}] 密碼︰{1}</value>
|
||||
<comment>{0} will be replaced by password encryption method (string), {1} will be replaced by encrypted password using that method (string)</comment>
|
||||
</data>
|
||||
<data name="BotInstanceNotStartingBecauseDisabled" xml:space="preserve">
|
||||
<value>不會啟動此機器人實例, 因為它在設定檔中被禁用!</value>
|
||||
</data>
|
||||
<data name="BotInvalidAuthenticatorDuringLogin" xml:space="preserve">
|
||||
<value>已連續收到 {0} 次 TwoFactorCodeMismatch 錯誤訊息。您的兩步驟驗證憑證可能已失效,或時鐘不同步,正在中止!</value>
|
||||
<comment>{0} will be replaced by maximum allowed number of failed 2FA attempts</comment>
|
||||
</data>
|
||||
<data name="BotLoggedOff" xml:space="preserve">
|
||||
<value>已從 Steam 登出:{0}</value>
|
||||
<comment>{0} will be replaced by logging off reason (string)</comment>
|
||||
</data>
|
||||
<data name="BotLoggedOn" xml:space="preserve">
|
||||
<value>{0} 已成功登入。</value>
|
||||
<comment>{0} will be replaced by steam ID (number)</comment>
|
||||
</data>
|
||||
<data name="BotLoggingIn" xml:space="preserve">
|
||||
<value>登入中...</value>
|
||||
</data>
|
||||
<data name="BotLogonSessionReplaced" xml:space="preserve">
|
||||
<value>這個帳戶似乎正被另一個 ASF 使用中,此為未定義行為,拒絕讓它繼續執行!</value>
|
||||
</data>
|
||||
<data name="BotLootingFailed" xml:space="preserve">
|
||||
<value>交易提案已失敗!</value>
|
||||
</data>
|
||||
<data name="BotLootingMasterNotDefined" xml:space="preserve">
|
||||
<value>無法發送交易提案,因為沒有帳戶設有 master 權限!</value>
|
||||
</data>
|
||||
<data name="BotLootingSuccess" xml:space="preserve">
|
||||
<value>交易提案發送成功!</value>
|
||||
</data>
|
||||
<data name="BotSendingTradeToYourself" xml:space="preserve">
|
||||
<value>您無法發送交易給自己!</value>
|
||||
</data>
|
||||
<data name="BotNoASFAuthenticator" xml:space="preserve">
|
||||
<value>該機器人並未啟用 ASF 二階段驗證!您是否忘記將驗證器導入成 ASF 二階段驗證?</value>
|
||||
</data>
|
||||
<data name="BotNotConnected" xml:space="preserve">
|
||||
<value>此機器人實例未連接!</value>
|
||||
</data>
|
||||
<data name="BotNotOwnedYet" xml:space="preserve">
|
||||
<value>尚未擁有: {0}</value>
|
||||
<comment>{0} will be replaced by query (string)</comment>
|
||||
</data>
|
||||
<data name="BotOwnedAlreadyWithName" xml:space="preserve">
|
||||
<value>已擁有:{0} | {1}</value>
|
||||
<comment>{0} will be replaced by game's ID (number), {1} will be replaced by game's name</comment>
|
||||
</data>
|
||||
<data name="BotRateLimitExceeded" xml:space="preserve">
|
||||
<value>超過頻率限制,我們將在 {0} 的冷卻時間後重試...</value>
|
||||
<comment>{0} will be replaced by translated TimeSpan string (such as "25 minutes")</comment>
|
||||
</data>
|
||||
<data name="BotReconnecting" xml:space="preserve">
|
||||
<value>正在重新連線...</value>
|
||||
</data>
|
||||
<data name="BotRedeem" xml:space="preserve">
|
||||
<value>產品序號:{0} | 狀態:{1}</value>
|
||||
<comment>{0} will be replaced by cd-key (string), {1} will be replaced by status string</comment>
|
||||
</data>
|
||||
<data name="BotRedeemWithItems" xml:space="preserve">
|
||||
<value>產品序號:{0} | 狀態:{1} | 物品:{2}</value>
|
||||
<comment>{0} will be replaced by cd-key (string), {1} will be replaced by status string, {2} will be replaced by list of key-value pairs, separated by a comma</comment>
|
||||
</data>
|
||||
<data name="BotRemovedExpiredLoginKey" xml:space="preserve">
|
||||
<value>已刪除過期的登錄金鑰!</value>
|
||||
</data>
|
||||
<data name="BotStatusNotIdling" xml:space="preserve">
|
||||
<value>機器人當前沒有在掛卡。</value>
|
||||
</data>
|
||||
<data name="BotStatusLimited" xml:space="preserve">
|
||||
<value>當前機器人為受限帳戶,所以無法通過掛卡得到卡片。</value>
|
||||
</data>
|
||||
<data name="BotStatusConnecting" xml:space="preserve">
|
||||
<value>機器人正在連接到Steam網路。</value>
|
||||
</data>
|
||||
<data name="BotStatusNotRunning" xml:space="preserve">
|
||||
<value>機器人未運行。</value>
|
||||
</data>
|
||||
<data name="BotStatusPaused" xml:space="preserve">
|
||||
<value>機器人已暫停或正在手動模式下運行。</value>
|
||||
</data>
|
||||
<data name="BotStatusPlayingNotAvailable" xml:space="preserve">
|
||||
<value>機器人當前正在使用中。</value>
|
||||
</data>
|
||||
<data name="BotUnableToLogin" xml:space="preserve">
|
||||
<value>無法登錄到 steam: {0}/{1}</value>
|
||||
<comment>{0} will be replaced by failure reason (string), {1} will be replaced by extended failure reason (string)</comment>
|
||||
</data>
|
||||
<data name="ErrorIsEmpty" xml:space="preserve">
|
||||
<value>{0} 為空!</value>
|
||||
<comment>{0} will be replaced by object's name</comment>
|
||||
</data>
|
||||
<data name="UnusedKeys" xml:space="preserve">
|
||||
<value>未使用的產品序號:{0}</value>
|
||||
<comment>{0} will be replaced by list of cd-keys (strings), separated by a comma</comment>
|
||||
</data>
|
||||
<data name="WarningFailedWithError" xml:space="preserve">
|
||||
<value>由於錯誤{0} 而失敗:</value>
|
||||
<comment>{0} will be replaced by failure reason (string)</comment>
|
||||
</data>
|
||||
<data name="BotConnectionLost" xml:space="preserve">
|
||||
<value>與 Steam 網路的連線中斷,正在重新進行連線...</value>
|
||||
</data>
|
||||
<data name="BotAccountFree" xml:space="preserve">
|
||||
<value>帳戶不再被佔用,已恢復掛卡!</value>
|
||||
</data>
|
||||
<data name="BotAccountOccupied" xml:space="preserve">
|
||||
<value>帳戶目前正被使用: ASF將在該帳戶空閒時繼續掛卡...</value>
|
||||
</data>
|
||||
<data name="BotConnecting" xml:space="preserve">
|
||||
<value>連接...</value>
|
||||
</data>
|
||||
<data name="BotHeartBeatFailed" xml:space="preserve">
|
||||
<value>無法斷開與用戶端的連接。正在中止這個機器人實例!</value>
|
||||
</data>
|
||||
<data name="BotSteamDirectoryInitializationFailed" xml:space="preserve">
|
||||
<value>無法初始化Steam目錄: 與Steam網路的連接可能需要比平時更長的時間!</value>
|
||||
</data>
|
||||
<data name="BotStopping" xml:space="preserve">
|
||||
<value>停止中...</value>
|
||||
</data>
|
||||
<data name="ErrorBotConfigInvalid" xml:space="preserve">
|
||||
<value>您的機器人配置無效。請驗證 {0} 的內容, 然後重試!</value>
|
||||
<comment>{0} will be replaced by file's path</comment>
|
||||
</data>
|
||||
<data name="ErrorDatabaseInvalid" xml:space="preserve">
|
||||
<value>無法載入持久資料庫, 如果問題仍然存在, 請刪除 {0}, 以重新創建資料庫!</value>
|
||||
<comment>{0} will be replaced by file's path</comment>
|
||||
</data>
|
||||
<data name="Initializing" xml:space="preserve">
|
||||
<value>正在初始化{0}…</value>
|
||||
<comment>{0} will be replaced by service name that is being initialized</comment>
|
||||
</data>
|
||||
<data name="WarningPrivacyPolicy" xml:space="preserve">
|
||||
<value>如果您對 ASF 的實際運作方式有疑慮,請查看我們wiki 中關於隱私政策的部分!</value>
|
||||
</data>
|
||||
<data name="Welcome" xml:space="preserve">
|
||||
<value>看來這是您首次使用 ASF,歡迎!</value>
|
||||
</data>
|
||||
<data name="ErrorInvalidCurrentCulture" xml:space="preserve">
|
||||
<value>您提供的 CurrentCulture 無效,ASF 將以預設值繼續運行 !</value>
|
||||
</data>
|
||||
<data name="TranslationIncomplete" xml:space="preserve">
|
||||
<value>ASF 將嘗試使用你的偏好語系 {0},但該語言的翻譯僅完成了 {1}。也許您可以協助我們改善 ASF 於您的語言的翻譯品質。</value>
|
||||
<comment>{0} will be replaced by culture code, such as "en-US", {1} will be replaced by completeness percentage, such as "78.5%"</comment>
|
||||
</data>
|
||||
<data name="IdlingGameNotPossible" xml:space="preserve">
|
||||
<value>{0} ({1}) 的掛卡被暫時禁用,因為 ASF 目前無法執行該遊戲。</value>
|
||||
<comment>{0} will be replaced by game's ID (number), {1} will be replaced by game's name</comment>
|
||||
</data>
|
||||
<data name="WarningIdlingGameMismatch" xml:space="preserve">
|
||||
<value>ASF 檢測到 {0} ({1}) 的 ID 不匹配,並將改為使用 ID {2}。</value>
|
||||
<comment>{0} will be replaced by game's ID (number), {1} will be replaced by game's name, {2} will be replaced by game's ID (number)</comment>
|
||||
</data>
|
||||
<data name="BotVersion" xml:space="preserve">
|
||||
<value>{0} V{1}</value>
|
||||
<comment>{0} will be replaced by program's name (e.g. "ASF"), {1} will be replaced by program's version (e.g. "1.0.0.0"). This string typically has nothing to translate and you should leave it as it is, unless you need to change the format, e.g. in RTL languages.</comment>
|
||||
</data>
|
||||
<data name="BotAccountLocked" xml:space="preserve">
|
||||
<value>此帳戶已被鎖定,永久無法掛卡 !</value>
|
||||
</data>
|
||||
<data name="BotStatusLocked" xml:space="preserve">
|
||||
<value>機器人已被鎖定,無法透過掛卡得到卡片。</value>
|
||||
</data>
|
||||
<data name="ErrorFunctionOnlyInHeadlessMode" xml:space="preserve">
|
||||
<value>此功能僅在無頭模式下可用!</value>
|
||||
</data>
|
||||
<data name="BotOwnedAlready" xml:space="preserve">
|
||||
<value>已擁有:{0}</value>
|
||||
<comment>{0} will be replaced by game's ID (number), {1} will be replaced by game's name</comment>
|
||||
</data>
|
||||
<data name="ErrorAccessDenied" xml:space="preserve">
|
||||
<value>訪問被拒!</value>
|
||||
</data>
|
||||
<data name="WarningPreReleaseVersion" xml:space="preserve">
|
||||
<value>您目前使用的版本高於最新的穩定版本。請注意:預發行版本專用於了解如何回報錯誤、處理問題並提供回饋的使用者,並不提供任何技術支援。</value>
|
||||
</data>
|
||||
<data name="BotStats" xml:space="preserve">
|
||||
<value>當前記憶體使用量:{0} MB。</value>
|
||||
<comment>{0} will be replaced by number (in megabytes) of memory being used</comment>
|
||||
</data>
|
||||
<data name="ClearingDiscoveryQueue" xml:space="preserve">
|
||||
<value>正在瀏覽 Steam 探索佇列 #{0}...</value>
|
||||
<comment>{0} will be replaced by queue number</comment>
|
||||
</data>
|
||||
<data name="DoneClearingDiscoveryQueue" xml:space="preserve">
|
||||
<value>已完成 Steam 探索佇列 #{0}。</value>
|
||||
<comment>{0} will be replaced by queue number</comment>
|
||||
</data>
|
||||
<data name="BotOwnsOverviewPerGame" xml:space="preserve">
|
||||
<value>{0}/{1} 個機器人已經擁有遊戲 {2}。</value>
|
||||
<comment>{0} will be replaced by number of bots that already own particular game being checked, {1} will be replaced by total number of bots that were checked during the process, {2} will be replaced by game's ID (number)</comment>
|
||||
</data>
|
||||
<data name="BotRefreshingPackagesData" xml:space="preserve">
|
||||
<value>更新包資料中...</value>
|
||||
</data>
|
||||
<data name="WarningDeprecated" xml:space="preserve">
|
||||
<value>{0} 的用法已棄用, 並將在程式的未來版本中刪除。請使用 {1}。</value>
|
||||
<comment>{0} will be replaced by the name of deprecated property (such as argument, config property or likewise), {1} will be replaced by the name of valid replacement (such as another argument or config property)</comment>
|
||||
</data>
|
||||
<data name="BotAcceptedDonationTrade" xml:space="preserve">
|
||||
<value>接受捐贈交易:{0}</value>
|
||||
<comment>{0} will be replaced by trade's ID (number)</comment>
|
||||
</data>
|
||||
<data name="WarningWorkaroundTriggered" xml:space="preserve">
|
||||
<value>已觸發錯誤 {0} 的解決方法。</value>
|
||||
<comment>{0} will be replaced by the bug's name provided by ASF</comment>
|
||||
</data>
|
||||
<data name="TargetBotNotConnected" xml:space="preserve">
|
||||
<value>目標機器人實例未連線!</value>
|
||||
</data>
|
||||
<data name="BotWalletBalance" xml:space="preserve">
|
||||
<value>錢包餘額:{0} {1}</value>
|
||||
<comment>{0} will be replaced by wallet balance value, {1} will be replaced by currency name</comment>
|
||||
</data>
|
||||
<data name="BotHasNoWallet" xml:space="preserve">
|
||||
<value>當前機器人無錢包餘額。</value>
|
||||
</data>
|
||||
<data name="BotLevel" xml:space="preserve">
|
||||
<value>當前機器人的等級為 {0}。</value>
|
||||
<comment>{0} will be replaced by bot's level</comment>
|
||||
</data>
|
||||
<data name="ActivelyMatchingItems" xml:space="preserve">
|
||||
<value>正在匹配 Steam 物品,第 #{0} 輪...</value>
|
||||
<comment>{0} will be replaced by round number</comment>
|
||||
</data>
|
||||
<data name="DoneActivelyMatchingItems" xml:space="preserve">
|
||||
<value>已完成匹配 Steam 物品,第 #{0} 輪。</value>
|
||||
<comment>{0} will be replaced by round number</comment>
|
||||
</data>
|
||||
<data name="ErrorAborted" xml:space="preserve">
|
||||
<value>已中止!</value>
|
||||
</data>
|
||||
<data name="ActivelyMatchingItemsRound" xml:space="preserve">
|
||||
<value>此輪共匹配 {0} 套物品。</value>
|
||||
<comment>{0} will be replaced by number of sets traded</comment>
|
||||
</data>
|
||||
<data name="WarningExcessiveBotsCount" xml:space="preserve">
|
||||
<value>您運行的個人機器人帳戶數目已經超出我們建議的上限 ({0}) 。請注意, 此設置不受支援, 可能會導致各種Stean相關的題, 包括帳戶停權 。有關詳細資訊, 請參閱常見問題解答。</value>
|
||||
<comment>{0} will be replaced by our maximum recommended bots count (number)</comment>
|
||||
</data>
|
||||
<data name="PluginLoaded" xml:space="preserve">
|
||||
<value>{0} 載入成功!</value>
|
||||
<comment>{0} will be replaced by the name of the custom ASF plugin</comment>
|
||||
</data>
|
||||
<data name="PluginLoading" xml:space="preserve">
|
||||
<value>正在載入 {0} V{1}...</value>
|
||||
<comment>{0} will be replaced by the name of the custom ASF plugin, {1} will be replaced by its version</comment>
|
||||
</data>
|
||||
<data name="NothingFound" xml:space="preserve">
|
||||
<value>未找到任何內容!</value>
|
||||
</data>
|
||||
<data name="PluginsWarning" xml:space="preserve">
|
||||
<value>您已將一個或多個自訂外掛程式載入到ASF中。由於我們無法支援修改過的程序, 如遭遇任何問題,請向相關外掛程式的開發者尋求協助。</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -186,7 +186,7 @@
|
||||
<value>無法進行更新,因為此版本沒有提供任何資源文件!</value>
|
||||
</data>
|
||||
<data name="ErrorUserInputRunningInHeadlessMode" xml:space="preserve">
|
||||
<value>收到一個使用者輸入請求,但程序目前正以無介面模式執行!</value>
|
||||
<value>收到一個使用者輸入請求,但程序目前正以無頭模式執行!</value>
|
||||
</data>
|
||||
<data name="Exiting" xml:space="preserve">
|
||||
<value>正在退出...</value>
|
||||
@@ -534,7 +534,7 @@
|
||||
<comment>{0} will be replaced by list of cd-keys (strings), separated by a comma</comment>
|
||||
</data>
|
||||
<data name="WarningFailedWithError" xml:space="preserve">
|
||||
<value>因發生錯誤而失敗:{0}</value>
|
||||
<value>因發生錯誤{0} 而失敗</value>
|
||||
<comment>{0} will be replaced by failure reason (string)</comment>
|
||||
</data>
|
||||
<data name="BotConnectionLost" xml:space="preserve">
|
||||
@@ -602,7 +602,7 @@
|
||||
<value>BOT 已被鎖定,無法透過掛卡得到卡片。</value>
|
||||
</data>
|
||||
<data name="ErrorFunctionOnlyInHeadlessMode" xml:space="preserve">
|
||||
<value>此功能僅能在無介面模式下使用!</value>
|
||||
<value>此功能僅能在無頭模式下使用!</value>
|
||||
</data>
|
||||
<data name="BotOwnedAlready" xml:space="preserve">
|
||||
<value>已擁有:{0}</value>
|
||||
|
||||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
2
wiki
2
wiki
Submodule wiki updated: 12ba9edb75...b2825eccc5
Reference in New Issue
Block a user