mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-15 19:54:57 +08:00
Localizing Themes and Modules
- Added sample localizations for French --HG-- branch : dev
This commit is contained in:
@@ -181,6 +181,9 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Content Include="Views\Parts\Tags.ShowTags.Detail.BlogPost.cshtml" />
|
<Content Include="Views\Parts\Tags.ShowTags.Detail.BlogPost.cshtml" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="App_Data\Localization\fr-FR\orchard.module.po" />
|
||||||
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||||
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.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.
|
<!-- 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>
|
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<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" />
|
||||||
<Reference Include="System.Data" />
|
<Reference Include="System.Data" />
|
||||||
<Reference Include="System.ComponentModel.DataAnnotations">
|
<Reference Include="System.ComponentModel.DataAnnotations">
|
||||||
|
@@ -15,12 +15,17 @@ namespace Orchard.Modules.Services {
|
|||||||
private const string ModuleExtensionType = "module";
|
private const string ModuleExtensionType = "module";
|
||||||
private readonly IExtensionManager _extensionManager;
|
private readonly IExtensionManager _extensionManager;
|
||||||
private readonly IShellDescriptorManager _shellDescriptorManager;
|
private readonly IShellDescriptorManager _shellDescriptorManager;
|
||||||
|
private readonly IWorkContextAccessor _workContextAccessor;
|
||||||
|
|
||||||
public ModuleService(IOrchardServices orchardServices, IExtensionManager extensionManager,
|
public ModuleService(
|
||||||
IShellDescriptorManager shellDescriptorManager) {
|
IOrchardServices orchardServices,
|
||||||
|
IExtensionManager extensionManager,
|
||||||
|
IShellDescriptorManager shellDescriptorManager,
|
||||||
|
IWorkContextAccessor workContextAccessor) {
|
||||||
Services = orchardServices;
|
Services = orchardServices;
|
||||||
_extensionManager = extensionManager;
|
_extensionManager = extensionManager;
|
||||||
_shellDescriptorManager = shellDescriptorManager;
|
_shellDescriptorManager = shellDescriptorManager;
|
||||||
|
_workContextAccessor = workContextAccessor;
|
||||||
T = NullLocalizer.Instance;
|
T = NullLocalizer.Instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -187,16 +192,36 @@ namespace Orchard.Modules.Services {
|
|||||||
: featuresInQuestion.First()));
|
: 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 {
|
return new Module {
|
||||||
ModuleName = extensionDescriptor.Name,
|
ModuleName = extensionDescriptor.Name,
|
||||||
DisplayName = extensionDescriptor.DisplayName,
|
DisplayName = TryLocalize("Name", extensionDescriptor.DisplayName, localizer),
|
||||||
Description = extensionDescriptor.Description,
|
Description = TryLocalize("Description", extensionDescriptor.Description, localizer),
|
||||||
Version = extensionDescriptor.Version,
|
Version = extensionDescriptor.Version,
|
||||||
Author = extensionDescriptor.Author,
|
Author = TryLocalize("Author", extensionDescriptor.Author, localizer),
|
||||||
HomePage = extensionDescriptor.WebSite,
|
HomePage = TryLocalize("Website", extensionDescriptor.WebSite, localizer),
|
||||||
Tags = extensionDescriptor.Tags,
|
Tags = TryLocalize("Tags", extensionDescriptor.Tags, localizer),
|
||||||
Features = extensionDescriptor.Features
|
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
|
||||||
|
})
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -39,6 +39,10 @@
|
|||||||
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
|
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<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="Microsoft.CSharp" />
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
<Reference Include="System.Data" />
|
<Reference Include="System.Data" />
|
||||||
|
@@ -19,14 +19,17 @@ namespace Orchard.Themes.Services {
|
|||||||
private readonly IExtensionManager _extensionManager;
|
private readonly IExtensionManager _extensionManager;
|
||||||
private readonly IEnumerable<IThemeSelector> _themeSelectors;
|
private readonly IEnumerable<IThemeSelector> _themeSelectors;
|
||||||
private readonly IModuleService _moduleService;
|
private readonly IModuleService _moduleService;
|
||||||
|
private IWorkContextAccessor _workContextAccessor;
|
||||||
|
|
||||||
public ThemeService(
|
public ThemeService(
|
||||||
IExtensionManager extensionManager,
|
IExtensionManager extensionManager,
|
||||||
IEnumerable<IThemeSelector> themeSelectors,
|
IEnumerable<IThemeSelector> themeSelectors,
|
||||||
IModuleService moduleService) {
|
IModuleService moduleService,
|
||||||
|
IWorkContextAccessor workContextAccessor) {
|
||||||
_extensionManager = extensionManager;
|
_extensionManager = extensionManager;
|
||||||
_themeSelectors = themeSelectors;
|
_themeSelectors = themeSelectors;
|
||||||
_moduleService = moduleService;
|
_moduleService = moduleService;
|
||||||
|
_workContextAccessor = workContextAccessor;
|
||||||
Logger = NullLogger.Instance;
|
Logger = NullLogger.Instance;
|
||||||
T = NullLocalizer.Instance;
|
T = NullLocalizer.Instance;
|
||||||
}
|
}
|
||||||
@@ -174,15 +177,29 @@ namespace Orchard.Themes.Services {
|
|||||||
_extensionManager.UninstallExtension("Theme", themeName);
|
_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 {
|
return new Theme {
|
||||||
Author = descriptor.Author ?? "",
|
Author = TryLocalize("Author", descriptor.Author, localizer) ?? "",
|
||||||
Description = descriptor.Description ?? "",
|
Description = TryLocalize("Description", descriptor.Description, localizer) ?? "",
|
||||||
DisplayName = descriptor.DisplayName ?? "",
|
DisplayName = TryLocalize("DisplayName", descriptor.DisplayName, localizer) ?? "",
|
||||||
HomePage = descriptor.WebSite ?? "",
|
HomePage = TryLocalize("Website", descriptor.WebSite, localizer) ?? "",
|
||||||
ThemeName = descriptor.Name,
|
ThemeName = descriptor.Name,
|
||||||
Version = descriptor.Version ?? "",
|
Version = descriptor.Version ?? "",
|
||||||
Tags = descriptor.Tags ?? "",
|
Tags = TryLocalize("Tags", descriptor.Tags, localizer) ?? "",
|
||||||
Zones = descriptor.Zones ?? "",
|
Zones = descriptor.Zones ?? "",
|
||||||
BaseTheme = descriptor.BaseTheme ?? "",
|
BaseTheme = descriptor.BaseTheme ?? "",
|
||||||
};
|
};
|
||||||
|
@@ -139,6 +139,7 @@
|
|||||||
<Content Include="Themes\TheThemeMachine\Styles\site.css" />
|
<Content Include="Themes\TheThemeMachine\Styles\site.css" />
|
||||||
<Content Include="Themes\TheThemeMachine\Theme.png" />
|
<Content Include="Themes\TheThemeMachine\Theme.png" />
|
||||||
<Content Include="Themes\TheThemeMachine\Theme.txt" />
|
<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\Layout-homePage.cshtml" />
|
||||||
<None Include="Themes\TheThemeMachine\Views\Recent.cshtml">
|
<None Include="Themes\TheThemeMachine\Views\Recent.cshtml">
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
|
@@ -1,12 +1,15 @@
|
|||||||
using System.Web.Mvc;
|
using System.Web.Mvc;
|
||||||
using Autofac;
|
using Autofac;
|
||||||
using Orchard.Mvc;
|
|
||||||
|
|
||||||
namespace Orchard.Localization {
|
namespace Orchard.Localization {
|
||||||
public class LocalizationUtilities {
|
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) {
|
public static Localizer Resolve(ControllerContext controllerContext, string scope) {
|
||||||
var context = controllerContext.GetWorkContext();
|
var workContext = controllerContext.GetWorkContext();
|
||||||
return context == null ? NullLocalizer.Instance : Resolve(context.Resolve<ILifetimeScope>(), scope);
|
return Resolve(workContext, scope);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Localizer Resolve(IComponentContext context, string scope) {
|
public static Localizer Resolve(IComponentContext context, string scope) {
|
||||||
|
Reference in New Issue
Block a user