O manual oficial de tradução pode ser acessado aqui: http://codex.wordpress.org/I18n_for_WordPress_Developers
Se o plugin não está internacionalizado, é muito provável que ele ainda não tenha um domínio cadastrado. Os plugins devem possuir um domínio no WordPress, que normalmente é o nome do plugin. Será necessário então alterar todas as chamadas da função echo no PHP, que pode ter vários formatos. Ex.:
echo "teste"
_e("Teste")
__("Teste")
Cada uma delas tem um função, e não é o objetivo desse tutorial explicá-las. Veja no link do codex a explicação. Para não ter que alterar manualmente os arquivos, criei uma expressão regular que adiciona o domínio ao arquivo dentro do editor VI.
Abra o arquivo .php que deseja alterar e digite o comando abaixo:
:%s/_e(\"\([^)]*\)\")/_e(\"\1\", "meuplugin")/gc
Esse comando vai substituir todas as chamadas _e(“Teste”) pela string com domínio: _e(“Teste”, “meuplugin”).
Agora precisamos extrair as mensagens dos arquivos. Vá para o diretório do plugin e execute o gettext para extrair as strings:
cd wp-content/plugins/meuplugin
xgettext -p languages/ -L PHP -a arquivo.php arquivo2.php
Esse arquivo é um .pot vazio. Vamos criar os outros dois necessários para a tradução:
mv languages/message.po languages/meuplugin.pot
cp languages/meuplugin.pot languages/meuplugin-pt_BR.po
Edite o arquivo .po traduzindo as strings para o seu idioma. Depois compile no gettext:
msgfmt -o languages/meuplugin-pt_BR.mo meuplugin-pt_BR.po
Finalmente, é necessário carregar o domínio de tradução no plugin. Adicione a linha abaixo no começo do arquivo .php que carrega o plugin. Normalmente o nome do arquivo é meuplugin.php
// Add i18n
load_plugin_textdomain('meuplugin', false, basename( dirname( __FILE__ ) ) . '/languages');
Pronto. sua tradução deve estar funcionado