Я працюю над локалізацією програмного забезпечення Java тамої проекти мають як файли .properties, так і XML-ресурси. Наразі ми використовуємо коментарі, щоб доручити перекладачам не перекладати певні рядки, але проблема з коментарями полягає в тому, що вони не читаються машинно.
Єдине рішення, про яке я можу придумати - це префікс кожного ключа "не перекладати" чимось подібним _DNT_
і навчити наші засоби перекладу ігнорувати ці записи. Хтось там має кращу ідею?
Відповіді:
4 для відповіді № 1Чи можете ви розбити файли на такі, які будутьперекладені або не переведені, а потім надішліть лише той, що підлягає перекладу? (Не знайте структури так, щоб не знати, коли відповідати, чи це практично ...)
0 для відповіді № 2
JDT Eclipse також використовує коментарі для запобігання перекладу певних рядків:
Як написати плагіни Eclipse для міжнародного ринку
Я думаю, що ваш інструмент перекладу повинен працювати аналогічно?
0 для відповіді № 3
Найпростіше рішення - не розміщувати рядки "не перекладати" (DNT) у файли ресурсів.
.властивості файли не пропонують багато способів обробки метаданих, а оскільки вам не потрібні дані під час виконання, її наявність у .властивості файли будуть скоріше побічним ефектом, ніжщось бажане. Враховуйте також, часткові DNT, де у вас є щось, що неможливо перекласти, міститься в рядку, що перекладається (наприклад, фірмова назва або URI).
"IDENTIFIER english en en en" -> "french fr IDENTIFIER fr fr"
Наскільки мені відомо, подобаються навіть стандарти XLIFF не приймайте до уваги DNT, і вам доведеться керувати ними за допомогою спеціальних файлів метаданих, термінологічні файли та / або коментарі (такі як Примітка елемент у XLIFF).
0 для відповіді № 4
Як axelclk розмістив у своєму посиланні ... затемнення забезпечити
// $ NON-NLS-1 $
Заява про сповіщення проекту про те, що перший рядок у цьому рядку не повинен бути перекладений. Усі інші рядки ви можете знайти, зателефонувавши Джерело-> Екстерналізація рядків
Зовнішні рядки містять усі мови, які ви хочете підтримувати.
Файл, що включає переклади, схожі на: PluginPage.Error1 = text1 PluginPage.Error2 = text2
Клас, який читав переклад
private static final String BUNDLE_NAME = "com.plugin.name"; //$NON-NLS-1$
private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME);
private PluginMessages() {
}
public static String getString(String key) {
// TODO Auto-generated method stub
try {
return RESOURCE_BUNDLE.getString(key);
} catch (MissingResourceException e) {
return "!" + key + "!";
}
}
І ви можете назвати це так:
String msg = PluginMessages.getString("PluginPage.Error2"); //$NON-NLS-1$
EDIT:
Коли рядок екстерналізовано і ви хочете використовувативихідний рядок, ви можете видалити рядок зовнішньої зовнішності з усіх файлів властивостей, не маючи за замовчуванням. Коли пакет не може знайти файл повідомлення, який відповідає локальній мові, використовується типова умова.
Але це не працює під час виконання.
0 для відповіді № 5
Якщо ви все-таки вирішите використовувати коментарі "не перекладати" у своїх файлах властивостей, я рекомендую вам дотримуватися цього Конвенція про затемнення. Нічого особливого, але життя буде простішим, якщо всі ми використовуємо одну і ту ж магічну струну!
(Eclipse насправді не підтримує коментарів DO NOT NOT TRANSLATE, наскільки я знаю, але Теннера Ant-Gettext має реалізацію вищезазначеної схеми, яка використовується при перетворенні з пакетів ресурсів у файли Gettext PO.)