Localizing...

This commit is contained in:
JustArchi
2017-01-06 17:04:17 +01:00
parent dd8c1a79e4
commit 401b34748b
4 changed files with 278 additions and 30 deletions

View File

@@ -29,6 +29,7 @@ using System.Linq;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using ArchiSteamFarm.Localization;
using HtmlAgilityPack;
using Newtonsoft.Json;
@@ -134,7 +135,7 @@ namespace ArchiSteamFarm {
internal void Resume(bool userAction) {
if (StickyPause) {
if (!userAction) {
Bot.ArchiLogger.LogGenericInfo("Not honoring this request, as sticky pause is enabled!");
Bot.ArchiLogger.LogGenericInfo(Strings.IgnoredStickyPauseEnabled);
return;
}
@@ -167,7 +168,7 @@ namespace ArchiSteamFarm {
}
if (!await IsAnythingToFarm().ConfigureAwait(false)) {
Bot.ArchiLogger.LogGenericInfo("We don't have anything to farm on this account!");
Bot.ArchiLogger.LogGenericInfo(Strings.NothingToIdle);
await Bot.OnFarmingFinished(false).ConfigureAwait(false);
return;
}
@@ -177,11 +178,11 @@ namespace ArchiSteamFarm {
return;
}
Bot.ArchiLogger.LogGenericInfo("We have a total of " + GamesToFarm.Count + " games (" + GamesToFarm.Sum(game => game.CardsRemaining) + " cards) left to farm (~" + TimeRemaining.ToHumanReadable() + " remaining)...");
Bot.ArchiLogger.LogGenericInfo(string.Format(Strings.GamesToIdle, GamesToFarm.Count, GamesToFarm.Sum(game => game.CardsRemaining), TimeRemaining.ToHumanReadable()));
// This is the last moment for final check if we can farm
if (!Bot.IsPlayingPossible) {
Bot.ArchiLogger.LogGenericInfo("But farming is currently unavailable, we'll try later!");
Bot.ArchiLogger.LogGenericInfo(Strings.PlayingNotAvailable);
return;
}
@@ -193,7 +194,7 @@ namespace ArchiSteamFarm {
do {
// Now the algorithm used for farming depends on whether account is restricted or not
if (Bot.BotConfig.CardDropsRestricted) { // If we have restricted card drops, we use complex algorithm
Bot.ArchiLogger.LogGenericInfo("Chosen farming algorithm: Complex");
Bot.ArchiLogger.LogGenericInfo(string.Join(Strings.ChosenFarmingAlgorithm, "Complex"));
while (GamesToFarm.Count > 0) {
HashSet<Game> gamesToFarmSolo = GamesToFarm.Count > 1 ? new HashSet<Game>(GamesToFarm.Where(game => game.HoursPlayed >= HoursToBump)) : new HashSet<Game>(GamesToFarm);
if (gamesToFarmSolo.Count > 0) {
@@ -208,7 +209,7 @@ namespace ArchiSteamFarm {
}
} else {
if (FarmMultiple(GamesToFarm.OrderByDescending(game => game.HoursPlayed).Take(ArchiHandler.MaxGamesPlayedConcurrently))) {
Bot.ArchiLogger.LogGenericInfo("Done farming: " + string.Join(", ", GamesToFarm.Select(game => game.AppID)));
Bot.ArchiLogger.LogGenericInfo(string.Format(Strings.IdlingFinishedForGames, string.Join(", ", GamesToFarm.Select(game => game.AppID))));
} else {
NowFarming = false;
return;
@@ -216,7 +217,7 @@ namespace ArchiSteamFarm {
}
}
} else { // If we have unrestricted card drops, we use simple algorithm
Bot.ArchiLogger.LogGenericInfo("Chosen farming algorithm: Simple");
Bot.ArchiLogger.LogGenericInfo(string.Join(Strings.ChosenFarmingAlgorithm, "Simple"));
while (GamesToFarm.Count > 0) {
Game game = GamesToFarm.First();
if (await FarmSolo(game).ConfigureAwait(false)) {
@@ -232,7 +233,7 @@ namespace ArchiSteamFarm {
CurrentGamesFarming.ClearAndTrim();
NowFarming = false;
Bot.ArchiLogger.LogGenericInfo("Farming finished!");
Bot.ArchiLogger.LogGenericInfo(Strings.IdlingFinished);
await Bot.OnFarmingFinished(true).ConfigureAwait(false);
}
@@ -248,21 +249,18 @@ namespace ArchiSteamFarm {
return;
}
Bot.ArchiLogger.LogGenericInfo("Sending signal to stop farming");
KeepFarming = false;
FarmResetEvent.Set();
Bot.ArchiLogger.LogGenericInfo("Waiting for reaction...");
for (byte i = 0; (i < 5) && NowFarming; i++) {
await Task.Delay(1000).ConfigureAwait(false);
}
if (NowFarming) {
Bot.ArchiLogger.LogGenericWarning("Timed out!");
NowFarming = false;
}
Bot.ArchiLogger.LogGenericInfo("Farming stopped!");
Bot.ArchiLogger.LogGenericInfo(Strings.IdlingStopped);
Bot.OnFarmingStopped();
} finally {
FarmingSemaphore.Release();
@@ -277,7 +275,7 @@ namespace ArchiSteamFarm {
ushort? cardsRemaining = await GetCardsRemaining(appID).ConfigureAwait(false);
if (!cardsRemaining.HasValue) {
Bot.ArchiLogger.LogGenericWarning("Could not check cards status for " + appID + " (" + name + "), will try again later!");
Bot.ArchiLogger.LogGenericWarning(string.Format(Strings.WarningCouldNotCheckCardsStatus, appID, name));
return;
}
@@ -511,7 +509,7 @@ namespace ArchiSteamFarm {
bool? keepFarming = await ShouldFarm(game).ConfigureAwait(false);
while (keepFarming.GetValueOrDefault(true) && (DateTime.Now < endFarmingDate)) {
Bot.ArchiLogger.LogGenericInfo("Still farming: " + game.AppID + " (" + game.GameName + ")");
Bot.ArchiLogger.LogGenericInfo(string.Join(Strings.StillIdling, game.AppID, game.GameName));
DateTime startFarmingPeriod = DateTime.Now;
if (FarmResetEvent.Wait(60 * 1000 * Program.GlobalConfig.FarmingDelay)) {
@@ -529,7 +527,7 @@ namespace ArchiSteamFarm {
keepFarming = await ShouldFarm(game).ConfigureAwait(false);
}
Bot.ArchiLogger.LogGenericInfo("Stopped farming: " + game.AppID + " (" + game.GameName + ")");
Bot.ArchiLogger.LogGenericInfo(string.Join(Strings.StoppedIdling, game.AppID, game.GameName));
return success;
}
@@ -546,7 +544,7 @@ namespace ArchiSteamFarm {
}
if (maxHour >= HoursToBump) {
Bot.ArchiLogger.LogGenericError("Received request for already boosted games!");
Bot.ArchiLogger.LogGenericError(string.Format(Strings.ErrorIsInvalid, nameof(maxHour)));
return true;
}
@@ -554,7 +552,7 @@ namespace ArchiSteamFarm {
bool success = true;
while (maxHour < 2) {
Bot.ArchiLogger.LogGenericInfo("Still farming: " + string.Join(", ", games.Select(game => game.AppID)));
Bot.ArchiLogger.LogGenericInfo(string.Format(Strings.StillIdlingList, string.Join(", ", games.Select(game => game.AppID))));
DateTime startFarmingPeriod = DateTime.Now;
if (FarmResetEvent.Wait(60 * 1000 * Program.GlobalConfig.FarmingDelay)) {
@@ -575,7 +573,7 @@ namespace ArchiSteamFarm {
maxHour += timePlayed;
}
Bot.ArchiLogger.LogGenericInfo("Stopped farming: " + string.Join(", ", games.Select(game => game.AppID)));
Bot.ArchiLogger.LogGenericInfo(string.Format(Strings.StoppedIdlingList, string.Join(", ", games.Select(game => game.AppID))));
return success;
}
@@ -587,7 +585,7 @@ namespace ArchiSteamFarm {
CurrentGamesFarming.ReplaceWith(games);
Bot.ArchiLogger.LogGenericInfo("Now farming: " + string.Join(", ", CurrentGamesFarming.Select(game => game.AppID)));
Bot.ArchiLogger.LogGenericInfo(string.Format(Strings.NowIdlingList, string.Join(", ", CurrentGamesFarming.Select(game => game.AppID))));
bool result = FarmHours(CurrentGamesFarming);
CurrentGamesFarming.ClearAndTrim();
@@ -602,7 +600,7 @@ namespace ArchiSteamFarm {
CurrentGamesFarming.Add(game);
Bot.ArchiLogger.LogGenericInfo("Now farming: " + game.AppID + " (" + game.GameName + ")");
Bot.ArchiLogger.LogGenericInfo(string.Join(Strings.NowIdling, game.AppID, game.GameName));
bool result = await Farm(game).ConfigureAwait(false);
CurrentGamesFarming.ClearAndTrim();
@@ -613,7 +611,7 @@ namespace ArchiSteamFarm {
GamesToFarm.Remove(game);
Bot.ArchiLogger.LogGenericInfo("Done farming: " + game.AppID + " (" + game.GameName + ")" + (game.HoursPlayed > 0 ? " after " + TimeSpan.FromHours(game.HoursPlayed).ToHumanReadable() + " of playtime!" : ""));
Bot.ArchiLogger.LogGenericInfo(string.Join(Strings.IdlingFinishedForGame, game.AppID, game.GameName, TimeSpan.FromHours(game.HoursPlayed).ToHumanReadable()));
return true;
}
@@ -651,13 +649,11 @@ namespace ArchiSteamFarm {
}
private async Task<bool> IsAnythingToFarm() {
Bot.ArchiLogger.LogGenericInfo("Checking badges...");
// Find the number of badge pages
Bot.ArchiLogger.LogGenericInfo("Checking first page...");
Bot.ArchiLogger.LogGenericInfo(Strings.CheckingFirstBadgePage);
HtmlDocument htmlDocument = await Bot.ArchiWebHandler.GetBadgePage(1).ConfigureAwait(false);
if (htmlDocument == null) {
Bot.ArchiLogger.LogGenericWarning("Could not get badges information, will try again later!");
Bot.ArchiLogger.LogGenericWarning(Strings.WarningCouldNotCheckBadges);
return false;
}
@@ -682,7 +678,7 @@ namespace ArchiSteamFarm {
List<Task> tasks = new List<Task>(maxPages - 1) { CheckPage(htmlDocument) };
if (maxPages > 1) {
Bot.ArchiLogger.LogGenericInfo("Checking other pages...");
Bot.ArchiLogger.LogGenericInfo(Strings.CheckingOtherBadgePages);
for (byte page = 2; page <= maxPages; page++) {
byte currentPage = page; // We need a copy of variable being passed when in for loops, as loop will proceed before task is launched
@@ -703,13 +699,13 @@ namespace ArchiSteamFarm {
ushort? cardsRemaining = await GetCardsRemaining(game.AppID).ConfigureAwait(false);
if (!cardsRemaining.HasValue) {
Bot.ArchiLogger.LogGenericWarning("Could not check cards status for " + game.AppID + " (" + game.GameName + "), will try again later!");
Bot.ArchiLogger.LogGenericWarning(string.Format(Strings.WarningCouldNotCheckCardsStatus, game.AppID, game.GameName));
return null;
}
game.CardsRemaining = cardsRemaining.Value;
Bot.ArchiLogger.LogGenericInfo("Status for " + game.AppID + " (" + game.GameName + "): " + game.CardsRemaining + " cards remaining");
Bot.ArchiLogger.LogGenericInfo(string.Format(Strings.IdlingStatusForGame, game.AppID, game.GameName, game.CardsRemaining));
return game.CardsRemaining > 0;
}
@@ -743,7 +739,7 @@ namespace ArchiSteamFarm {
gamesToFarm = GamesToFarm.OrderByDescending(game => game.GameName);
break;
default:
Bot.ArchiLogger.LogGenericError("Unhandled case: " + Bot.BotConfig.FarmingOrder);
Bot.ArchiLogger.LogGenericError(string.Format(Strings.ErrorIsInvalid, nameof(Bot.BotConfig.FarmingOrder)));
return;
}

View File

@@ -78,6 +78,33 @@ namespace ArchiSteamFarm.Localization {
}
}
/// <summary>
/// Looks up a localized string similar to Checking first badge page....
/// </summary>
internal static string CheckingFirstBadgePage {
get {
return ResourceManager.GetString("CheckingFirstBadgePage", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Checking other badge pages....
/// </summary>
internal static string CheckingOtherBadgePages {
get {
return ResourceManager.GetString("CheckingOtherBadgePages", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Chosen farming algorithm: {0}.
/// </summary>
internal static string ChosenFarmingAlgorithm {
get {
return ResourceManager.GetString("ChosenFarmingAlgorithm", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Content:
///{0}.
@@ -288,6 +315,15 @@ namespace ArchiSteamFarm.Localization {
}
}
/// <summary>
/// Looks up a localized string similar to We have a total of {0} games ({1} cards) left to idle (~{3} remaining)....
/// </summary>
internal static string GamesToIdle {
get {
return ResourceManager.GetString("GamesToIdle", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Global config file has been changed!.
/// </summary>
@@ -297,6 +333,60 @@ namespace ArchiSteamFarm.Localization {
}
}
/// <summary>
/// Looks up a localized string similar to Idling finished!.
/// </summary>
internal static string IdlingFinished {
get {
return ResourceManager.GetString("IdlingFinished", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Finished idling: {0} ({1}) after {2} of playtime!.
/// </summary>
internal static string IdlingFinishedForGame {
get {
return ResourceManager.GetString("IdlingFinishedForGame", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Finished idling games: {0}.
/// </summary>
internal static string IdlingFinishedForGames {
get {
return ResourceManager.GetString("IdlingFinishedForGames", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Idling status for {0} ({1}): {2} cards remaining.
/// </summary>
internal static string IdlingStatusForGame {
get {
return ResourceManager.GetString("IdlingStatusForGame", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Idling stopped!.
/// </summary>
internal static string IdlingStopped {
get {
return ResourceManager.GetString("IdlingStopped", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Not honoring this request, as sticky pause is enabled!.
/// </summary>
internal static string IgnoredStickyPauseEnabled {
get {
return ResourceManager.GetString("IgnoredStickyPauseEnabled", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Ignoring trade: {0}.
/// </summary>
@@ -324,6 +414,42 @@ namespace ArchiSteamFarm.Localization {
}
}
/// <summary>
/// Looks up a localized string similar to We don&apos;t have anything to idle on this account!.
/// </summary>
internal static string NothingToIdle {
get {
return ResourceManager.GetString("NothingToIdle", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Now idling: {0} ({1}).
/// </summary>
internal static string NowIdling {
get {
return ResourceManager.GetString("NowIdling", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Now idling: {0}.
/// </summary>
internal static string NowIdlingList {
get {
return ResourceManager.GetString("NowIdlingList", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Playing is currently unavailable, we&apos;ll try again later!.
/// </summary>
internal static string PlayingNotAvailable {
get {
return ResourceManager.GetString("PlayingNotAvailable", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Refreshing our session!.
/// </summary>
@@ -387,6 +513,42 @@ namespace ArchiSteamFarm.Localization {
}
}
/// <summary>
/// Looks up a localized string similar to Still idling: {0} ({1}).
/// </summary>
internal static string StillIdling {
get {
return ResourceManager.GetString("StillIdling", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Still idling: {0}.
/// </summary>
internal static string StillIdlingList {
get {
return ResourceManager.GetString("StillIdlingList", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Stopped idling: {0} ({1}).
/// </summary>
internal static string StoppedIdling {
get {
return ResourceManager.GetString("StoppedIdling", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Stopped idling: {0}.
/// </summary>
internal static string StoppedIdlingList {
get {
return ResourceManager.GetString("StoppedIdlingList", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Success!.
/// </summary>
@@ -594,6 +756,24 @@ namespace ArchiSteamFarm.Localization {
}
}
/// <summary>
/// Looks up a localized string similar to Could not get badges information, we will try again later!.
/// </summary>
internal static string WarningCouldNotCheckBadges {
get {
return ResourceManager.GetString("WarningCouldNotCheckBadges", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Could not check cards status for: {0} ({1}), we will try again later!.
/// </summary>
internal static string WarningCouldNotCheckCardsStatus {
get {
return ResourceManager.GetString("WarningCouldNotCheckCardsStatus", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Failed!.
/// </summary>

View File

@@ -371,4 +371,76 @@ StackTrace:
<value>Starting WCF server on {0}...</value>
<comment>{0} will be replaced by WCF hostname</comment>
</data>
<data name="CheckingFirstBadgePage" xml:space="preserve">
<value>Checking first badge page...</value>
</data>
<data name="CheckingOtherBadgePages" xml:space="preserve">
<value>Checking other badge pages...</value>
</data>
<data name="ChosenFarmingAlgorithm" xml:space="preserve">
<value>Chosen farming algorithm: {0}</value>
<comment>{0} will be replaced by the name of chosen farming algorithm</comment>
</data>
<data name="GamesToIdle" xml:space="preserve">
<value>We have a total of {0} games ({1} cards) left to idle (~{3} remaining)...</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 built from TimeSpan* translation parts</comment>
</data>
<data name="IdlingFinished" xml:space="preserve">
<value>Idling finished!</value>
</data>
<data name="IdlingFinishedForGame" xml:space="preserve">
<value>Finished idling: {0} ({1}) after {2} of playtime!</value>
<comment>{0} will be replaced by game's appID (number), {1} will be replaced by game's name, {2} will be replaced by translated TimeSpan string built from TimeSpan* translation parts</comment>
</data>
<data name="IdlingFinishedForGames" xml:space="preserve">
<value>Finished idling games: {0}</value>
<comment>{0} will be replaced by list of the games (appIDs, numbers), separated by a comma</comment>
</data>
<data name="IdlingStatusForGame" xml:space="preserve">
<value>Idling status for {0} ({1}): {2} cards remaining</value>
<comment>{0} will be replaced by game's appID (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>Idling stopped!</value>
</data>
<data name="IgnoredStickyPauseEnabled" xml:space="preserve">
<value>Not honoring this request, as sticky pause is enabled!</value>
</data>
<data name="NothingToIdle" xml:space="preserve">
<value>We don't have anything to idle on this account!</value>
</data>
<data name="NowIdling" xml:space="preserve">
<value>Now idling: {0} ({1})</value>
<comment>{0} will be replaced by game's appID (number), {1} will be replaced by game's name</comment>
</data>
<data name="NowIdlingList" xml:space="preserve">
<value>Now idling: {0}</value>
<comment>{0} will be replaced by list of the games (appIDs, numbers), separated by a comma</comment>
</data>
<data name="PlayingNotAvailable" xml:space="preserve">
<value>Playing is currently unavailable, we'll try again later!</value>
</data>
<data name="StillIdling" xml:space="preserve">
<value>Still idling: {0} ({1})</value>
<comment>{0} will be replaced by game's appID (number), {1} will be replaced by game's name</comment>
</data>
<data name="StillIdlingList" xml:space="preserve">
<value>Still idling: {0}</value>
<comment>{0} will be replaced by list of the games (appIDs, numbers), separated by a comma</comment>
</data>
<data name="StoppedIdling" xml:space="preserve">
<value>Stopped idling: {0} ({1})</value>
<comment>{0} will be replaced by game's appID (number), {1} will be replaced by game's name</comment>
</data>
<data name="StoppedIdlingList" xml:space="preserve">
<value>Stopped idling: {0}</value>
<comment>{0} will be replaced by list of the games (appIDs, numbers), separated by a comma</comment>
</data>
<data name="WarningCouldNotCheckBadges" xml:space="preserve">
<value>Could not get badges information, we will try again later!</value>
</data>
<data name="WarningCouldNotCheckCardsStatus" xml:space="preserve">
<value>Could not check cards status for: {0} ({1}), we will try again later!</value>
<comment>{0} will be replaced by game's appID (number), {1} will be replaced by game's name</comment>
</data>
</root>

View File

@@ -100,7 +100,7 @@ namespace ArchiSteamFarm {
}
if (result.Length == 0) {
return "";
return string.Format(Strings.TimeSpanSeconds, 0);
}
// Get rid of last comma + space