사용자:Hibm98/모듈/Convert
유용한 도구들 | ||
모듈:Convert | text | |
환산 데이터 | ▶ makeunits | ▶ data |
해야할 일들
편집각종 설명문서 번역
편집- !!! 최우선순위 !!! en:Module:Convert/documentation/conversion data introduction/doc 번역
- en:Module:ConvertTestcase/doc 번역
- en:Help:Convert messages 번역
- 환산 데이터 문서의 제목, 표제목 번역
- Acceleration에 시범 적용중
- 환산 데이터 시작하기 번역이 끝나 실제로 적용될 때 같이 정식으로 적용될 예정
- Automatic per units의 적절한 용어 찾기
각종 메시지/주석 번역
편집- 모듈:Convert/text 메시지 번역
- 매개변수 이름 번역
코드 현지화
편집omit_scale_sep
가 upstream에 반영될 수 있도록 문서화 및 테스팅 도구 제작- '통화 매 단위'에서 '원'도 지원하도록 수정
- 원 기호를 넣으면 더 좋았겠지만 역슬래쉬로 나와서 안타깝다. :'-\
- 통화가 들어간 매 단위에 한해 단위 표시를 '단위 당 통화'로 수정
- '$120 매 에이커' vs '에이커 당 $120' / '₩1,200 매 리터' vs '리터 당 ₩1,200'
{{단위 변환|120|$/에이커}}
- 현재 구현 → $120 매 에이커 ($300/ha)
- 통화 단위에서 후자를 쓰는 경우는 많이 봤지만(단위와 당 사이 띄어쓰기 유무는 논외) 전자를 쓰는 경우는 정말 한번도 못 봤던 것 같다.
- ...해서 통화 매 단위에 한해 후자 방식으로 출력하게 하려고 생각해봤다.
- 예상 구현 → 에이커 당 $120 ($300/ha)
local function make_per(unit_table, ulookup)
- 매 단위를 테이블로 만드는 부분- 여기에서 통화 기호이면 단위 테이블에
reverse_output
를 참으로 설정하고
- 여기에서 통화 기호이면 단위 테이블에
local function lookup(parms, unitcode, what, utable, fails, depth)
- 단위를 테이블로 만드는 부분if top and not unitcode:find('e%d') then -- If valid, create an automatic per unit for an "x/y" unit code.
미처 처리되지 못한 x/y를 처리하는 부분
local function make_id(parms, unit_table, key_id, want_link, clean)
- 단위 기호를 단위 명칭이나 기호로 바꿔주는 부분local function decorate_value(parms, unit_table, which, number_word)
- 값을 꾸며주는 부분local function process_one_output(parms, out_current)
- 최종 출력 부분if add_unit then show = show .. out_current.sep .. (i == 0 and id1 or make_id(parms, i+1, out_current)) end
- 여기에서
abbr = true
이 아니면서 단위 테이블의reverse_output
가 참이면 값과 단위의 출력 순서를 뒤집어주면...?
- 값:'$120', 단위:'에이커 당' → '$120 에이커 당' (X) / '에이커 당 $120' (O)
- 값:'₩1,200', 단위:'리터 당' → '₩1,200 리터 당' (X) / '리터 당 ₩1,200' (O)
- 흠... 이렇게 한다면
local currency_per_word = '당'
도 필요해지는 걸까... - 그럼
make_per
에서- 통화외 매 단위를 만들 때는
reverse_output
이 nil 내지 false으로 설정되어 있으니까 기존 방식인단위명칭 = per_word .. 분리자 .. 단위2명칭
으로 - 통화 매 단위를 만들 때는
reverse_output
이 true로 설정되어 있으니까abbr = true
가 아닌 상태서단위명칭 = 단위2명칭 .. 분리자 .. currency_per_word
으로 설정해야 되는걸까
- 통화외 매 단위를 만들 때는
- '$120 매 에이커' vs '에이커 당 $120' / '₩1,200 매 리터' vs '리터 당 ₩1,200'
multiplier
가 주어지면 표시되는 값도 그만큼 곱해주고, 단위명에서 숫자 제거해야 함{{사용자:Hibm98/실험장/틀3|2|1000sqft}}
를 예로 들었을 때...- '2 1000 제곱피트 (190 m2)' (X)
- '2,000 제곱피트 (190 m2)' (O)
- 근데 이거 정말 버그일까? 의도한 동작일까? 흠...
- 만 단위로 끊은 숫자 크기 표기법인
e4
,e8
등의 지원 - 온도를 표시할 때 "섭씨 10 도" / "화씨 32 도" / "란씨 200 도" / "열씨 123 도" 이런 식으로 나오게 해야 함
- 켈빈은?
환산표 현지화
편집- 대한민국에서 자주 쓰던 홉, 되, 말, 근, 관, 돈 단위 추가
- 틀:척근법 참고
- 제곱미터, 제곱야드 뿐만 아니라 일본식 명칭인 평방미터, 입방미터를 별칭으로 달아주기
- 자주 쓰는 SI단위들을 별칭으로 미리 입력해두기 ← 한국어 SI 접두어 지원 전까지만 사용할 목적
- 미터, 제곱미터, 세제곱미터, 리터, 그램, 그 외...
- 단위 코드에 한국어 입력 필요
단위(유닛) 테스트
편집- 유닛 테스트 구현
- 어떤 것을 중점으로 두고 어떤 것을 테스트해야 하는가?
- 영어판 문서 중 Template:Convert를 사용한 문서에서 몇몇 단위를 가져와 적당하게 한국어로 수정후 테스트 케이스로 넣기
- 한국어판 문서 중 단위를 사용할것 같은 문서들을 추려내 단위틀을 쓴다고 가정하고 적당하게 수정 후 테스트 케이스로 넣기
- 또 어떤 좋은 방법이 있을까...
- 직접 각종 단위들을 사용하는 테스트 케이스 생성
- 뉴스 기사나 문헌에서 나오는 수치들을 그게 어떤 것을 설명하는 수치인지 알 수 없도록 조치한 후 테스트 케이스로 넣기
- 어떤 것을 중점으로 두고 어떤 것을 테스트해야 하는가?
릴리즈 전 해야할 것들
편집- 모듈이 정식으로 사용되기 전에 반드시 아래의 추적용 분류들을 만들것 (상황에 따라 모듈에서 자동으로 달아줄 예정)
- (d:Q15129832) 분류:단위 변환시 발생한 오류와 관련된 분류 (정말 필요할까?)
{{추적용 분류|숨김=1|분류모음=1}}
- (d:Q15129839) 분류:단위 변환시 올바르지 않은 옵션을 사용한 문서
{{추적용 분류|숨김=1}} [[틀:단위 변환]]을 참고하세요.
- (d:Q15129830) 분류:단위 변환시 올바르지 않은 단위를 사용한 문서
{{추적용 분류|숨김=1}} [[틀:단위 변환]]을 참고하세요.
- (d:Q15129832) 분류:단위 변환시 발생한 오류와 관련된 분류 (정말 필요할까?)
다음 버전에서 구현할 것들
편집- 한국어 SI 접두어 지원 (차후 예정) - 사:hibm98/작업장/모듈1, 모듈:연습장/hibm98/모듈1
- 킬로그램 (O), k그램 (X), 킬로g (X), kg (O)
- 센티미터 (O), c미터 (X), 센티m (X), cm (O)
- 제곱킬로미터 (O), 제곱k미터 (X), 킬로m2 (X), km2 (O)
- 제곱밀리미터 (O), 제곱m미터 (X), 밀리m2 (X), mm2 (O)
- 이건 좀 큰 작업인 듯 하므로 별도의 작업장에서 다룸
해놓은 일들
편집각종 설명문서 번역
편집- Defaults의 적절한 용어 찾기
'기본 출력 단위'vs '기본 변환 단위'- 환산 데이터 시작하기, 모듈/text에 있던 문자열들 중에서 기본 출력 단위를 기본 변환 단위로 변경 완료
- extra의 용도 확인
local function convert(parms, invalue, info, in_current, out_current)
의 내용을 참조하자면...invert
가 주어진 단위들:mpge
,dpcm
,dpi
,Hz
,si tsfc
,tsfc
- 분모와 분자를 뒤집어서 출력하는 옵션
mach
가 주어진 단위들:Mach
- 모듈에 유일하게 내장되어 있는 마하 단위의 특수 변환을 수행하는 옵션
- 숫자가 주어진 단위들: Temperature에 있는 단위들 전체
- 각 단위의 0에서 절대 온도를 나타내려면 얼만큼 더해야 하는지 알려주는 수치 옵션
- 이런 특성들을 고려해서 열 이름을 '추가 옵션'으로 일단 정함
- Overrides의 적절한 용어 찾기
a
와ha
사례- 아르 단위는 SI 접두어를 사용하는 단위
- 그런데
ha
의 출력 명칭을 정할 때 SI 접두어h
(헥토)가 붙어 '헥토아르'라는 괴상한 명칭이 붙음 - 이걸 막기 위해 Overrides에 ha를 정의하고 따로
ha
(헥타르)라는 단위를 정의하여 이 문제를 피하고 있음
- 고심 끝에 해ㅊ..아니 '단위 코드 재정의'..아니 '재정의된 단위 코드'로 번역
- en:Module:Convert/text/doc 번역
문서 이동
편집- 모듈:Convert/설명문서/변환 데이터/설명문서 → 모듈:Convert/설명문서/환산 데이터/설명문서로 이동 완료
- 어떻게 변환해야 할 지 정의해놓은 데이터들이니까 '환산'이 더 맞는 단어라고 생각했음
- 옮긴 직후 역링크와 하드코딩된 문서/모듈들을 전부 찾아서 새 문서명으로 바꿔줌
코드 현지화
편집-
abbr=1
하면 피트가 ft되는 것 까진 좋은데 평도 pyeong가 되는 문제- 기호 앞에
~
를 붙여서 해결
- 기호 앞에
- 가 '제곱밀리미터'(제곱+SI2+미터)가 아닌 '밀리제곱미터'(SI2+제곱미터)로 출력되는 문제
- SI 접두사를 어디서 붙여주나하고 코드를 따라가다보니 다행히
prefixed_name
함수에서prefix_position
에 접두사를 출력해주는 기능이 있었음 prefix_position
는 다른 속성들처럼 data에 정의되야 하는 것 같아서 makeunit 소스 탐색- 그러다가
make_unit
부분에서%s
가 발견되면 접두사의 위치를 정해주는prefix_position
을 정의해주는 부분 발견 %s
이 어디에 있어야 하는지 코드를 다시 살펴보니 각 이름 부분에서 찾고 있음- 결국 환산표에서 제곱미터 이름을 제곱%s미터로 바꿔주고 makeunit을 다시 돌려 결과를 data로 복사함으로써 버그 수정
- SI 접두사를 어디서 붙여주나하고 코드를 따라가다보니 다행히
- 환산표의 링크 열에서
+
가 앞에 붙었을 때 단위명에서 '미국'이 앞에 붙어있음에도 불구하고 단위명의 '미국'이 지워지지 않은채 중복으로 붙는 문제- 모듈:Convert의 2900행 부근을 보면 'US', 'U.S.' 등이 하드코딩되어 있다...
if want_link then local link = data_code.link_exceptions[unit_table.linkey or unit_table.symbol] or unit_table.link if link then local before = '' local i = unit_table.customary if i == 1 and parms.opt_sp_us then i = 2 -- show "U.S." not "US" end if i == 3 and abbr_on then i = 4 -- abbreviate "imperial" to "imp" end local customary = text_code.customary_units[i] if customary then -- LATER: This works for language en only, but it's esoteric so ignore for now. -- 지금 이 부분은 패쓰 local pertext if id:sub(1, 1) == '/' then -- Want unit "/USgal" to display as "/U.S. gal", not "U.S. /gal". pertext = '/' id = id:sub(2) elseif id:sub(1, 4) == 'per ' then -- Similarly want "per U.S. gallon", not "U.S. per gallon" (but in practice this is unlikely to be used). pertext = 'per ' id = id:sub(5) else pertext = '' end -- Omit any "US"/"U.S."/"imp"/"imperial" from start of id since that will be inserted. -- 일치하는 문자열을 지워주는 부분 local removes = (i < 3) and { 'US ', 'US ', 'U.S. ', 'U.S. ' } or { 'imp ', 'imp ', 'imperial ' } for _, prefix in ipairs(removes) do local plen = #prefix if id:sub(1, plen) == prefix then id = id:sub(plen + 1) break end end before = pertext .. make_link(customary.link, customary[1]) .. ' ' -- 지워버린 문자열을 미리 지정된 링크로 복구 end id = before .. make_link(link, id, unit_table) -- 뒤에 나머지 문자열을 붙임 end end
- 즉, 제대로 작동하게 하려면 직접 모듈을 수정해야 한다... :(
- 아래처럼 수정해보면 어떨까? 일단 적어본다.
if want_link then local link = data_code.link_exceptions[unit_table.linkey or unit_table.symbol] or unit_table.link if link then local before = '' local i = unit_table.customary if i == 1 and parms.opt_sp_us then i = 2 -- show "U.S." not "US" end if i == 3 and abbr_on then i = 4 -- abbreviate "imperial" to "imp" end local customary = text_code.customary_units[i] if customary then -- LATER: This works for language en only, but it's esoteric so ignore for now. -- 지금 이 부분은 패쓰 local pertext if id:sub(1, 1) == '/' then -- Want unit "/USgal" to display as "/U.S. gal", not "U.S. /gal". pertext = '/' id = id:sub(2) elseif id:sub(1, 4) == 'per ' then -- Similarly want "per U.S. gallon", not "U.S. per gallon" (but in practice this is unlikely to be used). pertext = 'per ' id = id:sub(5) else pertext = '' end -- Omit any "US"/"U.S."/"imp"/"imperial" from start of id since that will be inserted. -- 일치하는 문자열을 지워주는 부분 local removes = (i < 3) and { 'US ', 'US ', 'U.S. ', 'U.S. ', '미국 ', '미국 ' } or { 'imp ', 'imp ', 'imperial ', '영국 ', '영국 ' } -- !! LOCALIZED : '미국', '영국' 추가 !! for _, prefix in ipairs(removes) do local plen = #prefix if id:sub(1, plen) == prefix then id = id:sub(plen + 1) break end end before = pertext .. make_link(customary.link, customary[1]) .. ' ' -- 지워버린 문자열을 미리 지정된 링크로 복구 end id = before .. make_link(link, id, unit_table) -- 뒤에 나머지 문자열을 붙임 end end
- 이렇게 하면 모듈:Convert/text의
customary
부분도 적절하게 바꿔줘야 한다...- 196행 근처를 한번 수정함...
-- Some units can be qualified with one of the following prefixes, when linked. local customary_units = { { "미국", link = "미국 단위계" }, { "미국", link = "미국 단위계" }, { "영국", link = "야드파운드법" }, { "영국", link = "야드파운드법" }, }
- 이렇게 수정하니 이제 잘 작동한다.
- 근데 그냥 단위기호가 표시되어야 하는 상황에서도 치환된다...
어쩔 수 없이US
,U.S.
,imp
등등을 날려버렸다...- 결국 모듈:Convert/makeunits, 모듈:Convert, 모듈:Convert/text를 좀 손봐서 모두 지원되게 했다...
단위 테스트
편집- 사:ChongDae님이 가져왔던 사용자:ChongDae/작업장2이 있었음
- 다른 사람의 사용자 문서이므로 이쪽에서 작업하기 위해 사:hibm98/작업장/문서3으로 fork함