internacionalização no JSF com entradas ResourceBundle que são carregadas do banco de dados

Estou trabalhando em um projeto Java EE6 usando JPA / EJB / JSF e estou tendo problemas para projetar suporte a vários idiomas para entidades. Existem três entidades relevantes:

Idioma (tem ID)
Competência (tem ID)
CompetenceName (possui referência de competência, referência de idioma e uma string)

Competence possui uma referência um a muitos ao CompetenceName implementada com um Mapa, contendo um objeto para cada Idioma em que existe um nome para uma Competência. Observe que as competências são criadasdinamicamente e seus nomes não podem, portanto, existir em um pacote configurável de recursos.

Ao listar as competências em uma página da web, quero que elas sejam exibidas com o idioma do usuário conectado no momento, isso é armazenado em um Bean gerenciado com escopo de sessão.

Existe alguma maneira de fazer isso sem interromper o bom design do MVC? Minha primeira idéia foi obter o bean com escopo de sessão diretamente de um método "getName" na entidade Competence via FacesContext e procurar no mapa de CompetenceNames o seguinte:

public class Competence
{
...
@MapKey(name="language")
@OneToMany(mappedBy="competence", cascade=CascadeType.ALL, orphanRemoval=true)
private Map<Language, CompetenceName> competenceNames;

public String getName(String controller){
    FacesContext context = FacesContext.getCurrentInstance();
    ELResolver resolver = context.getApplication().getELResolver();
    SessionController sc = (SessionController)resolver.getValue(context.getELContext(), null, "sessionController");
    Language language = sc.getLoggedInUser().getLanguage();
    if(competenceNames.get(language) != null)
        return competenceNames.get(language).getName();
    else
        return "resource missing";
}

Essa solução parece extremamente grosseira, já que a entidade depende da camada Controller e precisa buscar um controlador de sessão toda vez que eu quiser seu nome. Uma solução mais compatível com MVC seria usar um parâmetro Language, mas isso significa que todas as chamadas do JSF precisarão incluir o idioma buscado no bean gerenciado no escopo da sessão, o que também não parece uma boa solução.

Alguém tem alguma opinião ou padrões de design para esse problema?

questionAnswers(2)

yourAnswerToTheQuestion