// M-Files Server gRPC API 26.11. Generated from the M-Files Server IDL; do not edit.
// Documentation: https://developer.m-files.com/APIs/gRPC-API/
syntax = "proto3";

package MFiles;

import "mfiles/api/annotations.proto";
import "mfiles/structs.proto";

option csharp_namespace = "MFiles.Grpc";
option go_package = "github.com/M-Files/mfiles-grpc-api/go/mfiles;mfiles";
option java_multiple_files = true;
option java_package = "com.mfiles.grpc";
option objc_class_prefix = "MF_";

// Lists the vault's metadata languages and changes the calling user's vault language.
//
// Provides methods for read-only access to languages.
//
// A vault can have translations of its metadata structure (names of classes, properties, value
// list items and so on) in several languages. Each user account has a vault language; a new
// session starts in it, and the server returns translated names in the session's language.
//
// - [GetLanguages](mfiles:MFiles.IRPCLanguages.GetLanguages) lists the languages. ID 0 is the
//   default language of the vault, which every vault has.
// - [ChangeLanguage](mfiles:MFiles.IRPCLanguages.ChangeLanguage) stores another language for the
//   calling user and applies it to the current session immediately.
//
// The vault language is separate from `ClientData.language` given at login. After a language
// change, names that you cached from earlier responses are in the old language; read them again.
service IRPCLanguages {
	option (mfiles.api.service) = { book: "vault" level: LEVEL_STANDARD title: "Languages" };

	// Gets the metadata languages defined in the vault.
	//
	// - Requires a vault session. No special vault rights are needed.
	// - Always contains the default language, ID 0. A [Language](mfiles:MFiles.Language) with ID 0 has
	//   an empty `language_code`.
	// - Language names are in the session's vault language.
	rpc GetLanguages( GetLanguagesRequest ) returns ( GetLanguagesResponse ) {
		option idempotency_level = IDEMPOTENT;
		option (mfiles.api.method) = { session: SESSION_REQUIREMENT_SESSION returns_metadata_structure_version: true };
	}

	// Changes the vault language of the calling user, for this session and later sessions.
	//
	// - Requires a vault session. No special vault rights are needed. Anonymous sessions cannot
	//   change the language ("Access denied.").
	// - The language is stored in the user's account, so the user's later sessions start in it. The
	//   current session switches immediately: later calls return names in the new
	//   language.
	// - A language ID that does not exist fails with "Not found.".
	// - Setting the language that the user already has succeeds and changes nothing.
	rpc ChangeLanguage( ChangeLanguageRequest ) returns ( ChangeLanguageResponse ) {
		option idempotency_level = IDEMPOTENT;
		option (mfiles.api.method) = { session: SESSION_REQUIREMENT_SESSION returns_metadata_structure_version: true };
	}
}

// The request of GetLanguages.
message GetLanguagesRequest {
}

// The response of GetLanguages.
message GetLanguagesResponse {

	// The languages of the vault. Use the `id` with [ChangeLanguage](mfiles:MFiles.IRPCLanguages.ChangeLanguage).
	repeated Language values = 1;
}

// The request of ChangeLanguage.
message ChangeLanguageRequest {

	// The ID of the new language, from [GetLanguages](mfiles:MFiles.IRPCLanguages.GetLanguages). 0 is the vault's default language.
	int32 language = 1;
}

// The response of ChangeLanguage.
message ChangeLanguageResponse {
}
