mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-14 10:54:50 +08:00
Localizing Themes and Modules
- Added sample localizations for French --HG-- branch : dev
This commit is contained in:
@@ -181,6 +181,9 @@
|
||||
<ItemGroup>
|
||||
<Content Include="Views\Parts\Tags.ShowTags.Detail.BlogPost.cshtml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="App_Data\Localization\fr-FR\orchard.module.po" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
|
@@ -39,6 +39,10 @@
|
||||
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Autofac, Version=2.2.4.900, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\..\..\lib\autofac\Autofac.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.ComponentModel.DataAnnotations">
|
||||
|
@@ -15,12 +15,17 @@ namespace Orchard.Modules.Services {
|
||||
private const string ModuleExtensionType = "module";
|
||||
private readonly IExtensionManager _extensionManager;
|
||||
private readonly IShellDescriptorManager _shellDescriptorManager;
|
||||
private readonly IWorkContextAccessor _workContextAccessor;
|
||||
|
||||
public ModuleService(IOrchardServices orchardServices, IExtensionManager extensionManager,
|
||||
IShellDescriptorManager shellDescriptorManager) {
|
||||
public ModuleService(
|
||||
IOrchardServices orchardServices,
|
||||
IExtensionManager extensionManager,
|
||||
IShellDescriptorManager shellDescriptorManager,
|
||||
IWorkContextAccessor workContextAccessor) {
|
||||
Services = orchardServices;
|
||||
_extensionManager = extensionManager;
|
||||
_shellDescriptorManager = shellDescriptorManager;
|
||||
_workContextAccessor = workContextAccessor;
|
||||
T = NullLocalizer.Instance;
|
||||
}
|
||||
|
||||
@@ -187,17 +192,37 @@ namespace Orchard.Modules.Services {
|
||||
: featuresInQuestion.First()));
|
||||
}
|
||||
|
||||
private static IModule AssembleModuleFromDescriptor(ExtensionDescriptor extensionDescriptor) {
|
||||
private static string TryLocalize(string key, string original, Localizer localizer) {
|
||||
var localized = localizer(key).Text;
|
||||
|
||||
if(key == localized) {
|
||||
// no specific localization available
|
||||
return original;
|
||||
}
|
||||
|
||||
return localized;
|
||||
}
|
||||
|
||||
private IModule AssembleModuleFromDescriptor(ExtensionDescriptor extensionDescriptor) {
|
||||
|
||||
var localizer = LocalizationUtilities.Resolve(_workContextAccessor.GetContext(), String.Concat(extensionDescriptor.Location, "/", extensionDescriptor.Name, "/Module.txt"));
|
||||
|
||||
return new Module {
|
||||
ModuleName = extensionDescriptor.Name,
|
||||
DisplayName = extensionDescriptor.DisplayName,
|
||||
Description = extensionDescriptor.Description,
|
||||
Version = extensionDescriptor.Version,
|
||||
Author = extensionDescriptor.Author,
|
||||
HomePage = extensionDescriptor.WebSite,
|
||||
Tags = extensionDescriptor.Tags,
|
||||
Features = extensionDescriptor.Features
|
||||
};
|
||||
ModuleName = extensionDescriptor.Name,
|
||||
DisplayName = TryLocalize("Name", extensionDescriptor.DisplayName, localizer),
|
||||
Description = TryLocalize("Description", extensionDescriptor.Description, localizer),
|
||||
Version = extensionDescriptor.Version,
|
||||
Author = TryLocalize("Author", extensionDescriptor.Author, localizer),
|
||||
HomePage = TryLocalize("Website", extensionDescriptor.WebSite, localizer),
|
||||
Tags = TryLocalize("Tags", extensionDescriptor.Tags, localizer),
|
||||
Features = extensionDescriptor.Features.Select(f => new FeatureDescriptor {
|
||||
Category = TryLocalize(f.Name + " Category", f.Category, localizer),
|
||||
Dependencies = f.Dependencies,
|
||||
Description = TryLocalize(f.Description + " Description", f.Description, localizer),
|
||||
Extension = f.Extension,
|
||||
Name = f.Name
|
||||
})
|
||||
};
|
||||
}
|
||||
|
||||
private static IModuleFeature AssembleModuleFromDescriptor(Feature feature, bool isEnabled) {
|
||||
|
@@ -39,6 +39,10 @@
|
||||
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Autofac, Version=2.2.4.900, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\..\..\lib\autofac\Autofac.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Data" />
|
||||
|
@@ -19,14 +19,17 @@ namespace Orchard.Themes.Services {
|
||||
private readonly IExtensionManager _extensionManager;
|
||||
private readonly IEnumerable<IThemeSelector> _themeSelectors;
|
||||
private readonly IModuleService _moduleService;
|
||||
private IWorkContextAccessor _workContextAccessor;
|
||||
|
||||
public ThemeService(
|
||||
IExtensionManager extensionManager,
|
||||
IEnumerable<IThemeSelector> themeSelectors,
|
||||
IModuleService moduleService) {
|
||||
IModuleService moduleService,
|
||||
IWorkContextAccessor workContextAccessor) {
|
||||
_extensionManager = extensionManager;
|
||||
_themeSelectors = themeSelectors;
|
||||
_moduleService = moduleService;
|
||||
_workContextAccessor = workContextAccessor;
|
||||
Logger = NullLogger.Instance;
|
||||
T = NullLocalizer.Instance;
|
||||
}
|
||||
@@ -174,15 +177,29 @@ namespace Orchard.Themes.Services {
|
||||
_extensionManager.UninstallExtension("Theme", themeName);
|
||||
}
|
||||
|
||||
private static ITheme CreateTheme(ExtensionDescriptor descriptor) {
|
||||
private static string TryLocalize(string key, string original, Localizer localizer) {
|
||||
var localized = localizer(key).Text;
|
||||
|
||||
if ( key == localized ) {
|
||||
// no specific localization available
|
||||
return original;
|
||||
}
|
||||
|
||||
return localized;
|
||||
}
|
||||
|
||||
private ITheme CreateTheme(ExtensionDescriptor descriptor) {
|
||||
|
||||
var localizer = LocalizationUtilities.Resolve(_workContextAccessor.GetContext(), String.Concat(descriptor.Location, "/", descriptor.Name, "/Theme.txt"));
|
||||
|
||||
return new Theme {
|
||||
Author = descriptor.Author ?? "",
|
||||
Description = descriptor.Description ?? "",
|
||||
DisplayName = descriptor.DisplayName ?? "",
|
||||
HomePage = descriptor.WebSite ?? "",
|
||||
Author = TryLocalize("Author", descriptor.Author, localizer) ?? "",
|
||||
Description = TryLocalize("Description", descriptor.Description, localizer) ?? "",
|
||||
DisplayName = TryLocalize("DisplayName", descriptor.DisplayName, localizer) ?? "",
|
||||
HomePage = TryLocalize("Website", descriptor.WebSite, localizer) ?? "",
|
||||
ThemeName = descriptor.Name,
|
||||
Version = descriptor.Version ?? "",
|
||||
Tags = descriptor.Tags ?? "",
|
||||
Tags = TryLocalize("Tags", descriptor.Tags, localizer) ?? "",
|
||||
Zones = descriptor.Zones ?? "",
|
||||
BaseTheme = descriptor.BaseTheme ?? "",
|
||||
};
|
||||
|
@@ -139,6 +139,7 @@
|
||||
<Content Include="Themes\TheThemeMachine\Styles\site.css" />
|
||||
<Content Include="Themes\TheThemeMachine\Theme.png" />
|
||||
<Content Include="Themes\TheThemeMachine\Theme.txt" />
|
||||
<None Include="Themes\Classic\App_Data\Localization\fr-FR\orchard.theme.po" />
|
||||
<None Include="Themes\TheThemeMachine\Views\Layout-homePage.cshtml" />
|
||||
<None Include="Themes\TheThemeMachine\Views\Recent.cshtml">
|
||||
<SubType>Designer</SubType>
|
||||
|
@@ -1,12 +1,15 @@
|
||||
using System.Web.Mvc;
|
||||
using Autofac;
|
||||
using Orchard.Mvc;
|
||||
|
||||
namespace Orchard.Localization {
|
||||
public class LocalizationUtilities {
|
||||
public static Localizer Resolve(WorkContext workContext, string scope) {
|
||||
return workContext == null ? NullLocalizer.Instance : Resolve(workContext.Resolve<ILifetimeScope>(), scope);
|
||||
}
|
||||
|
||||
public static Localizer Resolve(ControllerContext controllerContext, string scope) {
|
||||
var context = controllerContext.GetWorkContext();
|
||||
return context == null ? NullLocalizer.Instance : Resolve(context.Resolve<ILifetimeScope>(), scope);
|
||||
var workContext = controllerContext.GetWorkContext();
|
||||
return Resolve(workContext, scope);
|
||||
}
|
||||
|
||||
public static Localizer Resolve(IComponentContext context, string scope) {
|
||||
|
Reference in New Issue
Block a user