xref: /aosp_15_r20/external/grpc-grpc/doc/internationalization.md (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
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