# svccfg -s svc:/system/environment:init listprop environment/LANG
environment/LANG astring C
# echo $LANG
en_US.UTF-8
?????
# cat /etc/TIMEZONE
#__GENERATED__V1__
#
# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
#
# This file is /etc/default/init. /etc/TIMEZONE is a symlink to this
# file.
#
# READERS OF THIS FILE: This file is Obsolete. Migrate to reading
# properties from svc:/system/environment:init. This file may be
# removed in future releases.
#
# WRITERS OF THIS FILE: This file is no longer user editable. To
# effect changes to the configuration contained in this file, an
# administrator with the "System Administrator" or "System
# Configuration" Rights Profile may set the corresponding
# properties of the svc:/system/environment:init service
# instance and refresh the instance.
# See init(1M) for further details.
#
# WARNING: CHANGES TO THIS FILE WILL BE OVERWRITTEN BY THE SYSTEM.
#
CMASK=022
TZ=localtime
LANG=C
So its updated file....
Why on earth is echo $LANG still reporting wrong locale? Surely I dont need to reboot server?
I wouldn't think that you need to reboot, but you may need to reset the environment variables that define your locale. The above will show you if that is the case. If you only have a couple of terminals open you may be able to do this manually, otherwise you may need to log out and in again.
You are confusing global settings and process settings.
Changing the system locale isn't going to magically change the one currently set in your shell environment. No supported method allows to set a environment variable from the outside. Your shell was rightly keeping the LANG variable value that was set in the first place, before the svccfg.