private LocalizedString GetTranslation(string keyName, params object[] arguments)
        {
            //Autoset gender if translation ends with "[f]"
            var hasLocalizedGenderF = arguments.Any(e => e is LocalizedString && e.ToString().EndsWith(GENDER_MARK));

            if (hasLocalizedGenderF)
            {
                var kyHasF = keyName.EndsWith("{f}");
                var args   = RemoveGenderMarkOfArguments(arguments);
                return(GetTranslation(kyHasF ? keyName : $"{keyName}{{f}}", args));
            }

            var hasTranslation = ResourceContent.TryGetValue(keyName, out var jToken) &&
                                 (jToken.HasValues || jToken.Value <string>() != null);

            //If the translation key was not found
            if (!hasTranslation)
            {
                return(new LocalizedString(keyName, string.Empty, true, LocaleFileName));
            }

            //Plural form translation
            if (jToken.HasValues)
            {
                var canBePluralForm = IsNumericType(arguments.FirstOrDefault());
                var pluralQuantity  = canBePluralForm
                                        ? Math.Abs(double.Parse(arguments.First().ToString()))
                                        : 1;

                dynamic dynToken = jToken;
                string  val      = pluralQuantity == 0
                                ? dynToken.Zero
                                : (pluralQuantity == 1 ? dynToken.One : dynToken.Other);
                return(new LocalizedString(
                           keyName, string.Format(val, arguments), string.IsNullOrWhiteSpace(val)));
            }

            //Single translation
            var value = jToken.Value <string>() ?? string.Empty;

            return(new LocalizedString(
                       keyName, string.Format(value, arguments), string.IsNullOrWhiteSpace(value)));
        }