Internationalization and Localization in ASP.NET MVC

undefined
 
Internationalization
 
Andres Käver, IT Kolledž 2015
 
Internationalization
 
Globalization (G11N): The process of making an
application support different languages and regions.
Localization (L10N): The process of customizing an
application for a given language and region.
Internationalization (I18N): Describes both
globalization and localization.
Culture: It is a language and, optionally, a region.
Locale: A locale is the same as a culture.
Neutral culture: A culture that has a specified
language, but not a region. (e.g. "en", "es")
Specific culture: A culture that has a specified
language and region. (e.g. "en-US", "en-GB", "es-CL")
https://msdn.microsoft.com/en-
us/goglobal/bb896001.aspx
 
2
 
Example
 
3
int
 value = 5600;
Thread.CurrentThread.CurrentCulture = 
new
System.Globalization.CultureInfo(
"es-CL"
);
Console.WriteLine(DateTime.Now.ToShortDateString());
Console.WriteLine(value.ToString(
"c"
));
Thread.CurrentThread.CurrentCulture = 
new
System.Globalization.CultureInfo(
"es-MX"
);
Console.WriteLine(DateTime.Now.ToShortDateString());
Console.WriteLine(value.ToString(
"c"
));
// Output
26-07-2011 
// Date in es-CL, Spanish (Chile)
$5.600,00 
// Currency in es-CL, Spanish (Chile)
26/07/2011 
// Date in es-MX, Spanish (Mexico)
$5,600.00 
// Currency in es-MX, Spanish (Mexico)
 
Resources
 
Add new class library to solution, named
Resources
Add new item to project: Resources files
Default culture en-US
Resources.resx
Typically use only language part in
extension
Resources.et.resx (et-EE)
 
4
 
Resources
 
5
 
Resources
 
6
 
Validation/Laber/editor
messages
 
7
 [
Required
(ErrorMessageResourceName = 
"FirstNameRequired"
,
            ErrorMessageResourceType = 
typeof
(Resources.
Resources
))]
        [
MaxLength
(5, ErrorMessageResourceName = 
"FirstNameTooLong"
,
            ErrorMessageResourceType = 
typeof
(Resources.
Resources
))]
        [
MinLength
(2, ErrorMessageResourceName = 
"FirstNameTooShort"
,
            ErrorMessageResourceType = 
typeof
(Resources.
Resources
))]
        [
Display
(Name = 
"FirstName"
, ResourceType =
typeof
(Resources.
Resources
))]
        
public
 
String
 FirstName { 
get
; 
set
; }
 
Views catalog, web.config
 
8
 
Razor
 
Html helpers – from attributes
Static text in views
@Resources.<fieldname>
 
9
 
<
div
 
class
="form-group">
            
<
div
 
class
="col-md-offset-2 col-md-10">
                
<
input
 
type
="submit"
 
value
="
@
Resources.Create
"
class
="btn btn-default"
 
/>
            
</
div
>
        
</
div
>
 
Language determination
 
header field Accept-Language on every
request
Accept-Language: en-us,en;q=0.5
en-us – preffered
en – next choice
q=0.5 – estimate of users prefernce for
that language
 
10
 
System language
 
ASP.NET (System.Web) keeps track in each
thread:
Culture
determines the results of culture-dependent
functions, such as the date, number, and
currency formatting, and so on
UICulture
determines which resources are loaded for the
page
 
11
 
Language override
 
Implement controller/action for user
language choice selection – cookie
creation
Keep track of users choice (cookie,
session)
On every request, inspect users choice,
update threads culture info
Implement base controller for cookie
inspection
 
12
 
Base controller
 
13
public
 
class
 BaseController : Controller
{
    
protected
 
override
 IAsyncResult BeginExecuteCore(AsyncCallback callback, 
object
 state)
    {
        
string
 cultureName = 
null
;
        
// Attempt to read the culture cookie from Request
        HttpCookie cultureCookie = Request.Cookies[
"_culture"
];
        
if
 (cultureCookie != 
null
)
            cultureName = cultureCookie.Value;
        
else
            cultureName = Request.UserLanguages != 
null
 && Request.UserLanguages.Length > 0 ?
                    Request.UserLanguages[0] :  
// obtain it from HTTP header AcceptLanguages
                    
null
;
        
// Validate culture name
        cultureName = CultureHelper.GetImplementedCulture(cultureName);
        
// Modify current thread's cultures
        Thread.CurrentThread.CurrentCulture = 
new
 System.Globalization.CultureInfo(cultureName);
        Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
        
return
 
base
.BeginExecuteCore(callback, state);
    }
}
 
Controller action for language
choice
 
14
    
public
 ActionResult SetCulture(
string
 culture)
    {
        
// Validate input
        culture = CultureHelper.GetImplementedCulture(culture);
        
// Save culture in a cookie
        HttpCookie cookie = Request.Cookies[
"_culture"
];
        
if
 (cookie != 
null
)
            cookie.Value = culture;   
// update cookie value
        
else
        {
            cookie = 
new
 HttpCookie(
"_culture"
);
            cookie.Value = culture;
            cookie.Expires = DateTime.Now.AddYears(1);
        }
        Response.Cookies.Add(cookie);
        
return
 RedirectToAction(
"Index"
);
    }
