самый простой способ,
использовать комплект (). разница (комплект ())
list_a = [1,2,3]
list_b = [2,3]
print set(list_a).difference(set(list_b))
ответ есть set([1])
можно напечатать как список,
print list(set(list_a).difference(set(list_b)))
В случае базового веб-приложения JSP / Servlet основной подход будет использовать JSTL fmt
taglib в сочетании с ресурсными пучками , Пакеты ресурсов содержат пары «ключ-значение», где ключ является константой, которая одинакова для всех языков, и значение отличается на каждый язык. Пакеты ресурсов обычно представляют собой файлы свойств , которые загружаются API ResourceBundle
. Однако это можно настроить так, чтобы вы могли загружать пары ключ-значение из базы данных.
Вот пример того, как интернационализировать форму входа в систему вашего веб-приложения с помощью пакетов ресурсов на основе файлов.
com.example.i18n
(в случае Maven, поместите их в структуру пакета внутри src/main/resources
). text.properties
(содержит пары ключ-значение на языке по умолчанию, обычно на английском языке) login.label.username = Username login.label.password = Password login.button.submit = Sign in
text_nl.properties
(содержит пары ключ-значение из голландской (nl
) login.label.username = Gebruikersnaam login.label.password = Wachtwoord login.button.submit = Inloggen
text_es.properties
(содержит испанский (es
) пары ключ-значение) login.label.username = Nombre de usuario login.label.password = Contraseña login.button.submit = AccederИмя файла ресурса должно соответствовать следующему шаблону
name_ll_CC.properties
. Часть _ll
должна быть нижним регистром ISO 693-1 . Это необязательно и требуется только, когда присутствует _CC
. Часть _CC
должна быть в верхнем регистре ISO 3166-1 Alpha-2 код страны. Это необязательно и часто используется для различения языковых диалектов, характерных для конкретной страны, например Американский английский (_en_US
) и Британский английский (_en_GB
). web.xml
объявлен соответствующим спецификации Servlet 2.5, тогда просто поставьте jstl-1.2.jar в webapp /WEB-INF/lib
. login.jsp
<%@ page pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<c:set var="language" value="${not empty param.language ? param.language : not empty language ? language : pageContext.request.locale}" scope="session" />
<fmt:setLocale value="${language}" />
<fmt:setBundle basename="com.example.i18n.text" />
<!DOCTYPE html>
<html lang="${language}">
<head>
<title>JSP/JSTL i18n demo</title>
</head>
<body>
<form>
<select id="language" name="language" onchange="submit()">
<option value="en" ${language == 'en' ? 'selected' : ''}>English</option>
<option value="nl" ${language == 'nl' ? 'selected' : ''}>Nederlands</option>
<option value="es" ${language == 'es' ? 'selected' : ''}>Español</option>
</select>
</form>
<form method="post">
<label for="username"><fmt:message key="login.label.username" />:</label>
<input type="text" id="username" name="username">
<br>
<label for="password"><fmt:message key="login.label.password" />:</label>
<input type="password" id="password" name="password">
<br>
<fmt:message key="login.button.submit" var="buttonValue" />
<input type="submit" name="submit" value="${buttonValue}">
</form>
</body>
</html>
Управляет текущим языком <c:set var="language">
. Если язык был предоставлен как параметр запроса (по выпадающему языку), он будет установлен. Иначе, если язык уже был предварительно установлен в сеансе, тогда придерживайтесь его. Else использует локализованный пользователем язык в заголовке запроса. <fmt:setLocale>
устанавливает языковой стандарт для набора ресурсов. Важно, чтобы эта строка была до <fmt:setBundle>
. <fmt:setBundle>
инициализирует пакет ресурсов по его базовому имени (то есть полное имя пакета до тех пор, пока его имя не будет указано без спецификатора _ll_CC
). <fmt:message>
извлекает значение сообщения указанным ключом пакета. <html lang="${language}">
сообщает поисковым роботам, на каком языке находится страница, чтобы он не был помечен как дублирующийся контент (таким образом, это полезно для SEO). Выпадающий язык сразу же будет отправлен JavaScript, когда будет выбран другой язык, и страница будет обновлена с помощью выбранного языка. Однако вам нужно иметь в виду, что файлы свойств по умолчанию читать с использованием кодировки ISO-8859-1. Вам нужно будет избежать их путем unicode-экранов. Это можно сделать с помощью инструмента native2ascii.exe
, поставляемого JDK. Дополнительную информацию см. Также в разделе в этой статье .
Теоретической альтернативой было бы предоставление пакета с пользовательским Control
для загрузки этих файлов в виде UTF-8, но это, к сожалению, не поддерживается базовым JSTL fmt
TagLib. Вам нужно будет управлять всем этим с помощью Filter
. Существуют рамки (MVC), которые могут обрабатывать это более прозрачным образом, например JSF, см. Также в этой статье .
В дополнение к тому, что сказал BalusC, вам нужно позаботиться о направленности (поскольку английский язык написан слева направо, а арабский - наоборот). Самый простой способ - добавить атрибут dir
к элементу html
вашей веб-страницы JSP и выполнить его экстернализацию, поэтому значение происходит из файла свойств (как и с другими элементами или атрибутами):
<html dir="${direction}">
...
</html>
Кроме того, есть несколько проблем с дизайном такого приложения - вы должны сказать, что наименее избегать абсолютного позиционирования. Если вы не можете избежать этого по какой-либо причине, вы можете использовать разные таблицы стилей на каждый (каждый?) Язык или сделать что-то, что verboten , то есть использовать таблицы для управления макетом. Если вы хотите использовать элементы div, я бы предложил использовать относительное позиционирование с «симметричными» атрибутами стиля слева и справа (оба имеют одинаковое значение), так как это то, что делает работу направленности направленности.
Вы можно найти больше о сайтах Bi-Directional здесь .
<html dir="RTL">
ИЛИ <html dir="LTR">
. По умолчанию <html dir="LTR">
– Fahim Parkar
15 October 2012 в 09:16
на основе этого учебника , я использую следующее в GAE - Google App Engine:
. Файл jsp выглядит следующим образом:
<%@ page import="java.io.* %>
<%
String lang = "fr"; //Assign the correct language either by page or user-selected or browser language etc.
ResourceBundle RB = ResourceBundle.getBundle("app", new Locale(lang));
%>
<!DOCTYPE html>
<%@ page contentType="text/html;charset=UTF-8" language="java"%>
<head>
</head>
<body>
<p>
<%= RB.getString("greeting") %>
</p>
</body>
И добавление файлов с именами: app.properties
(по умолчанию) и app_fr.properties
(и так далее для каждого языка). Каждый из этих файлов должен содержать необходимые вам строки: key: value_in_language, например. app_fr.properties
содержит:
greeting=Bonjour!
app.properties
содержит:
greeting=Hello!
Это все