+
означает «1 или одно вхождение».
{3}
означает «3 вхождения».
{3,}
означает «3 или более вхождений».
+
также может быть записана как {1,}
.
*
также может быть записана как {0,}
.
Хранение на уровне БД - это нормально. Единственная альтернатива - хранить его в том же месте, что и переводы. Если они основаны на файлах, будет слишком дорого открывать/загружать каждый файл, чтобы собрать все доступные языки.
Остался позади ваш вопрос, как получить переводы: ни один инструмент не приходит на ум. Как вы на самом деле делаете "нормальные" переводы? Используете переводчика-человека? Пусть он/она сделает работу по переводу названия языка и сам вставит его в БД. Как вариант, разбирайте this или this.
Многие фреймворки позволяют выполнять конфигурацию i18n через файлы свойств. У вас будет файл свойств для каждого поддерживаемого языка. Все файлы свойств будут иметь одинаковые ключи, но разные значения, и вы должны использовать ключи на уровне представления. Вам нужно будет посмотреть документацию по любым технологиям, которые вы используете ...
edit - вот ссылка, которую я нашел для struts ... http://www.allapplabs.com/struts/struts_internationalization .htm