Slide Note
Embed
Share

This content provides an overview of Internationalization (I18N), Globalization (G11N), and Localization (L10N) in ASP.NET MVC. It explains the processes involved in supporting different languages and regions, customizing applications, and the concepts of culture and locale.

  • Internationalization
  • Localization
  • ASP.NET MVC
  • Globalization
  • Culture

Uploaded on Oct 03, 2024 | 2 Views


Download Presentation

Please find below an Image/Link to download the presentation.

The content on the website is provided AS IS for your information and personal use only. It may not be sold, licensed, or shared on other websites without obtaining consent from the author. Download presentation by click this link. If you encounter any issues during the download, it is possible that the publisher has removed the file from their server.

E N D

Presentation Transcript


  1. Internationalization ASP.NET MVC ASP.NET MVC Andres K ver, IT Kolled 2015

  2. Internationalization Globalization (G11N): The process of making an application support different languages and regions. Localization (L10N): The process of customizing an application for a given language and region. Internationalization (I18N): Describes both globalization and localization. Culture: It is a language and, optionally, a region. Locale: A locale is the same as a culture. Neutral culture: A culture that has a specified language, but not a region. (e.g. "en", "es") Specific culture: A culture that has a specified language and region. (e.g. "en-US", "en-GB", "es-CL") https://msdn.microsoft.com/en- us/goglobal/bb896001.aspx 2

  3. Example int value = 5600; Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("es-CL"); Console.WriteLine(DateTime.Now.ToShortDateString()); Console.WriteLine(value.ToString("c")); Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("es-MX"); Console.WriteLine(DateTime.Now.ToShortDateString()); Console.WriteLine(value.ToString("c")); // Output 26-07-2011 // Date in es-CL, Spanish (Chile) $5.600,00 // Currency in es-CL, Spanish (Chile) 26/07/2011 // Date in es-MX, Spanish (Mexico) $5,600.00 // Currency in es-MX, Spanish (Mexico) 3

  4. Resources Add new class library to solution, named Resources Add new item to project: Resources files Default culture en-US Resources.resx Typically use only language part in extension Resources.et.resx (et-EE) 4

  5. Resources 5

  6. Resources 6

  7. Validation/Laber/editor messages [Required(ErrorMessageResourceName = "FirstNameRequired", ErrorMessageResourceType = typeof(Resources.Resources))] [MaxLength(5, ErrorMessageResourceName = "FirstNameTooLong", ErrorMessageResourceType = typeof(Resources.Resources))] [MinLength(2, ErrorMessageResourceName = "FirstNameTooShort", ErrorMessageResourceType = typeof(Resources.Resources))] [Display(Name = "FirstName", ResourceType = typeof(Resources.Resources))] public String FirstName { get; set; } 7

  8. Views catalog, web.config 8

  9. Razor Html helpers from attributes Static text in views @Resources.<fieldname> <div class="form-group"> <div class="col-md-offset-2 col-md-10"> <input type="submit" value="@Resources.Create" class="btn btn-default" /> </div> </div> 9

  10. Language determination header field Accept-Language on every request Accept-Language: en-us,en;q=0.5 en-us preffered en next choice q=0.5 estimate of users prefernce for that language 10

  11. System language ASP.NET (System.Web) keeps track in each thread: Culture determines the results of culture-dependent functions, such as the date, number, and currency formatting, and so on UICulture determines which resources are loaded for the page 11

  12. Language override Implement controller/action for user language choice selection cookie creation Keep track of users choice (cookie, session) On every request, inspect users choice, update threads culture info Implement base controller for cookie inspection 12

  13. Base controller publicclass BaseController : Controller { protectedoverride IAsyncResult BeginExecuteCore(AsyncCallback callback, object state) { string cultureName = null; // Attempt to read the culture cookie from Request HttpCookie cultureCookie = Request.Cookies["_culture"]; if (cultureCookie != null) cultureName = cultureCookie.Value; else cultureName = Request.UserLanguages != null && Request.UserLanguages.Length > 0 ? Request.UserLanguages[0] : // obtain it from HTTP header AcceptLanguages null; // Validate culture name cultureName = CultureHelper.GetImplementedCulture(cultureName); // Modify current thread's cultures Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(cultureName); Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture; returnbase.BeginExecuteCore(callback, state); } } 13

  14. Controller action for language choice public ActionResult SetCulture(string culture) { // Validate input culture = CultureHelper.GetImplementedCulture(culture); // Save culture in a cookie HttpCookie cookie = Request.Cookies["_culture"]; if (cookie != null) cookie.Value = culture; else { cookie = new HttpCookie("_culture"); cookie.Value = culture; cookie.Expires = DateTime.Now.AddYears(1); } Response.Cookies.Add(cookie); return RedirectToAction("Index"); } // update cookie value 14

More Related Content

giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#