Browse Source

fix implementation bugs

pull/2211/head
Cenngo 3 years ago
parent
commit
c6c545cb19
3 changed files with 22 additions and 14 deletions
  1. +14
    -9
      src/Discord.Net.Interactions/LocalizationManagers/ResxLocalizationManager.cs
  2. +3
    -3
      src/Discord.Net.Interactions/Utilities/CommandHierarchy.cs
  3. +5
    -2
      src/Discord.Net.Rest/API/Common/ApplicationCommandOption.cs

+ 14
- 9
src/Discord.Net.Interactions/LocalizationManagers/ResxLocalizationManager.cs View File

@@ -1,7 +1,10 @@
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Diagnostics;
using System.Globalization;
using System.Linq;
using System.Reflection;
using System.Resources;
using System.Threading.Tasks;
@@ -15,11 +18,13 @@ namespace Discord.Interactions
{
private const string NameIdentifier = "name";
private const string DescriptionIdentifier = "description";
private const string SpaceToken = "~";

private readonly string _baseResource;
private readonly Assembly _assembly;
private static readonly ConcurrentDictionary<string, ResourceManager> _localizerCache = new();
private readonly IEnumerable<CultureInfo> _supportedLocales;
private readonly IEnumerable<string> _resourceNames;

/// <summary>
/// Initializes a new instance of the <see cref="ResxLocalizationManager"/> class.
@@ -32,6 +37,7 @@ namespace Discord.Interactions
_baseResource = baseResource;
_assembly = assembly;
_supportedLocales = supportedLocales;
_resourceNames = assembly.GetManifestResourceNames();
}

/// <inheritdoc />
@@ -44,20 +50,19 @@ namespace Discord.Interactions

private IDictionary<string, string> GetValues(IList<string> key, string identifier)
{
var result = new Dictionary<string, string>();
var resourceName = (_baseResource + "." + string.Join(".", key)).Replace(" ", SpaceToken);

if (!_resourceNames.Any(x => string.Equals(resourceName + ".resources", x, StringComparison.OrdinalIgnoreCase)))
return ImmutableDictionary<string, string>.Empty;

var resourceName = _baseResource + "." + string.Join(".", key);
var result = new Dictionary<string, string>();
var resourceManager = _localizerCache.GetOrAdd(resourceName, new ResourceManager(resourceName, _assembly));

foreach (var locale in _supportedLocales)
{
try
{
var value = resourceManager.GetString(identifier, locale);
if (value is not null)
result[locale.Name] = value;
}
catch (MissingManifestResourceException){}
var value = resourceManager.GetString(identifier, locale);
if (value is not null)
result[locale.Name] = value;
}

return result;


+ 3
- 3
src/Discord.Net.Interactions/Utilities/CommandHierarchy.cs View File

@@ -29,21 +29,21 @@ namespace Discord.Interactions
return new string[] { commandInfo.Name };

var path = commandInfo.Module.GetModulePath();
path.Insert(0, commandInfo.Name);
path.Add(commandInfo.Name);
return path;
}

public static IList<string> GetParameterPath(this IParameterInfo parameterInfo)
{
var path = parameterInfo.Command.GetCommandPath();
path.Insert(0, parameterInfo.Name);
path.Add(parameterInfo.Name);
return path;
}

public static IList<string> GetChoicePath(this IParameterInfo parameterInfo, ParameterChoice choice)
{
var path = parameterInfo.GetParameterPath();
path.Insert(0, choice.Name);
path.Add(choice.Name);
return path;
}



+ 5
- 2
src/Discord.Net.Rest/API/Common/ApplicationCommandOption.cs View File

@@ -75,8 +75,8 @@ namespace Discord.API
Type = cmd.Type;
Description = cmd.Description;

NameLocalizations = cmd.NameLocalizations?.ToDictionary(x => x.Key, x => x.Value) ?? Optional<Dictionary<string, string>>.Unspecified;
DescriptionLocalizations = cmd.DescriptionLocalizations?.ToDictionary(x => x.Key, x => x.Value) ?? Optional<Dictionary<string, string>>.Unspecified;
NameLocalizations = cmd.NameLocalizations?.ToDictionary() ?? Optional<Dictionary<string, string>>.Unspecified;
DescriptionLocalizations = cmd.DescriptionLocalizations?.ToDictionary() ?? Optional<Dictionary<string, string>>.Unspecified;
NameLocalized = cmd.NameLocalized;
DescriptionLocalized = cmd.DescriptionLocalized;
}
@@ -102,6 +102,9 @@ namespace Discord.API
Type = option.Type;
Description = option.Description;
Autocomplete = option.IsAutocomplete;

NameLocalizations = option.NameLocalizations?.ToDictionary() ?? Optional<Dictionary<string, string>>.Unspecified;
DescriptionLocalizations = option.DescriptionLocalizations?.ToDictionary() ?? Optional<Dictionary<string, string>>.Unspecified;
}
}
}

Loading…
Cancel
Save