Я нашел, что он отлично работает, используя display: block; на изображении и вертикально-выровнять: верх; на текст.
.imagebox {
width:200px;
float:left;
height:88px;
position:relative;
background-color: #999;
}
.container {
width:600px;
height:176px;
background-color: #666;
position:relative;
overflow:hidden;
}
.text {
color: #000;
font-size: 11px;
font-family: robotomeduim, sans-serif;
vertical-align:top;
}
.imagebox img{ display:block;}
Image title
Image title
Image title
Image title
Image title
Image title
или вы можете отредактировать код a JS FIDDLE
Я не уверен, на какой платформе вы интернационализация. Я уже писал ответ о том, как лучше всего проверить приложение. См. Что мне нужно знать для глобализации приложения asp.net?
Тем не менее, управлять самими переводами сложно. Проблема в том, что вы будете использовать один и тот же фрагмент текста на нескольких страницах. Однако ваша структура может не поддерживать только этот фрагмент текста в одном файле (например, файлы ресурсов в asp.net рекомендуют вам иметь один файл ресурсов для каждого языка).
Способ, который мы нашли для работы с Дело было в том, чтобы иметь центральную базу данных переводов. Мы создали небольшой. net приложение для импорта переводов из файлов ресурсов в эту базу данных и для экспорта переводов из этой базы данных в файлы ресурсов. Таким образом, существует дополнительный шаг в процессе сборки для создания файлов ресурсов.
Другая проблема, с которой вы столкнетесь, - это передача переводов вашему поставщику переводов и обратно. Для этого есть несколько способов - посмотрите, готов ли ваш поставщик переводов принимать XML-файлы и возвращать правильно отформатированные XML-файлы. Это действительно один из лучших способов, поскольку он позволяет автоматизировать импорт и экспорт файлов перевода. Другой альтернативой, если это позволяет ваш поставщик, является создание веб-сайта, позволяющего им редактировать переводы.
В конце концов, ваш ответ на переводы будет таким же для любого другого процесса, который требует повторения и ручной работы. Автоматизируйте, автоматизируйте, автоматизируйте. Автоматизируйте все, что вы можете. Копирование и вставка не ваш друг в этом сценарии.
При наличии используйте базу данных для этого. Каждая строка получает идентификатор, и существует или таблица для каждого языка или одна таблица для всех с языком в столбце (в зависимости от того, как к сайту получают доступ, производительность диктует, который лучше). Это позволяет обновления от переводчиков, не пытаясь управлять детали управления версиями и файлы кода. Далее, это почти тривиально для работы отчетов, что не переводится, и отслеживайте то, что было автопереводом (механизм) по сравнению с реальным человеческим переводом.
, Если никакая база данных, то я засовываю каждый язык в отдельный файл так проблемы управления версиями, не уменьшается. Но структура является в основном тем же - каждая строка имеет идентификатор.
-Adam
Мало того, что мы использовали базу данных вместо превознесенных файлов ресурсов (я никогда не понимал, почему люди используют что-то как этот, который является болью для управления, когда у нас есть такие хорошие инструменты для контакта с базами данных), но мы также избежали потребности отметить вещи в приложении (упущение отметить средства управления с числами в Формах VB6 всегда было проблемой) при помощи отражения для идентификации средств управления для перевода. Тогда мы используем XML-файл, который переводит средства управления в идентификаторы фразы от базы данных словаря.
, Хотя отображающимся файлом нужно было управлять, им можно было все еще управлять независимый от процесса сборки, и перевод приложения был на самом деле возможен конечными пользователями, которые имели права в базе данных.
Локализованные проекты я продолжил работать, имели 'строковые даты' замораживания. После этого времени единственный способ, которым струнам позволили поменяться, был с разрешением от очень старшего члена команды управления проектами.
Это не точно идеальное решение, но это действительно позволяло нам приостановить дефекты относительно строк до следующего выпуска с допустимой причиной. Как только строковое замораживание произошло, у Вас также есть допустимая причина отрицать добавлять совершенно новые опции к проекту на 'шпоре момента' решения. И прибытие разрешения от высокого означало, что менеджеры среднего звена не будут иметь никакого права изменять спецификации на Вашем:)
Решение, к которому мы подошли до сих пор, имеет небольшое приложение в Excel, который читает все файлы свойств и затем показывает матрицу со всеми переводами (языки как заголовки, ключи как строки). Довольно очевидно, что отсутствует тогда. Это, отправляют к переводчикам. Когда это возвращается, тогда лист может быть обработан для генерации тех же пакетов свойства назад снова. До сих пор это упростило боль несколько, но интересно, что еще вокруг.
Существует много главных проблем, которые нужно рассмотреть при интернационализации приложения.
public final class l7d {
...normal junk
/**
* Reference to the localized strings resource bundle.
*/
public static final ResourceBundle l7dBundle =
ResourceBundle.getBundle(BUNDLE_PATH);
//---- start l7d fields ----\
public static final String ERROR_AuthenticationException;
public static final String ERROR_cannot_find_algorithm;
public static final String ERROR_invalid_context;
...many more
//---- end l7d fields ----\
static {
//---- start setting l7d fields ----\
ERROR_AuthenticationException = l7dBundle.getString("ERROR_AuthenticationException");
ERROR_cannot_find_algorithm = l7dBundle.getString("ERROR_cannot_find_algorithm");
ERROR_invalid_context = l7dBundle.getString("ERROR_invalid_context");
...many more
//---- end setting l7d fields ----\
}
Подход выше предлагает несколько преимуществ.
Эта книга Google - управление файлом ресурсов дает некоторые хорошие советы
Можно использовать программное обеспечение Resource File Management для отслеживания строки, которые изменили и управляют рабочим процессом для переведения их - иначе Вы заканчиваете в путанице замораживаний и властного управления версиями
Некоторые инструменты, которые делают этот вид вещи - никакое соединение я, на самом деле не использовали их, просто исследовав
В Java интернационализация выполняется путем перемещения строк для выделения ресурсов на пакеты... процесс перевода является все еще долгим и трудным, но по крайней мере это разделяется от процесса создания программного обеспечения, выпуская пакеты обновления и т.д. Одна вещь, которая помогает, состоит в том, чтобы иметь систему CI, которая повторно упаковывает все, что любые изменения времени внесены. Нам можно было протестировать новую версию и в течение минут, является ли это изменением кода, новым пакетом языка или обоими.
Для начала, я использовал бы строки по умолчанию в случае, если перевод отсутствует. Например, английское или испанское значение. Во-вторых, Вы могли бы хотеть рассмотреть веб-приложение или что-то подобное, чтобы Ваши переводчики использовали. Это требует некоторых ресурсов заранее, но по крайней мере Вы не должны будете отправлять файлы вокруг, и это будет очевидно для переводчиков, какие строки являются новыми, и т.д.
Я вставил цель make-файла, которая находит все .properties файлы и помещает их в zip-файл для отсылки к переводчикам. Я предложил отправлять их просто diffs, но по некоторым причинам они хотят целый пакет файлов каждый раз. Я думаю, что у них есть своя собственная система для отслеживания просто различий, потому что они заряжают нас на основе того, сколько струн поменяло с одного времени к следующему. Когда я возвращаю их доставку, я вручную различный все их файлы с предыдущей доставкой, чтобы видеть, изменилось ли что-либо неожиданное - одно время весь PT_BR (португалец Brazillian) струны, поменявшие, и оказывается, что они использовали PT_PT (португальские португальцы) переводчик для того пакета несмотря на порядок на PT_BR.
Pootle - это веб-приложение, которое позволяет управлять процессом перевода через Интернет .