Both your inbound and outbound routing should be 'normalized' such that the + (the meta character for international calling (011 in NANP land 00 in most of the rest of the world)) is transparently transposed to both your individual carriers and the users in your locale. That way it always works.
Example
Carrier A accepts e164 , +13235551212 (LA) will work as will +442075551212 (London) - no problem
Carrier B only does NXXNXXNXXX for NANP , remove the +1
Carrier C accepts 1NXXNXXXXXX or NXXNXXXXXX , but not e164, remove the +
User Granny only dials NXXXXXX, prepend NPA to it
User Mum likes NXXNXXXXXX because that's what is used there , prepend 1 if necessary
User Dad has been to the big city so uses 1NXXNXXXXXX
So the normalized number is always
+(COUNTRYCODE)(AREACODE)(SUBSCRIBER)
Build outbound routes to suite your carriers , each might be differeent
Transpose Inbound calls , stripping + if necessary, adding 1 if NANP and that's what the user expects and stripping +1 if you live in the boonies.
The end result is the phone displays a locale specific and understandable CallerID(Num) to the user and she can call that number back. You will reverse engineer all the way back to e164 as necessary
The best place to start is in your inbound context, use something like the e164 one in extensions.conf reworked for your particular locale . 10 or 11 digits to suit in NANP land
Simklarly your outbound routes should accept both 10 and eleven digit dialing to make any out of towners happy.