Dica: Definindo um nome personalizado para as tabelas i18n do Doctrine

Pesquisando na documentação do Doctrine e em blogs *around the web* a resposta não encontra-se tão facilmente, então deixo aqui a dica para quem pretende utilizar a internacionalização do banco de dados com o symfony e o behaviour i18n do Doctrine e precisa personalizar o nome das classes para as tabelas i18n 😉

A palavra mágica é tableName. Ela é uma opção do behaviour i18n para definir o nome da classe personalizado, em seu schema do banco:


BlogPost:
  actAs:
    I18n:
      tableName: custom_table_name_translation
      fields: [title]
  columns:
    title: string(255)

A solução está em uma thread no grupo do Doctrine que faz referência ao ticket 1000, onde encontra-se a resposta.

Na documentação do Doctrine sobre o behaviour i18n, onde temos a lista de opções disponíveis para o behaviour, encontramos a opção className (%CLASS%Translation) com a qual podemos definir o nome padrão para utilizar nas classes geradas, porém, esta opção não funcionará se você deseja utilizar um nome para sua tabela que não contenha a palavra Translation no final, como por exemplo, na situação em que você está trabalhando com um sistema legado, e o nome das suas tabelas mais a palavra “Translation”, ultrapassarem o limite do tamanho do banco de dados para tabelas, como no caso do Oracle, por exemplo, que é de 30 caracteres (para todos os seus identificadores).