+
+;;; Basic support functions for managing Emacs' locale setting
+
+(defvar w32-valid-locales nil
+ "List of locale ids known to be supported.")
+
+;;; This is the brute-force version; an efficient version is now
+;;; built-in though.
+(if (not (fboundp 'w32-get-valid-locale-ids))
+ (defun w32-get-valid-locale-ids ()
+ "Return list of all valid Windows locale ids."
+ (let ((i 65535)
+ locales)
+ (while (> i 0)
+ (if (w32-get-locale-info i)
+ (setq locales (cons i locales)))
+ (setq i (1- i)))
+ locales)))
+
+(defun w32-list-locales ()
+ "List the name and id of all locales supported by Windows."
+ (interactive)
+ (if (null w32-valid-locales)
+ (setq w32-valid-locales (w32-get-valid-locale-ids)))
+ (switch-to-buffer-other-window (get-buffer-create "*Supported Locales*"))
+ (erase-buffer)
+ (insert "LCID\tAbbrev\tFull name\n\n")
+ (insert (mapconcat
+ '(lambda (x)
+ (format "%d\t%s\t%s"
+ x
+ (w32-get-locale-info x)
+ (w32-get-locale-info x t)))
+ w32-valid-locales "\n"))
+ (insert "\n")
+ (goto-char (point-min)))
+
+