Eu entendo a sua descrição e seu ponto. Agora temos que descobrir como ele supor para trabalhar tecnicamente.
Um problema que vejo aqui é como vamos reconhecer que já temos limites disponíveis após aqueles onde chegou antes.
Podemos simplesmente sempre pedir fornecedor preferido e vá para a próxima. Isso vai custar desempenho - porque para cada solicitação de página que requer tradução, fizemos uma chamada sem êxito ao provedor preferencial, então para o próximo um (por isso pode ser várias chamadas sem êxito quando vBET oferecerá suporte a mais APIs).
Outra solução seria para armazenar informações que o provedor preferencial não estiver disponível e ir diretamente para uma próxima. Isso seria muito mais rápido, porque a verificação variável local é muito mais rápido do que esperar a resposta de um servidor externo. Desta vez temos outro problema - não sabemos quando o provedor preferencial está disponível. É claro que podemos fez algumas tarefa agendada que solicitar a tradução (short) simples, por exemplo, uma vez por hora / dia para verificá-lo. Assim, nesta estratégia, temos de decidir quantas vezes por padrão tal tarefa supor para trabalhar. É claro que iria verificar-lo somente quando algum provedor estiver marcado como não disponível.
Além disso, se marcamos provedores como indisponível - o que fazer quando sabemos que todos os provedores não estão disponíveis - adicionar algumas informações para o usuário final ou apenas traduzir o que está no cache eo resto como original, sem qualquer informação adicional sobre a falta temporária de prestadores de tradução .
Não importa que forma isso será feito, Google vai ser tratado como uma API (v1 ou v2, dependendo da configuração) - não faz sentido dividi-la, porque o Google v1 será fechado muito em breve.
Outra coisa é permitir que configurar a fila de provedores para cada par de línguas separadamente. Neste momento vBET já permite configurar o provedor de tradução para cada par de línguas. Eu acho que nós pode alterá-lo de um valor para valores separados por vírgula (CSV). Assim saberemos para cada par de línguas quais provedores de apoiar esta tradução e quais são as preferências de ordem (ordem justa na lista de CSV).
ATENÇÃO: isso vai ter algum impacto no desempenho de qualquer maneira. Em vez de criar um objeto para a tradução teremos que criar array de objetos tais e objeto envolvimento adicional (para torná-lo transparente para outras partes do código e bugs menos propenso). É claro que não vai criar objetos para os fornecedores que sabemos não estão disponíveis neste momento.
Solução para isso seria para reconfigurar para melhor desempenho e remover provedores de fila - assim como é agora - um fornecedor por par de idiomas.
Isto não deve ser caro para o desempenho, mas ainda alguma lógica adicional e consumo de memória.
Por favor, diga qual é a solução preferida.