+ (if current-language-environment
+ (let ((func (get-language-info current-language-environment
+ 'exit-function)))
+ (run-hooks 'exit-language-environment-hook)
+ (if (fboundp func) (funcall func))))
+ (let ((default-eol-type (coding-system-eol-type
+ default-buffer-file-coding-system)))
+ (reset-language-environment)
+
+ (setq current-language-environment language-name)
+ (set-language-environment-coding-systems language-name default-eol-type))
+ (let ((input-method (get-language-info language-name 'input-method)))
+ (when input-method
+ (setq default-input-method input-method)
+ (if input-method-history
+ (setq input-method-history
+ (cons input-method
+ (delete input-method input-method-history))))))
+ ;; (let ((nonascii (get-language-info language-name 'nonascii-translation))
+ ;; (dos-table
+ ;; (if (eq window-system 'pc)
+ ;; (intern
+ ;; (concat "cp" dos-codepage "-nonascii-translation-table")))))
+ ;; (cond
+ ;; ((char-table-p nonascii)
+ ;; (setq nonascii-translation-table nonascii))
+ ;; ((and (eq window-system 'pc) (boundp dos-table))
+ ;; ;; DOS terminals' default is to use a special non-ASCII translation
+ ;; ;; table as appropriate for the installed codepage.
+ ;; (setq nonascii-translation-table (symbol-value dos-table)))
+ ;; ((charsetp nonascii)
+ ;; (setq nonascii-insert-offset (- (make-char nonascii) 128)))))
+
+ ;; (setq charset-origin-alist
+ ;; (get-language-info language-name 'charset-origin-alist))
+
+ ;; Unibyte setups if necessary.
+ ;; (unless default-enable-multibyte-characters
+ ;; ;; Syntax and case table.
+ ;; (let ((syntax (get-language-info language-name 'unibyte-syntax)))
+ ;; (if syntax
+ ;; (let ((set-case-syntax-set-multibyte nil))
+ ;; (load syntax nil t))
+ ;; ;; No information for syntax and case. Reset to the defaults.
+ ;; (let ((syntax-table (standard-syntax-table))
+ ;; (case-table (standard-case-table))
+ ;; (ch (if (eq window-system 'pc) 128 160)))
+ ;; (while (< ch 256)
+ ;; (modify-syntax-entry ch " " syntax-table)
+ ;; (aset case-table ch ch)
+ ;; (setq ch (1+ ch)))
+ ;; (set-char-table-extra-slot case-table 0 nil)
+ ;; (set-char-table-extra-slot case-table 1 nil)
+ ;; (set-char-table-extra-slot case-table 2 nil))
+ ;; (set-standard-case-table (standard-case-table))
+ ;; (let ((list (buffer-list)))
+ ;; (while list
+ ;; (with-current-buffer (car list)
+ ;; (set-case-table (standard-case-table)))
+ ;; (setq list (cdr list))))))
+ ;; ;; Display table and coding system for terminal.
+ ;; (let ((coding (get-language-info language-name 'unibyte-display)))
+ ;; (if coding
+ ;; (standard-display-european-internal)
+ ;; (standard-display-default (if (eq window-system 'pc) 128 160) 255)
+ ;; (aset standard-display-table 146 nil))
+ ;; (or (eq window-system 'pc)
+ ;; (set-terminal-coding-system coding))))
+
+ (let ((required-features (get-language-info language-name 'features)))
+ (while required-features
+ (require (car required-features))
+ (setq required-features (cdr required-features))))
+ (let ((func (get-language-info language-name 'setup-function)))
+ (if (fboundp func)
+ (funcall func)))
+ (run-hooks 'set-language-environment-hook)