1*cc02d7e2SAndroid Build Coastguard WorkergRPC Internationalization 2*cc02d7e2SAndroid Build Coastguard Worker========================= 3*cc02d7e2SAndroid Build Coastguard Worker 4*cc02d7e2SAndroid Build Coastguard WorkerAs a universal RPC framework, gRPC needs to be fully usable within/across different international environments. 5*cc02d7e2SAndroid Build Coastguard WorkerThis document describes gRPC API and behavior specifics when used in a non-english environment. 6*cc02d7e2SAndroid Build Coastguard Worker 7*cc02d7e2SAndroid Build Coastguard Worker## API Concepts 8*cc02d7e2SAndroid Build Coastguard Worker 9*cc02d7e2SAndroid Build Coastguard WorkerWhile some API elements need to be able to represent non-english content, some are intentionally left as ASCII-only 10*cc02d7e2SAndroid Build Coastguard Workerfor simplicity & performance reasons. 11*cc02d7e2SAndroid Build Coastguard Worker 12*cc02d7e2SAndroid Build Coastguard Worker### Method name (in RPC Invocation) 13*cc02d7e2SAndroid Build Coastguard WorkerMethod names are ASCII-only and may only contain characters allowed by HTTP/2 text header values. That should not 14*cc02d7e2SAndroid Build Coastguard Workerbe very limiting as most gRPC services will use protobuf which only allows method names from an even more restricted ASCII subset. 15*cc02d7e2SAndroid Build Coastguard WorkerAlso, handling method names is a very hot code path so any additional encoding/decoding step is to be avoided. 16*cc02d7e2SAndroid Build Coastguard Worker 17*cc02d7e2SAndroid Build Coastguard WorkerRecommended representation in language-specific APIs: string type. 18*cc02d7e2SAndroid Build Coastguard Worker 19*cc02d7e2SAndroid Build Coastguard Worker### Host name (in RPC Invocation) 20*cc02d7e2SAndroid Build Coastguard WorkerHost names are punycode encoded, but the user is responsible for providing the punycode-encoded string if she wishes to use an internationalized host name. 21*cc02d7e2SAndroid Build Coastguard Worker 22*cc02d7e2SAndroid Build Coastguard WorkerRecommended representation in language-specific APIs: string/unicode string. 23*cc02d7e2SAndroid Build Coastguard Worker 24*cc02d7e2SAndroid Build Coastguard WorkerNOTE: overriding host name when invoking RPCs is only supported by C-core based gRPC implementations. 25*cc02d7e2SAndroid Build Coastguard Worker 26*cc02d7e2SAndroid Build Coastguard Worker### Status detail/message (accompanies RPC status code) 27*cc02d7e2SAndroid Build Coastguard Worker 28*cc02d7e2SAndroid Build Coastguard WorkerStatus messages are expected to contain national-alphabet characters. 29*cc02d7e2SAndroid Build Coastguard WorkerAllowed values are unicode strings (content will be percent-encoded on the wire). 30*cc02d7e2SAndroid Build Coastguard Worker 31*cc02d7e2SAndroid Build Coastguard WorkerRecommended representation in language-specific APIs: unicode string. 32*cc02d7e2SAndroid Build Coastguard Worker 33*cc02d7e2SAndroid Build Coastguard Worker### Metadata key 34*cc02d7e2SAndroid Build Coastguard WorkerAllowed values are defined by HTTP/2 standard (metadata keys are represented as HTTP/2 header/trailer names). 35*cc02d7e2SAndroid Build Coastguard Worker 36*cc02d7e2SAndroid Build Coastguard WorkerRecommended representation in language-specific APIs: string. 37*cc02d7e2SAndroid Build Coastguard Worker 38*cc02d7e2SAndroid Build Coastguard Worker### Metadata value (text-valued metadata) 39*cc02d7e2SAndroid Build Coastguard WorkerAllowed values are defined by HTTP/2 standard (metadata values are represented as HTTP/2 header/trailer text values). 40*cc02d7e2SAndroid Build Coastguard Worker 41*cc02d7e2SAndroid Build Coastguard WorkerRecommended representation in language-specific APIs: string. 42*cc02d7e2SAndroid Build Coastguard Worker 43*cc02d7e2SAndroid Build Coastguard Worker### Channel target (in channel creation) 44*cc02d7e2SAndroid Build Coastguard Worker 45*cc02d7e2SAndroid Build Coastguard WorkerTBD 46