📜  Servlet – 国际化 (I18N)

📅  最后修改于: 2022-05-13 01:54:58.730000             🧑  作者: Mango

Servlet – 国际化 (I18N)

国际化 (I18N) 是设计 Web 应用程序的过程,它可以自动为各种国家、各种语言和各种货币提供支持,而无需对应用程序进行任何更改,称为国际化 (I18N)。它被称为 I18N,因为在 I 和 N 之间;有18个字符;这就是 I18N 的原因。如果您正在开发应用程序并希望根据特定区域或语言显示消息、货币、日期、时间等,则国际化是Java的强大概念之一。让我们先讨论一些有助于理解这些概念的主题,而不是深入探讨这个概念:

  • 国际化(I18N):它的任务是创建一个足够灵活以在任何环境中工作的系统。
  • 本地化 (I10N):它是安排程序在特定语言环境中运行的过程。
  • 区域设置:它代表选定的地理、政治或文化区域。语言环境的字符串表示形式由语言和国家/地区的国际标准两字符缩写和一个可选变体组成,由下划线 (_)字符分隔。

启动语言环境

  • Web 应用程序要么使用getLocale()方法从请求中检索区域设置,要么允许用户显式选择区域设置以获取给定用户的正确字符串。
  • 需要区域设置来执行其任务的操作被命名为区域设置敏感的,它使用区域设置来为用户定制信息。
  • 一旦您构造了一个 Locale,就不会执行有效性检查,因为 Locale 对象只是一个邻域的标识符。

使用的方法

  1. getCountry():它以 ISO3166 2 字母格式返回此语言环境的大写国家/地区代码。
  2. getDisplayCountry():它返回适合显示给用户的区域设置国家/地区的名称。
  3. getLanguage():它以 ISO 639 格式返回此区域设置的小写语言代码。
  4. getDisplayLanguage():它返回适合显示给用户的区域设置语言的名称。
  5. getISO3Country():它返回此语言环境所在国家/地区的三字母缩写。
  6. getISO3Language():它返回此区域设置语言的三字母缩写。

例子

此示例显示如何显示请求的语言和关联国家/地区

Java
import java.io.*;
import java.util.Locale;
import javax.servlet.*;
import javax.servlet.http.*;
  
public class GetLocale extends HttpServlet {
  
    public void doGet(HttpServletRequest request,
                      HttpServletResponse response)
        throws ServletException, IOException
    {
  
        // Get the client's Locale
        Locale locale = request.getLocale();
        String language = locale.getLanguage();
        String country = locale.getCountry();
  
        // Set response content type
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        String title = "Detecting Locale";
  
        String docType =
  
            "\n";
  
        out.println(docType +
  
                        "\n"
                        +
  
                        "" + title
                        + "\n"
                        +
  
                        "\n"
                        +
  
                        "

" + language                         + "

\n"                         +                            "

" + country                         + "

\n"                         +                            "                        < / html > "            );     } }


Java
import java.io.*;
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;
import javax.servlet.*;
import javax.servlet.http.*;
  
public class DateLocale extends HttpServlet {
  
    public void doGet(HttpServletRequest request,
                      HttpServletResponse response)
  
        throws ServletException, IOException
    {
  
        // Set response content type
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        
        // Get the client's Locale
        Locale locale = request.getLocale();
        String date = DateFormat
                          .getDateTimeInstance(
                              DateFormat.FULL,
                              DateFormat.SHORT, locale)
                          .format(new Date());
  
        String title = "Locale Specific Dates";
        String docType =
  
            "\n";
  
        out.println(docType +
  
                        "\n"
                        +
  
                        "" + title
                        + "\n"
                        +
  
                        "\n"
                        +
  
                        "

" + date                         + "

\n"                         +                            "                        < / html > "            );     } }


语言设定

  • servlet 输出以西欧语言编写的页面,例如英语、西班牙语、德语、法语、意大利语、荷兰语、挪威语、芬兰语或瑞典语。注意特殊字符“ñ”和“¡”的使用。像这样的字符虽然在英语中很少见,但在西欧语言中却很普遍。 Servlet 有两种方法来获取这些字符:使用 HTML字符实体或 Unicode 转义序列。
  • 将 HTML 页面中的特定字符序列显示为单个字符的能力。这些序列称为字符实体,以与号 (&) 开头,以分号 (;) 结尾。字符实体可以被命名或编号。
  • Unicode 全球转义序列是一种字符编码系统,旨在支持现代世界各种语言的书面文本的交换、处理和显示。此外,它还支持多种书面语言的经典和历史文本。

地区特定日期

您可以使用Java.text.DateFormat 类及其静态 getDateTimeInstance() 方法来格式化特定于语言环境的日期和时间。以下是显示如何格式化特定于给定语言环境的日期的示例 -

Java

import java.io.*;
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;
import javax.servlet.*;
import javax.servlet.http.*;
  
public class DateLocale extends HttpServlet {
  
    public void doGet(HttpServletRequest request,
                      HttpServletResponse response)
  
        throws ServletException, IOException
    {
  
        // Set response content type
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        
        // Get the client's Locale
        Locale locale = request.getLocale();
        String date = DateFormat
                          .getDateTimeInstance(
                              DateFormat.FULL,
                              DateFormat.SHORT, locale)
                          .format(new Date());
  
        String title = "Locale Specific Dates";
        String docType =
  
            "\n";
  
        out.println(docType +
  
                        "\n"
                        +
  
                        "" + title
                        + "\n"
                        +
  
                        "\n"
                        +
  
                        "

" + date                         + "

\n"                         +                            "                        < / html > "            );     } }