I can propose a procedure for XeTeX; there is some that can be done also for pdfTeX, but it needs some time.
Find in your TeX distribution the file called hylang.tex and copy it into a working directory. Modify it to be
%%% This is hylang.tex (version 1.0), where language definitions
%%% actually occur. The first one should always be
%%% American English, for compatibility with plain TeX.
%%%
%%% Users can modify this file in order to define the
%%% languages they need.
%%%
%%% Every language definition should be followed by a
%%% \refinelanguage command where conventions specific to
%%% the language are set; users should at least provide
%%% the left and right hyphenation minima using
%%% \hyphenmins{<left>}{<right>}
%%%
%%% In the third argument one puts what has to be done
%%% when activating the language; in the fourth argument
%%% what needs to be undone.
\input unicode-letters
%%% US English must always come first
\definebaselanguage{en}{US}{hyphen} %%% <--- don't modify
\refinelanguage{en}{US}{\hyphenmins{2}{3}}{}
%%% Portuguese
\definelanguage{pt}{PT}{loadhyph-pt}
\refinelanguage{pt}{PT}{\hyphenmins{2}{3}}{}
\definedialect{pt}{BR}{pt}{PT}
\refinedialect{pt}{BR}{\hyphenmins{2}{3}}{}
%%% Add other languages if needed
%%%
%%% The arguments to \definelanguage are:
%%% #1: the language code; it is an arbitrary string, use the
%%% ISO two-letter language code for uniformity, or `nde' for
%%% new orthography German
%%% #2: the nation code; use the uppercase ISO two-letter code
%%% #3: the file with hyphenation patterns
%%%
%%% The arguments to \refinelanguage and \refinedialect are:
%%% #1 and #2: a pair defined through \definelanguage or \definedialect
%%% #3: commands to be executed when entering the language
%%% #4: commands to be undone when entering a new language
%%%
% \definelanguage{xx}{YY}{xxhyph}
% \refinelanguage{xx}{YY}{<something>}{<something>}
%
% \definedialect{aa}{BB}{xx}{XX}
% \refinedialect{aa}{BB}{<something>}{<something>}
% At last the fallback, a language with no patterns
\definelanguage{zz}{ZZ}{zerohyph}
% \refinelanguage{zz}{ZZ}{}{} % no need to set conventions
%%% Aliases
\addalias\US{en}{US}
\addalias\PT{pt}{PT}
\addalias\BR{pt}{BR}
\addalias\ZZ{zz}{ZZ}
\addalias\nohyphens{zz}{ZZ}
\endinput
Now call the initialization program
xetex -ini '*hyplain'
This will create a new format file hyplain.fmt and you can test it by running
xetex '&hyplain test'
where test.tex is
\font\standard="TeX Gyre Termes/mapping=tex-text"
\standard
\parindent=0pt
\selectlanguage{pt}{PT}
\hsize=2pt
\hskip0pt
Tabelas de Hifenação
\hskip0pt
Lisboa possui inúmeras atracções turísticas. A baixa pombalina, Belém,
Chiado ou Bairro Alto, são zonas onde afluem milhares de turistas e
visitantes anualmente. Duas agências europeias têm sede em Lisboa: o
Observatório Europeu da Droga e da Toxicodependência e a Agência
Europeia de Segurança Marítima, ambas com projectos de novas sedes à
beira rio. A Comunidade dos Países de Língua Portuguesa encontra-se
igualmente sediada em Lisboa.
\bye
The format file can be moved in a suitable directory, consult the manual for your distribution in order to see where and how.
Caveat: I wrote the "hyplain" system.