쉘 환경 언어 변경

Linux 2020. 6. 18. 21:30

쉘 환경 언어 변경

로케일

로케일은 사용자의 언어, 국가뿐 아니라 사용자 인터페이스에서 사용자가 선호하는 사항을 지정한 매개 변수의 모임이다

로케일의 변경은 표시 언어, 숫자 형식, 날짜/시간 형식, 시간대, 일광 절약 시간, 통화 형식등 많은 것을 포함한다

아래와 같이 로케일의 변경에 따라 출력 양식이 달라짐을 알 수 있다

$ export LANG=en_US.UTF-8
$ date
Thu, Jun 18, 2020 9:26:57 PM

$ export LANG=ko_KR.UTF-8
$ date
2020년 06년 18일 목 오후 9:27:16

LANG 환경 변수

LANG 환경변수(environment variable)를 출력해보면 로케일(locale)과 문자셋(character set) 방식을 알 수 있다

언어를 변경하기 위해서는 export 명령어로 LANG 환경변수를 설정해준다. 값의 의미는 간단히 language_COUNTRY.ENCODING 형식으로 순서대로 언어, 지역, 인코딩을 의미한다

$ echo $LANG
ko_KR.UTF-8

$ export LANG=en_US.UTF-8
echo

유닉스 계열 운영체제에서 문자열을 터미널(terminal)에 반향(echo)하는 명령어이다. 일반적으로 쉘 스크립트와 배치 파일에서 화면이나 파일로 상황을 알리는 문자열을 출력할때 사용한다

export

환경변수를 설정한다

export 명령어를 이용한 로케일/문자셋 변경은 일시적으로 계속적인 적용을 하기 위해서는 배치 파일에 기록해야한다

$ cat ~/.bash_profile
export LANG=ko_KR.utf8

시스템 로케일 변경

이 부분은 더 나은 설명을 하는 블로그가 있어 링크를 겁니다
joinc 블로그, Locale

설정

트랙백

댓글

날짜 정규화

Android 2017. 5. 2. 16:04

MPAndroidChart 차트 라이브러리를 사용하면서 일별 데이터를 출력해야했는데

데이터베이스에 System.currentTimeMillis()로 얻어지는 UTC(세계 협정시)를 그대로 저장했기에

x축으로 그대로 사용할 수 없었고 간격이 1일이 되는 날짜로 정규화할 필요성이 있었다


(별도의 정규화가 필요한 이유는 20170517 과 같은 단순히 년/월/일을 직접 조합한 값을 사용하게 되면 년과 월의 경계에서 숫자가 크게 변하게 되어 이 값을 일정한 간격으로 증가해야하는 차트의 x축 값으로 사용하기에 적절하지 않기 때문이다)


처음엔 당연한듯 하루의 밀리초에 해당되는 (1000 * 60 * 60 * 24)로 나누어 정규화했지만

오차가 발생하였고 웹서칭으로 알아보니 지역별 TimeZone을 고려하지 않았서 생긴 문제였다


1
2
3
4
5
long t1 = 1493548835119// 2017-04-30 19:40:35.119
long t2 = 1493548835119// 2017-05-01 00:39:56.124
 
System.printf("" + (t1 / (1000 * 60 * 60 * 24)); // 17286 = 2017-04-30
System.printf("" + (t2 / (1000 * 60 * 60 * 24)); // 17286 = 2017-04-30
cs


결론적으로 한국은 UTC/GMT +9 이고

하루의 시간으로 나누어 시간 부분을 잘라내기전에 +9시간을 더해주어야 한다


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
long utcToDates(long timeMillis) {
    // utc를 입력 받아서 날수를 계산
    // TimeZone을 고려하지 않고 그냥 하루의 시간으로 나누게 되면 지역별 시간차에 의해 최대 1일의 오차가 발생
    return (timeMillis + Calendar.getInstance().get(Calendar.ZONE_OFFSET)) / (1000 * 60 * 60 * 24);
}
 
long datesToUtc(long dates) {
    return dates * (1000 * 60 * 60 * 24);
}
 
public String getFormattedDate(long value) {
    String strDate;
    Date mDate = new Date();
    Canendar mCalendar = Calendar.getInstance();
 
     mDate.setTime(datesToUtc(value));
     mCalendar.setTime(mDate);
 
     strDate = "" + mCalendar.get(Calendar.YEAR) +
                    "-" + (mCalendar.get(Calendar.MONTH) + 1+
                    "-" + mCalendar.get(Calendar.DATE);
 
     return strDate;
}        
cs




'Android' 카테고리의 다른 글

뷰 스와이프 영역 겹침 문제  (0) 2017.04.28
GPS 설정 액티비티 호출  (0) 2017.04.28

설정

트랙백

댓글

뷰 스와이프 영역 겹침 문제

Android 2017. 4. 28. 05:31

적절한 제목인지는 잘 모르겠습니다


ViewPager 내부에 네이버 맵 프래그먼트가 속해있는 구조에서

네이버 맵 영역에서 좌우로 패닝(손가락을 때지 않고 움직임)시에

동작이 네이버 맵에 전달되지 않고 ViewPager에 의해 가로채어져 좌우로 페이지가 넘어가는 문제가 있었습니다


이렇게 동작 영역이 겹칠때에는 어느 한쪽은 마땅히 포기해야하는것이 자연스럽겠죠?

웹서칭을 해보았으나 대부분 ViewPager 클래스를 상속 받아서 기능을 무력화 시키는 코드가 많이 보였습니다

단지 이것을 위해 상속 받아야 한다면 파리를 잡기 위해 대포를 쏘는 격 같은데요


터치 이벤트 관련해서 여러 자료를 읽은 후에 다음과 같이 해결할 수 있었습니다


1
2
3
4
5
    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        viewPager.requestDisallowInterceptTouchEvent(true);
        return super.dispatchTouchEvent(ev);
    }
cs

모든 이벤트는 화면을 가득 채우는 Activity로 부터 시작합니다
VIewGroup의 포함관계에 따라 이벤트가 전달되는데
최상위에 존재하는 Activity의 despatchTouchEvent 메서드를 오버라이드해서 ViewPager에서 이벤트를 인터럽트 하지 못하도록 하는 메서드를 호출합니다

OOP 원리에 어긋나는것 같지만 상속하지 않고 문제를 해결 했습니다.


'Android' 카테고리의 다른 글

날짜 정규화  (0) 2017.05.02
GPS 설정 액티비티 호출  (0) 2017.04.28

설정

트랙백

댓글

GPS 설정 액티비티 호출

Android 2017. 4. 28. 05:13
GPS 기능이 켜져있는지를 확인 후에 GPS가 꺼져있다면 관련 설정 액티비티를 호출하는 코드와 관련 퍼미션입니다
안드로이드 6.0 이후에는 엄격해진 보안으로 별도의 퍼미션 요청 코드가 필요합니다

1
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
cs

1
2
3
4
5
LocationManager locMan = (LocationManager) getContext().getSystemService(Context.LOCATION_SERVICE);
if (locMan.isProviderEnabled("gps"== false) {
    Toast.makeText(getContext(), "GPS 기능을 필요로 합니다.", Toast.LENGTH_LONG).show();
    startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
}
cs


'Android' 카테고리의 다른 글

날짜 정규화  (0) 2017.05.02
뷰 스와이프 영역 겹침 문제  (0) 2017.04.28

설정

트랙백

댓글