Skip to content

Commit 199782d

Browse files
Ra/po loc (#19863)
* Add PO Localization sample for 3.x * Update portable object localization article * PO loc with versions * PO loc with versions * PO loc with versions * PO loc with versions Co-authored-by: hishamco <hishamco_2007@yahoo.com>
1 parent 0328087 commit 199782d

28 files changed

Lines changed: 727 additions & 0 deletions
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"directory": "wwwroot/lib"
3+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Diagnostics;
4+
using System.Linq;
5+
using System.Threading.Tasks;
6+
using Microsoft.AspNetCore.Mvc;
7+
using POLocalization.Models;
8+
9+
namespace POLocalization.Controllers
10+
{
11+
public class HomeController : Controller
12+
{
13+
public IActionResult Index()
14+
{
15+
return View();
16+
}
17+
18+
public IActionResult About()
19+
{
20+
ViewData["Message"] = "Your application description page.";
21+
22+
return View();
23+
}
24+
25+
public IActionResult Contact()
26+
{
27+
ViewData["Message"] = "Your contact page.";
28+
29+
return View();
30+
}
31+
32+
public IActionResult Error()
33+
{
34+
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
35+
}
36+
}
37+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
using System;
2+
3+
namespace POLocalization.Models
4+
{
5+
public class ErrorViewModel
6+
{
7+
public string RequestId { get; set; }
8+
9+
public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);
10+
}
11+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<Project Sdk="Microsoft.NET.Sdk.Web">
2+
3+
<PropertyGroup>
4+
<TargetFramework>netcoreapp3.1</TargetFramework>
5+
</PropertyGroup>
6+
7+
<ItemGroup>
8+
<PackageReference Include="OrchardCore.Localization.Core" Version="1.0.0-rc2-13450" />
9+
</ItemGroup>
10+
11+
<ItemGroup>
12+
<DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.0" />
13+
</ItemGroup>
14+
15+
</Project>
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
using Microsoft.AspNetCore.Hosting;
2+
using Microsoft.Extensions.Hosting;
3+
4+
namespace POLocalization
5+
{
6+
public class Program
7+
{
8+
public static void Main(string[] args)
9+
{
10+
CreateHostBuilder(args).Build().Run();
11+
}
12+
13+
public static IHostBuilder CreateHostBuilder(string[] args) =>
14+
Host.CreateDefaultBuilder(args)
15+
.ConfigureWebHostDefaults(webBuilder =>
16+
{
17+
webBuilder.UseStartup<Startup>();
18+
});
19+
}
20+
}
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
using Microsoft.AspNetCore.Builder;
2+
using Microsoft.AspNetCore.Hosting;
3+
using Microsoft.AspNetCore.Localization;
4+
using Microsoft.AspNetCore.Mvc.Razor;
5+
using Microsoft.Extensions.Configuration;
6+
using Microsoft.Extensions.DependencyInjection;
7+
using Microsoft.Extensions.Hosting;
8+
using System.Collections.Generic;
9+
using System.Globalization;
10+
11+
namespace POLocalization
12+
{
13+
public class Startup
14+
{
15+
public Startup(IConfiguration configuration)
16+
{
17+
Configuration = configuration;
18+
}
19+
20+
public IConfiguration Configuration { get; }
21+
22+
// This method gets called by the runtime. Use this method to add services to the container.
23+
#region snippet_ConfigureServices
24+
public void ConfigureServices(IServiceCollection services)
25+
{
26+
services.AddMvc()
27+
.AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix);
28+
29+
services.AddPortableObjectLocalization();
30+
31+
services.Configure<RequestLocalizationOptions>(options =>
32+
{
33+
var supportedCultures = new List<CultureInfo>
34+
{
35+
new CultureInfo("en-US"),
36+
new CultureInfo("en"),
37+
new CultureInfo("fr-FR"),
38+
new CultureInfo("fr")
39+
};
40+
41+
options.DefaultRequestCulture = new RequestCulture("en-US");
42+
options.SupportedCultures = supportedCultures;
43+
options.SupportedUICultures = supportedCultures;
44+
});
45+
}
46+
#endregion
47+
48+
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
49+
#region snippet_Configure
50+
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
51+
{
52+
if (env.IsDevelopment())
53+
{
54+
app.UseDeveloperExceptionPage();
55+
}
56+
else
57+
{
58+
app.UseExceptionHandler("/Home/Error");
59+
}
60+
61+
app.UseRouting();
62+
app.UseStaticFiles();
63+
64+
app.UseRequestLocalization();
65+
66+
app.UseEndpoints(endpoints =>
67+
{
68+
endpoints.MapControllerRoute(name: "default", pattern: "{controller=Home}/{action=Index}/{id?}");
69+
});
70+
}
71+
#endregion
72+
}
73+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
@using Microsoft.AspNetCore.Mvc.Localization
2+
@inject IViewLocalizer Localizer
3+
4+
<p>@Localizer["Hello world!"]</p>
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
@{
2+
ViewData["Title"] = "Contact";
3+
}
4+
<h2>@ViewData["Title"]</h2>
5+
<h3>@ViewData["Message"]</h3>
6+
7+
<address>
8+
One Microsoft Way<br />
9+
Redmond, WA 98052-6399<br />
10+
<abbr title="Phone">P:</abbr>
11+
425.555.0100
12+
</address>
13+
14+
<address>
15+
<strong>Support:</strong> <a href="mailto:Support@example.com">Support@example.com</a><br />
16+
<strong>Marketing:</strong> <a href="mailto:Marketing@example.com">Marketing@example.com</a>
17+
</address>
Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
@{
2+
ViewData["Title"] = "Home Page";
3+
}
4+
5+
<div id="myCarousel" class="carousel slide" data-ride="carousel" data-interval="6000">
6+
<ol class="carousel-indicators">
7+
<li data-target="#myCarousel" data-slide-to="0" class="active"></li>
8+
<li data-target="#myCarousel" data-slide-to="1"></li>
9+
<li data-target="#myCarousel" data-slide-to="2"></li>
10+
<li data-target="#myCarousel" data-slide-to="3"></li>
11+
</ol>
12+
<div class="carousel-inner" role="listbox">
13+
<div class="item active">
14+
<img src="~/images/banner1.svg" alt="ASP.NET" class="img-responsive" />
15+
<div class="carousel-caption" role="option">
16+
<p>
17+
Learn how to build ASP.NET apps that can run anywhere.
18+
<a class="btn btn-default" href="https://go.microsoft.com/fwlink/?LinkID=525028&clcid=0x409">
19+
Learn More
20+
</a>
21+
</p>
22+
</div>
23+
</div>
24+
<div class="item">
25+
<img src="~/images/banner2.svg" alt="Visual Studio" class="img-responsive" />
26+
<div class="carousel-caption" role="option">
27+
<p>
28+
There are powerful new features in Visual Studio for building modern web apps.
29+
<a class="btn btn-default" href="https://go.microsoft.com/fwlink/?LinkID=525030&clcid=0x409">
30+
Learn More
31+
</a>
32+
</p>
33+
</div>
34+
</div>
35+
<div class="item">
36+
<img src="~/images/banner3.svg" alt="Package Management" class="img-responsive" />
37+
<div class="carousel-caption" role="option">
38+
<p>
39+
Bring in libraries from NuGet, Bower, and npm, and automate tasks using Grunt or Gulp.
40+
<a class="btn btn-default" href="https://go.microsoft.com/fwlink/?LinkID=525029&clcid=0x409">
41+
Learn More
42+
</a>
43+
</p>
44+
</div>
45+
</div>
46+
<div class="item">
47+
<img src="~/images/banner4.svg" alt="Microsoft Azure" class="img-responsive" />
48+
<div class="carousel-caption" role="option">
49+
<p>
50+
Learn how Microsoft's Azure cloud platform allows you to build, deploy, and scale web apps.
51+
<a class="btn btn-default" href="https://go.microsoft.com/fwlink/?LinkID=525027&clcid=0x409">
52+
Learn More
53+
</a>
54+
</p>
55+
</div>
56+
</div>
57+
</div>
58+
<a class="left carousel-control" href="#myCarousel" role="button" data-slide="prev">
59+
<span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span>
60+
<span class="sr-only">Previous</span>
61+
</a>
62+
<a class="right carousel-control" href="#myCarousel" role="button" data-slide="next">
63+
<span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span>
64+
<span class="sr-only">Next</span>
65+
</a>
66+
</div>
67+
68+
<div class="row">
69+
<div class="col-md-3">
70+
<h2>Application uses</h2>
71+
<ul>
72+
<li>Sample pages using ASP.NET Core MVC</li>
73+
<li><a href="https://go.microsoft.com/fwlink/?LinkId=518004">Bower</a> for managing client-side libraries</li>
74+
<li>Theming using <a href="https://go.microsoft.com/fwlink/?LinkID=398939">Bootstrap</a></li>
75+
</ul>
76+
</div>
77+
<div class="col-md-3">
78+
<h2>How to</h2>
79+
<ul>
80+
<li><a href="https://go.microsoft.com/fwlink/?LinkID=398600">Add a Controller and View</a></li>
81+
<li><a href="https://go.microsoft.com/fwlink/?LinkId=699315">Manage User Secrets using Secret Manager.</a></li>
82+
<li><a href="https://go.microsoft.com/fwlink/?LinkId=699316">Use logging to log a message.</a></li>
83+
<li><a href="https://go.microsoft.com/fwlink/?LinkId=699317">Add packages using NuGet.</a></li>
84+
<li><a href="https://go.microsoft.com/fwlink/?LinkId=699318">Add client packages using Bower.</a></li>
85+
<li><a href="https://go.microsoft.com/fwlink/?LinkId=699319">Target development, staging or production environment.</a></li>
86+
</ul>
87+
</div>
88+
<div class="col-md-3">
89+
<h2>Overview</h2>
90+
<ul>
91+
<li><a href="https://go.microsoft.com/fwlink/?LinkId=518008">Conceptual overview of what is ASP.NET Core</a></li>
92+
<li><a href="https://go.microsoft.com/fwlink/?LinkId=699320">Fundamentals of ASP.NET Core such as Startup and middleware.</a></li>
93+
<li><a href="https://go.microsoft.com/fwlink/?LinkId=398602">Working with Data</a></li>
94+
<li><a href="https://go.microsoft.com/fwlink/?LinkId=398603">Security</a></li>
95+
<li><a href="https://go.microsoft.com/fwlink/?LinkID=699321">Client side development</a></li>
96+
<li><a href="https://go.microsoft.com/fwlink/?LinkID=699322">Develop on different platforms</a></li>
97+
<li><a href="https://go.microsoft.com/fwlink/?LinkID=699323">Read more on the documentation site</a></li>
98+
</ul>
99+
</div>
100+
<div class="col-md-3">
101+
<h2>Run &amp; Deploy</h2>
102+
<ul>
103+
<li><a href="https://go.microsoft.com/fwlink/?LinkID=517851">Run your app</a></li>
104+
<li><a href="https://go.microsoft.com/fwlink/?LinkID=517853">Run tools such as EF migrations and more</a></li>
105+
<li><a href="https://go.microsoft.com/fwlink/?LinkID=398609">Publish to Microsoft Azure Web Apps</a></li>
106+
</ul>
107+
</div>
108+
</div>
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
@model ErrorViewModel
2+
@{
3+
ViewData["Title"] = "Error";
4+
}
5+
6+
<h1 class="text-danger">Error.</h1>
7+
<h2 class="text-danger">An error occurred while processing your request.</h2>
8+
9+
@if (Model.ShowRequestId)
10+
{
11+
<p>
12+
<strong>Request ID:</strong> <code>@Model.RequestId</code>
13+
</p>
14+
}
15+
16+
<h3>Development Mode</h3>
17+
<p>
18+
Swapping to <strong>Development</strong> environment will display more detailed information about the error that occurred.
19+
</p>
20+
<p>
21+
<strong>Development environment should not be enabled in deployed applications</strong>, as it can result in sensitive information from exceptions being displayed to end users. For local debugging, development environment can be enabled by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>, and restarting the application.
22+
</p>

0 commit comments

Comments
 (0)